Zettelkasten

AWS Secrets Manager 변경자는 CloudTrail PutSecretValue로 추적한다

·수정 1

요약

  • Secrets Manager 시크릿이 잘못 변경되었을 때, CloudTrail의 PutSecretValue 이벤트로 변경자(IAM user/role), 시점, 소스 IP를 특정할 수 있다.
  • list-secret-version-ids로 AWSCURRENT/AWSPREVIOUS 버전 시점을 먼저 파악한 뒤, CloudTrail에서 해당 시간대를 좁혀 조회하면 효율적이다.

본문

1단계: 버전 이력으로 변경 시점 파악

aws secretsmanager list-secret-version-ids \
  --secret-id <SECRET_NAME> \
  --region ap-northeast-2

AWSCURRENT(현재)와 AWSPREVIOUS(직전) 두 버전의 CreatedDate가 나온다. 이전 버전 값이 필요하면:

aws secretsmanager get-secret-value \
  --secret-id <SECRET_NAME> \
  --version-stage AWSPREVIOUS

2단계: CloudTrail에서 변경자 추적

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=PutSecretValue \
  --region ap-northeast-2 \
  --start-time 2026-05-17 --end-time 2026-05-19 \
  --output json

결과에서 Resources[].ResourceName으로 대상 시크릿을 필터링한 뒤, CloudTrailEvent JSON 내부의 핵심 필드를 확인한다:

필드 용도
userIdentity.type IAMUser, AssumedRole 등
userIdentity.arn 변경자의 정확한 ARN
userIdentity.userName IAM 사용자명
sourceIPAddress 변경 요청 출처 IP
eventTime 변경 시각 (UTC)

조회 팁

  • lookup-eventsEventName 기준 필터만 지원한다. 시크릿명 필터링은 결과를 받은 뒤 클라이언트에서 해야 한다.
  • CloudTrail 이벤트는 기본 90일 보관. 그 이상은 S3 trail export 필요.
  • GetSecretValue(읽기) 이벤트가 대량으로 섞여 나오므로 반드시 PutSecretValue로 좁혀야 한다.

실전 사례

시크릿 내 특정 키(예: API 토큰)가 무효 값으로 바뀌어 10일간 외부 API 호출이 실패한 사례:

  1. list-secret-version-ids로 AWSPREVIOUS가 특정 날짜에 생성된 것을 확인
  2. get-secret-value --version-stage AWSPREVIOUS로 이전 값이 무효 토큰임을 확인
  3. CloudTrail PutSecretValue에서 해당 시간대 변경자를 특정 → 다른 키를 수정하면서 의도치 않게 토큰이 덮어씌워진 것으로 판명

관련 노트

참고