점검 개요
S3 Presigned URL을 사용하는 운영/개발 환경의 버킷과 IAM 자원을 전수 점검했습니다. 퍼블릭 액세스 차단, 암호화, 버킷 정책, IAM 권한, Access Key 로테이션 상태를 확인하고 개선 사항을 도출했습니다.
점검 대상 S3 버킷 현황
총 8개 버킷을 점검했습니다.
| 항목 | 양호 | 주의 |
|---|---|---|
| 퍼블릭 액세스 차단 | 7개 | 1개 (전체 미차단) |
| 서버측 암호화 (AES256) | 8개 전체 | - |
| 버전 관리 | 1개 | 대부분 미설정 |
| HTTPS 강제 (DenyInsecureTransport) | 3개 | 일부 누락 |
| 액세스 로깅 | 0개 | 전체 미설정 |
Presigned URL 전용 IAM User 점검
Presigned URL 서명 전용 IAM User를 prod/dev 분리하여 운영 중입니다.
권한 설계
{
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": [
"arn:aws:s3:::[bucket-name]/[prefix-1]/*",
"arn:aws:s3:::[bucket-name]/[prefix-2]/*",
"arn:aws:s3:::[bucket-name]/[prefix-3]/*"
]
}특정 prefix에만 접근을 제한하여 최소 권한 원칙을 적용했습니다.
Access Key 상태
| 환경 | 키 경과일 | 마지막 사용 | 상태 |
|---|---|---|---|
| prod | 42일 | 21일 전 | 실제 사용 여부 확인 필요 |
| dev | 42일 | 3일 전 | 정상 사용 중 |
90일 로테이션 권장 기준 내이지만, prod 키의 미사용 기간 확인이 필요합니다.
버킷 정책 분석
양호한 버킷 정책 패턴
운영/개발 주요 버킷은 다음 패턴을 따르고 있습니다:
- 사내 IP 기반 접근 제한 (HTTPS 강제)
- Presigned 전용 IAM User에게 특정 prefix만 허용
DenyInsecureTransport로 HTTP 전면 차단
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::[bucket-name]", "arn:aws:s3:::[bucket-name]/*"],
"Condition": {
"Bool": { "aws:SecureTransport": "false" }
}
}위험 발견: 퍼블릭 액세스 미차단 버킷
한 개발 버킷에서 다음 문제가 발견되었습니다:
- 퍼블릭 액세스 차단 4개 항목 모두 미설정
- 버킷 정책에
"Principal": "*"+"Action": "s3:*"허용 - IP 제한은 있으나 HTTPS 강제 조건 없음
발견된 문제점 및 권장 조치
긴급 (보안 위험)
| 문제 | 조치 |
|---|---|
| 퍼블릭 액세스 차단 미설정 | 4개 항목 모두 true로 변경 |
버킷 정책에 s3:* + Principal:* 허용 | 최소 권한으로 축소 (Get/Put/List만) |
| HTTPS 미강제 | aws:SecureTransport 조건 추가 |
| Access Key 90일 로테이션 초과 (온프레미스 서버용, ~160일) | 즉시 키 로테이션 |
주의 (운영 개선)
| 문제 | 조치 |
|---|---|
| ECS Task Role에 버킷 전체 권한 | presign 전용 유저로 분리했으면 Task Role S3 권한 축소 검토 |
fullaccess 유저에 s3:* 권한 | 최소 권한 원칙 적용 (필요한 Action만) |
| 버전 관리 미설정 (운영 버킷) | 데이터 보호를 위해 활성화 권장 |
DenyInsecureTransport 누락 | 버킷 정책에 HTTP 차단 Deny 문 추가 |
| 액세스 로깅 미설정 (전체) | 감사 추적을 위해 S3 서버 액세스 로깅 활성화 권장 |
정상 항목
- presign 전용 IAM User 생성 (prod/dev 분리)
- presign 유저 인라인 정책 (prefix 제한)
- 주요 버킷 퍼블릭 차단
- 전체 버킷 서버측 암호화 (AES256)
- 주요 버킷 DenyInsecureTransport 적용
정리
- S3 Presigned URL 관련 8개 버킷과 IAM 자원을 전수 점검
- 1개 버킷에서 퍼블릭 액세스 미차단 + 과도한 권한 문제 발견 → 즉시 조치 필요
- Access Key 로테이션 초과 건 발견 → 키 교체 필요
- 전반적으로 presign 전용 IAM User 분리, prefix 제한 등 최소 권한 원칙은 잘 적용됨
- 액세스 로깅, 버전 관리 등 추가 보안 강화 항목 도출