← 문제 라이브러리
Security 중급 18분

공개 저장소에 AWS 액세스 키가 올라감: 20분 만에 낯선 서버가 생김

점심 무렵 한 개발자가 테스트용 설정 파일을 공개 GitHub 저장소에 push했는데, 그 안에 AWS 액세스 키가 들어 있었습니다.

검수된 문제무료
시나리오

점심 무렵 한 개발자가 테스트용 설정 파일을 공개 GitHub 저장소에 push했는데, 그 안에 AWS 액세스 키가 들어 있었습니다. 곧 GitHub 비밀 탐지 알림과 AWS의 '노출된 자격 증명' 메일이 왔습니다. 20분 뒤 비용 경보가 울려 보니, 우리가 쓰지 않는 리전에 GPU 인스턴스가 수십 대 생기고 있습니다. 개발자는 커밋을 지우고 저장소를 비공개로 돌리면 된다며 강제 push를 준비하고 있습니다. 키 주인인 ci-uploader 사용자는 2년 전 배포 스크립트용으로 만든 계정입니다.

단서
알림과 CloudTrail
GitHub secret scanning: AWS Access Key ID AKIA…7QXA detected in config/test.env (commit 4f1c2e9)

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIA…7QXA --region ap-south-1 --max-results 3
RunInstances         12:47:10  userIdentity: ci-uploader (IAMUser)
RunInstances         12:46:58  userIdentity: ci-uploader (IAMUser)
CreateKeyPair        12:46:31  userIdentity: ci-uploader (IAMUser)
키 정보
$ aws iam list-access-keys --user-name ci-uploader
AccessKeyId: AKIA…7QXA   Status: Active   CreateDate: 2024-03-11
# ci-uploader 정책: AmazonEC2FullAccess, AmazonS3FullAccess (임시로 붙인 뒤 방치)

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 유출 대응의 순서: 먼저 끊고, 조사하고, 나중에 정리
  • 커밋을 지워도 이미 퍼진 키는 되돌릴 수 없다
점검 체크리스트
  1. 키를 즉시 비활성화할 수 있는지(list-access-keys·update-access-key)
  2. CloudTrail에서 그 키로 한 모든 행동(리전 전체)
  3. 생긴 리소스(인스턴스·키 페어·사용자)와 다른 비밀값의 노출 여부