Zettelkasten

GCP API 키 호출자 IP는 Cloud Audit Data Access Log를 켜야 추적할 수 있다

·수정 2026.05.14·수정 2

요약

  • API 키 사용 audit 시 Cloud Monitoring 메트릭은 "언제·어떤 메서드·어떤 응답"은 보여주지만 호출자 IP·User-Agent는 안 보인다
  • IP 추적이 필요하면 사전에 Cloud Audit Logs의 Data Access Log를 활성화해두어야 함
  • Admin Activity Log는 기본 켜짐(무료, 400일 보관), Data Access Log는 기본 꺼짐(유료, 일부만 30일)

본문

Cloud Monitoring 메트릭으로 보이는 것

consumed_api::serviceruntime.googleapis.com/api/request_count 메트릭에 붙는 라벨:

라벨 예시 추적 가능
resource.credential_id apikey:<CREDENTIAL_ID> 어떤 키가 호출
resource.service generativelanguage.googleapis.com 어떤 API
resource.method ...GenerateContent 어떤 메서드
resource.version v1, v1beta API 버전
resource.location us-central1 리전
metric.response_code 200, 429, 404 응답 결과
metric.protocol grpc, http 프로토콜

못 보는 것: 호출자 IP, User-Agent, 실제 요청 페이로드.

Cloud Audit Log의 3가지 종류

로그 종류 기본 상태 보관 기간 비용 기록 내용
Admin Activity 켜짐(off 불가) 400일 무료 리소스 생성/수정/삭제
System Event 켜짐(off 불가) 400일 무료 GCP 시스템 자동 변경
Data Access 꺼짐(BigQuery만 켜짐) 30일 유료 데이터 읽기/쓰기, callerIp/userAgent 포함

→ API 키 호출 IP 추적은 Data Access Log 영역. 안 켜놨으면 IP 못 잡음.

Data Access Log 켜는 법

콘솔: IAM & Admin → Audit Logs → 서비스 선택 → "Data Read / Data Write / Admin Read" 체크.

CLI:

# 현재 정책 확인
gcloud projects get-iam-policy <PROJECT_ID> \
  --format=json > policy.json

# auditConfigs 추가 후 적용 (예: Generative Language API의 DATA_READ)
gcloud projects set-iam-policy <PROJECT_ID> policy.json

auditConfigs 구조:

auditConfigs:
- service: generativelanguage.googleapis.com
  auditLogConfigs:
  - logType: DATA_READ
  - logType: DATA_WRITE

비용 고려

Data Access Log는 트래픽 1MB당 $0.50 (Cloud Logging ingestion 요금). 호출량 많은 API에 켜면 월 수십~수백 달러 나갈 수 있음. 고가치 키 관련 서비스만 선택적으로 켜는 게 정석.

사후 분석 한계

뒤늦게 IP를 알고 싶을 때 Data Access Log가 안 켜져 있으면 소급 추적 불가능. 메트릭의 resource.location(리전 단위)만 단서로 남음. 고가치 키 관련 서비스는 사전에 Data Access Log를 켜두는 것이 안전.

대안: VPC Service Controls / IAM Conditions

IP 기반 접근 제어가 필요하면 Data Access Log 추적 대신 VPC Service Controls로 사전 차단하거나, IAM Conditions로 IP 화이트리스트 거는 방법도 있음. API 키는 본질적으로 익명이라 IP 제한이 가장 강력한 통제 수단.

참고