AWS S3 버킷 정책 설정 실수 피하는 방법
AWS S3(Simple Storage Service)는 데이터를 저장하고 공유할 수 있는 가장 보편적이고 강력한 스토리지 서비스입니다. 하지만 버킷 정책(Bucket Policy)을 잘못 설정할 경우, 개인정보 유출, 서비스 장애, 보안 취약점 노출 등 심각한 사고로 이어질 수 있습니다. 특히 공용 액세스(Public Access)를 허용하거나 권한을 과하게 부여하는 실수가 자주 발생합니다.
이번 포스팅에서는 AWS S3 버킷 정책 설정 실수 피하는 방법을 중심으로, 실무에서 안전하게 S3를 관리할 수 있는 핵심 팁들을 구체적으로 안내합니다.
S3 버킷 정책은 JSON 형식의 문서로, 특정 사용자 또는 서비스가 S3 버킷에 대해 어떤 행동을 할 수 있는지를 정의하는 리소스 기반 정책(Resource-Based Policy)입니다.
Allow 또는 Deny를 통해 접근 제어Principal, Action, Resource, Condition 등의 필드로 구성{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*"
}
🔐 해결 방법:
"Principal": "*" 절대 사용 금지aws:userid 또는 aws:PrincipalArn 조건으로 제한AWS S3는 기본적으로 퍼블릭 액세스를 차단하는 보호 기능을 제공합니다. 이를 일시적으로 해제했다가 다시 활성화하지 않으면 버킷이 노출됩니다.
✅ 팁:
버킷 정책에서 Allow만 선언하고 Deny를 명시하지 않으면, 악의적 우회 요청을 차단하지 못할 수 있습니다.
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
📌 항상 최소 권한 원칙을 지키고, 조건부 Deny도 병행하는 것이 안전합니다.
"Resource": "arn:aws:s3:::mybucket/*"
arn:aws:s3:::mybucket 버킷 루트 자체에 대한 권한이 필요함AccessDenied 발생 가능✅ 해결 방법:
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
개발 환경에서 임시로 "Action": "s3:*" 또는 "Principal": "*" 설정 후, 이를 복붙하여 운영 버킷에 그대로 적용하는 경우가 많습니다.
🚨 실수 방지 방법:
Policy Simulator)| 항목 | 권장 설정 |
|---|---|
| 공개 접근 | 원칙적으로 차단 (Presigned URL 또는 CloudFront로 대체) |
| 접근 제어 | IAM Role 또는 서비스 계정 기반으로 세밀하게 제한 |
| 전송 보안 | aws:SecureTransport: false 조건으로 HTTP 요청 차단 |
| 객체 삭제 방지 | Deny로 s3:DeleteObject 제한 또는 버전 관리 활성화 |
| 활동 로깅 | S3 버킷에 CloudTrail 및 액세스 로그 설정 필수 |
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReadOnlyToSpecificRole",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/MyAppReadOnlyRole"
},
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-secure-bucket/*"
}
]
}
Q. S3 정책과 IAM 정책 중 어느 것이 우선인가요?
→ 둘 다 적용됩니다.
Q. S3 버킷을 외부에서 안전하게 공유하려면?
→ Presigned URL을 사용하세요.
GetObject, PutObject 요청에 대해 생성 가능aws s3 presign s3://mybucket/image.jpg --expires-in 3600
Q. 버킷 정책이 적용되지 않을 때 원인은?
| 체크리스트 | 확인 여부 |
|---|---|
❌ Principal: * 사용 여부 | ☐ 금지 |
| ✅ 퍼블릭 액세스 차단 설정 | ☐ 활성화 |
| ✅ HTTPS 전용 전송 조건 추가 | ☐ 적용 |
| ✅ 최소 권한 정책 작성 | ☐ 적용 완료 |
| ✅ IAM 사용자 또는 역할 기반 제어 | ☐ 사용 중 |
| ✅ 버전 관리 및 액세스 로그 설정 | ☐ 활성화 완료 |
결론
AWS S3 버킷 정책 설정 실수 피하는 방법을 숙지하면 보안 사고 가능성을 획기적으로 줄일 수 있습니다. 특히 실수로 인한 데이터 유출은 대부분 정책 한 줄로부터 시작되며, 사전 점검과 모범 정책을 통해 충분히 예방이 가능합니다. 신중하게, 반복적으로 검토하고, 보안은 “한 번 설정”이 아닌 지속적인 관리임을 꼭 기억하세요.
자동차를 사랑하는 많은 운전자들이 한 번쯤 고민해본 문제가 바로 연료첨가제입니다. 주유소에서, 온라인 쇼핑몰에서, 자동차용품점에서 "엔진을…
다이어트 열풍과 함께 '제로 칼로리'를 내세운 탄산음료가 폭발적으로 인기를 끌고 있습니다. 하지만 "제로 탄산음료는 많이…
최신 아이폰 14 프로맥스는 강력한 성능과 함께 뛰어난 배터리 용량을 자랑하지만, 올바른 사용법을 모르면 배터리…
윈드라이브(OneDrive)를 사용하다 보면 어느 순간 “동기화 중지됨”, “저장소 가득 참”이라는 메시지를 마주할 수 있습니다. 이는…