Agent Platform 감사 로그 Deep Dive

표지 + 8 SLIDES · 16:9 · 1920×1080

휴대폰에서는 장표를 탭하면 그 장을 크게 볼 수 있음

AI CASE DEEP DIVE

에이전트
어떻게
감사(Audit)
할 것인가?

GOOGLE CLOUD

01 · 개요

기본값엔 데이터 열람 기록이 없어 켜고 보관·권한을 정해야 함

Exhibit 1 · 에이전트가 한 일 중 기본값으로 남는 것과 켜야 남는 것 원문 작업표에서 에이전트 관련 작업만 골라 묶음

에이전트호출 1건← 구성 변경읽고 쓰고 실행 →항상 남음 · 구성을 바꿨나관리자 활동 · 끌 수 없음메모리 만들기·지우기·영구 삭제memories.create · delete · purge메모리를 이전 판으로 되돌리기memoryRevisions.rollbackRAG 문서 묶음 만들기·지우기ragCorpora.create · delete샌드박스 만들기·지우기sandboxEnvironments.create · delete거버넌스 정책 만들기·변경semanticGovernancePolicies켜야 남음 · 데이터를 읽고 쓰고 실행했나데이터 액세스 · 기본 꺼짐고객 세션·대화 기록 열람sessions.get · sessionEvents.list에이전트 메모리 검색memories.retrieve배포한 엔드포인트에 예측 요청endpoints.predictRAG 파일 올리기·지우기ragFiles.upload · delete샌드박스에서 코드 실행sandboxEnvironments.execute

상황

Agent Platform(옛 Vertex AI§)의 감사 대상 작업표에 세션, 메모리, RAG, 샌드박스 작업이 들어 있음

문제

기본값으로는 에이전트가 무엇을 읽고 쓰고 실행했는지 답할 수 없음

해야 할 것‡

켜기(2·3쪽) · 에이전트별 계정(4쪽) · 읽을 사람(5쪽) · 장기 보관(6쪽) · 착수 전 결정(8쪽)

아직 모르는 것

로그 양·비용, 대화 본문이 남는지 → 추정은 7쪽 로그 양·대화 본문 카드, 시험은 8쪽

출처: Google Cloud 문서 「Agent Platform 감사 로깅 정보」(2026.10 확인)와 AX Review 노트(2026.10.31). 작업 이름은 원문 표 그대로, 한국어 풀이는 우리 번역 · 기호: 무표시 = 원문 · § = 다른 Google 문서로 보강 · 추정 = 원문 사실 바탕 예상 · ‡ = 노트 설계안 · † = 가상 예시

1

02 · 로그 종류

구성을 바꾼 기록은 늘 남고 데이터를 읽고 쓴 기록은 켜야 남음

Exhibit 2 · Agent Platform 감사 로그 종류와 기본 상태

켜짐끌 수 없음관리자 활동구성·메타데이터를 바꾸는(쓰기) 작업예· 메모리 지우기· 엔드포인트에 모델 배포· 거버넌스 정책 변경꺼짐기본 꺼짐 · 켜야 기록데이터 액세스구성을 읽는 작업과 사용자가 맡긴 데이터를 읽고 쓰는 작업예· 세션 열람, 메모리 검색· 엔드포인트 예측· RAG 파일 올리기· 샌드박스 코드 실행관리자 읽기ADMIN_READ · 설정 읽기데이터 읽기DATA_READ21개 작업데이터 쓰기DATA_WRITE16개 작업켜짐끌 수 없음시스템 이벤트사람이 아니라 Google Cloud가 자동으로 리소스 구성을 바꾼 작업예· Agent Platform에서는 1종· 인스턴스 검증 기록(InstanceVerification.LogEvidence)정책 거부§ · 보안 정책에 막힌 접근원문의 '사용 가능한 감사 로그' 목록엔 없고 로그 이름(…%2Fpolicy)에만 나옴 · 5쪽 역할 표에서 함께 다룸예외BigQuery 데이터 액세스 로그는 끌 수 없음

출처: 로그 종류·기본 상태·예외·작업 수·로그 이름(원문). 정책 거부 설명은 Cloud 감사 로그 개요 문서(보강) · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

2

03 · 한 건 따라가기

문의 1건의 호출 8개 중 7개는 데이터 액세스를 켜야 남음

Exhibit 3 · 고객 문의 1건에서 일어나는 호출 8개 따라가기 흐름은 가상 예시†, 작업별 로그 범주는 원문 표

고객에이전트상담원1세션 생성sessions.create데이터 액세스 · 쓰기기본값✕ 안 남음고객이 문의 열기2메시지 추가sessionEvents.append데이터 액세스 · 쓰기기본값✕ 안 남음고객 메시지3기억 검색memories.retrieve데이터 액세스 · 읽기기본값✕ 안 남음4문서 벡터 검색indexEndpoints.findNeighbors데이터 액세스 · 읽기기본값✕ 안 남음5답변 예측 요청endpoints.predict데이터 액세스 · 읽기기본값✕ 안 남음답변 전달 † · 감사 대상 아님6환불액 코드 실행sandboxEnvironments.execute데이터 액세스 · 쓰기기본값✕ 안 남음7세션 기록 열람sessions.get데이터 액세스 · 읽기기본값✕ 안 남음사람 개입 †8새 기억 생성memories.generate관리자 활동기본값○ 남음

읽는 법

기본값으로는 8번만 남음. 데이터 액세스를 켜면 8개 모두 남음. 대화를 만들고 덧붙인 기록(1·2), 기억·문서·모델을 읽은 기록(3~5), 코드 실행(6), 상담원 열람(7)은 켜야 남음

헷갈리기 쉬운 분류

같은 메모리 읽기도 get·list는 원문 분류상 관리자 읽기(ADMIN_READ), retrieve는 데이터 읽기. 생성·삭제는 관리자 활동 → 7쪽 제안의 근거

표에 없는 호출

Gemini 모델 호출 방식이나 에이전트 런타임 호출은 원문 표에 이름이 없음 → 8쪽 시험에서 확인‡

출처: 작업별 로그 범주(원문 표). 고객 문의 흐름·호출 순서는 이해를 돕는 가상 예시이며 실제 호출은 에이전트 구성에 따라 다름 · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

3

04 · 로그 한 건

로그 한 건의 '누가'는 사람이 아니라 호출한 계정 단위로 남음

Exhibit 4 · 감사 로그 한 건의 모양 필드 구조는 원문(5·6·7번은 보강§), 값은 가상†

{  "logName": "projects/acme-ai/logs/cloudaudit…%2Fdata_access",1  "resource": { "type": "audited_resource" },2  "timestamp": "2026-10-30T09:14:02Z",3  "protoPayload": {    "@type": "…google.cloud.audit.AuditLog",    "serviceName": "aiplatform.googleapis.com",4    "methodName": "…RetrieveMemories",5    "resourceName": "…/memories/m-77",6    "authenticationInfo": { "principalEmail": "agent-cs@…" },7    "requestMetadata": { "callerIp": "10.x.x.x" }8  }}

Exhibit 5 · 로그로 답하는 감사 질문

누가

principalEmail§ · 7번

호출한 계정(사람 계정 또는 서비스 계정)

무엇을

methodName§ · 5번

작업 이름 · 실제 문자열은 시험으로 확인

무엇에

resourceName§ · 6번

어느 세션·메모리에

언제

timestamp · 3번

작업 시각

어디서

callerIp · 8번

호출 IP · 일부 호출자 ID·IP는 Logging이 감출 수 있음

어느 프로젝트

logName · 1번

끝이 data_access면 데이터 액세스 로그

2번·4번은 Agent Platform에서 늘 같은 값(audited_resource, aiplatform.googleapis.com)

그래서‡

'누가'(7번)는 호출한 계정 단위로 남음. 에이전트 여럿이 한 계정을 쓰면 로그만으로는 어느 에이전트였는지 갈리지 않을 수 있음(→ 7쪽)

시험으로 확인할 것‡

resourceName·metadata 칸에 에이전트를 가리키는 값이 찍히는지

출처: LogEntry·protoPayload·AuditLog·serviceName·로그 이름·리소스 유형·호출자 IP·가림(원문). methodName·resourceName·principalEmail 필드 이름은 Cloud 감사 로그 형식 문서(보강), 값은 가상 · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

4

05 · 볼 수 있는 사람

데이터 액세스 로그는 비공개 로그 뷰어만 읽도록 따로 묶임

Exhibit 6 · 역할별로 읽을 수 있는 감사 로그 버킷 = 로그를 담는 저장 칸, _Default = 프로젝트 기본 칸

관리자 활동정책 거부시스템 이벤트데이터 액세스로그 뷰어roles/logging.viewer○ 읽음○ 읽음○ 읽음✕ _Default 못 읽음비공개 로그 뷰어roles/logging.privateLogViewer○ 읽음○ 읽음○ 읽음○ 읽음로그를 사용자 정의 버킷에 옮기면: 그 버킷 읽기 권한이 있는 사람은 데이터 액세스를 포함한 비공개 로그를 모두 읽음

왜 따로 두나‡

데이터 액세스 로그에는 누가 어느 고객 세션·메모리에 손댔는지가 담기므로 일반 로그 뷰어와 분리됨

그래서‡

로그를 사용자 정의 버킷·BigQuery로 옮기면 그곳의 읽기 권한이 경계가 됨. 켜기 전에 비공개 로그 뷰어를 받을 사람과 옮길 곳의 권한을 함께 정함

출처: 역할별 읽기 범위·_Default 버킷·사용자 정의 버킷 규칙(원문). '왜 따로 두나'·'그래서'는 원문 규칙에서 끌어낸 노트 정리 · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

5

06 · 보관

기본 보관이 짧아 1년 감사는 켜는 날 복사·연장이 필요함

Exhibit 7 · 감사 로그를 복사해 두는 길(라우팅)

프로젝트 감사 로그관리자 활동데이터 액세스시스템 이벤트정책 거부싱크조건에 맞는 로그를 보내는 규칙장기 보관·더 강력한 검색용 복사본Cloud StorageBigQueryPub/Sub다른 앱·저장소·서드파티로 전달싱크의 변형 2가지집계 싱크조직의 프로젝트 일부·전체의감사 로그를 한곳으로 모음제외 싱크데이터 액세스 로그 때문에프로젝트 로그 할당량을 넘으면그 로그를 빼는 싱크복사 없이 보기: 로그 탐색기(항목 필터),로그 애널리틱스(SQL), 콘솔·CLI·API

기본 보관 기간§

원문은 기간을 적지 않음. Cloud Logging 문서 기준 데이터 액세스가 들어가는 _Default 버킷은 기본 30일(늘릴 수 있음)

그래서‡

싱크는 만든 뒤 들어오는 로그만 복사하므로 켜는 날 BigQuery 싱크를 함께 만듦. _Default 보관 기간을 늘리는 방법도 있음§

출처: 목적지 3종·집계 싱크·제외 싱크·조회 도구(원문). 30일·보관 기간 변경·싱크가 이후 로그만 복사함은 Cloud Logging 문서(보강), '그래서'는 노트 설계안 · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

6

07 · 켜기 전 확인(원문 → 추정)

전용 계정 없이는 로그로 에이전트를 가르기 어려울 것으로 보임

Exhibit 8 · 실제로 켤 때 확인할 것 핵심은 계정 카드, 양·본문은 8쪽 시험, 켜는 단위는 별도 문서에서 확인 · 추정은 원문 사실을 바탕으로 한 예상이며 Google이 확인한 내용이 아님

에이전트별로 가르기

핵심

원문 사실

호출자 정보로 IP(caller_ip)를 남기고, 일부 호출자 ID·IP는 감춰질 수 있다고 함. 형식 설명에 에이전트 이름 칸은 없음

예상 추정

에이전트마다 전용 서비스 계정을 두어야 로그에서 에이전트별로 가를 수 있을 것으로 보임

근거: 원문이 밝힌 '누가'의 단서는 호출자 정보뿐이므로 계정이 같으면 구분이 어려울 것(resourceName·metadata 값은 시험으로 확인)

로그 양

8쪽 시험

원문 사실

데이터 액세스 로그로 할당량을 넘으면 그 로그를 빼는 싱크를 안내함. 엔드포인트 예측(endpoints.predict)이 데이터 읽기에 들어감

예상 추정

로그 양이 에이전트 호출 수에 비례해 크게 늘 것으로 보임

근거: 원문이 할당량 초과 대비책을 따로 둠. 예측은 질문마다 일어나는 호출임

대화 본문 기록

8쪽 시험

원문 사실

형식 설명은 로그 이름, 대상, 시각, 서비스 이름과 서비스별 정보(metadata) 칸만 적고, 요청 본문을 남기는지는 말하지 않음

예상 추정

프롬프트·답변 본문은 감사 로그에 남지 않을 가능성이 있으나 metadata 칸이 있어 단정할 수 없음

근거: 형식 설명에 본문 칸이 없음. 본문 기록용 기능(요청-응답 로깅)이 따로 있음§

켜는 단위

별도 문서 확인

원문 사실

데이터 액세스를 ADMIN_READ·DATA_READ·DATA_WRITE로 나눠 표로 제시하고, 켜는 법은 별도 문서로 안내함

예상 추정

하위 유형별로 골라 켤 수 있을 가능성이 있음

근거: 원문이 세 하위 유형을 따로 정의함

우리 제안‡

고객 데이터 에이전트는 ADMIN_READ까지 켬: 사람이 메모리를 직접 연 기록(memories.get·list)이 관리자 읽기라 끄면 남지 않음 · 양이 큰 작업만 제외 필터로 빼고 잃는 것을 적음 · 본문이 남으면 로그 자체가 개인정보 보관소가 되므로 5쪽 권한·8쪽 보관 결정에 반영

출처: 원문 사실(Google Cloud 문서), 추정·근거는 원문 사실을 바탕으로 한 AX Review 예상, 요청-응답 로깅은 Agent Platform 문서(보강), 우리 제안은 노트 설계안(ADMIN_READ 시점은 메모리 직접 열람 기록 때문에 고쳐 씀) · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

7

08 · 적용

고객 데이터 에이전트부터 10영업일에 켜고 감사 질문 5개로 판정함

Exhibit 9 · 10영업일 적용 순서‡

D-01일2일3일4일5일6일7일8일9일10일할 일과 산출물결정CIO·CISO아래 결정 4가지대상은 고객 데이터 에이전트 1~2개현황 조사클라우드 플랫폼프로젝트별 데이터 액세스 상태여러 에이전트가 함께 쓰는 계정개발 환경 시험에이전트 개발팀켜고 경로마다 1회 호출 → 작업표, 실제 methodName 대응표,본문 기록 여부, 월 비용 추정운영 적용클라우드 플랫폼BigQuery 싱크를 먼저 만들고 운영 데이터 액세스 켜기공유 계정 분리리허설·판정보안·감사, 비용 담당질문 5개, 하루 로그 양으로 비용 추정 검증CISO 서명

Exhibit 10 · 착수 전(D-0) 결정 4가지‡

대상 범위

고객 데이터 에이전트(상담·청구 접수·인사 문의)부터

결정: CIO

보관 기간

1년(권고, 법무 확인 · 4일차 본문 기록 여부로 재확인)

결정: CISO·법무

로그 읽을 사람

보안·감사 담당 소수

결정: CISO

월 로그 비용 상한

4일차 추정 후 확정

결정: 클라우드 비용 담당·CIO

Exhibit 11 · 8~10일 리허설 질문 5개‡

1

켠 뒤 고객 세션을 열람한 계정은?

sessions.get · sessionEvents.list

2

RAG 파일을 올리거나 지운 계정과 시각은?

ragFiles.upload · delete

3

샌드박스에서 코드를 실행한 계정과 횟수는?

sandboxEnvironments.execute

4

메모리를 영구 삭제하거나 되돌린 계정은?

memories.purge · memoryRevisions.rollback

5

보안 정책에 막힌 호출을 한 계정은?(0건도 정상)

정책 거부 로그

Exhibit 12 · 통과 기준‡

질문마다 BigQuery 쿼리 1개로 10분 안에 답(0건도 쿼리가 돌면 통과)

작업표의 작업이 운영 로그에 모두 남음, 운영 호출은 모두 전용 계정

로그 읽기 권한은 정한 사람에게만

로그 비용이 월 상한 이내(넘으면 양 큰 작업을 제외 조정 후 재측정)

표에 없는 호출은 실제 범주·기록 여부를 적고, 안 남으면 보완책·책임자를 서명 전에 정함

판정: 모두 채우면 CISO가 서명하고, 다음 분기에 나머지 에이전트로 넓힘

출처: 순서·담당·결정 항목·질문·통과 기준(노트 설계안, 기간과 값은 예시). 질문에 쓴 작업 이름은 원문 표 · 기호: 무표시 원문 · § 보강 · 추정 · ‡ 설계안 · † 가상

8