728x90
반응형
Amazon S3 버킷 정책은 버킷과 객체에 대한 접근 제어를 JSON 형식으로 정의하는 보안 기능입니다.
S3는 기본적으로 외부 접근이 차단되어 있기 때문에, 웹사이트 호스팅, 파일 업로드/다운로드, 특정 사용자 권한 부여 등의 상황에서 반드시 버킷 정책을 설정해야 합니다.
이번 글에서는 AWS 콘솔에서 버킷 정책을 단계별로 설정하는 방법과 실무에서 자주 사용하는 정책 예제를 정리합니다.
📋 목차
- 사전 준비사항
- 버킷 정책 설정 방법
- 정책 작성 방법 3가지
- 실전 예제
- 문제 해결 및 모범 사례
🛡️ 사전 준비사항
퍼블릭 액세스 차단 확인
- 새로 생성된 S3 버킷은 기본적으로 퍼블릭 액세스 차단(Block Public Access) 이 활성화됩니다
- 외부 접근이 필요한 경우 이 설정을 해제해야 합니다
- ⚠️ 주의: 보안 위험을 충분히 검토한 후 해제하세요
필요 권한 확인
- 버킷 정책 설정을 위해서는 s3:PutBucketPolicy 권한이 필요합니다
- 버킷 소유자 또는 해당 권한이 있는 IAM 사용자만 수정 가능합니다
⚙️ 버킷 정책 설정 방법
1️⃣ S3 콘솔 접속 및 버킷 선택
1. AWS 콘솔에서 S3 서비스로 이동합니다.

2. 정책을 적용할 버킷을 선택합니다.

2️⃣ 퍼블릭 액세스 차단 해제 (공개 정책이 필요한 경우)
1. 버킷 상세 페이지에서 [ 권한(Permissions) ] 탭을 클릭합니다.
2. 퍼블릭 액세스 차단(버킷 설정) 섹션에서 "비활성화" 상태로 설정되어있는 지 확인합니다.
⚠️ 주의: 퍼블릭 액세스 차단을 해제하면 보안 위험이 증가할 수 있습니다. 신중하게 설정하세요.

3. 공개 정책이 필요한 경우 "편집" 버튼을 클릭하여 차단 해제합니다.
3️⃣ 버킷 정책 편집 - 시각적 편집기 사용 (Edit statement)
버킷 정책 편집 화면에서 시각적 편집기를 사용하여 정책을 설정하는 실습을 진행하겠습니다.
1. 버킷 정책(Bucket policy) 섹션에서 [ 편집(Edit) ] 버튼을 클릭합니다.

2. [새 명령문 추가(Add new statement)] 버튼을 클릭합니다.


3. 시각적 편집기에서 다음 항목들을 순서대로 설정합니다.

Statement 설정 항목:
| 항목 | 항목 설명 | 예시 | 예시 설명 |
| Sid | 정책 식별자 | ObjectReadWriteAccesss | 읽기/쓰기 권한을 통합해서 부여하므로 직관적으로 작성 |
| Effect | 허용/거부 선택 | Allow | 허용 선택 |
| Principal | 접근 주체 | * | 모든 사용자에게 허용 |
| Actions | S3 작업 선택 | GetObject, PutObject | 읽기, 쓰기 권한 부여 |
| Resources | 적용 대상 | arn:aws:s3:::버킷명/* | 버킷 내 모든 객체 |
| Conditions | 추가 조건 설정 | 설정 안함 |
- Sid / Principal / Effect을 설정합니다.

- Actions에서 GetObject를 설정합니다.

- Actions에서 PutObject를 설정합니다.

- Resources를 설정합니다.
4. JSON 미리보기에서 생성된 정책을 확인합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ObjectReadWriteAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
5. [ 변경 사항 저장(Save changes) ] 버튼을 클릭합니다.
필요 시 추가 statement를 더 생성할 수 있습니다.

6. 정책 적용이 완료됩니다.

📋 정책 작성 방법 3가지
실습에서 사용한 시각적 편집기 외에도 다른 방법들도 알아두면 유용합니다:
방법 1: 직접 JSON 작성
- 장점: 빠른 작성, 세밀한 제어 가능
- 단점: JSON 문법 숙지 필요
- 추천: JSON에 익숙한 개발자
기본 JSON 구조
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "정책식별자",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::버킷명/*"
}
]
}
JSON 구성 요소
- Version: 정책 버전 (고정값: "2012-10-17")
- Sid: Statement 식별자 (선택사항)
- Effect: Allow(허용) 또는 Deny(거부)
- Principal: 접근 주체 ("*"는 모든 사용자)
- Action: 허용할 S3 작업 목록
- Resource: 정책 적용 대상 ARN
방법 2: AWS 정책 생성기 (Policy Generator)
- 장점: GUI 기반, 문법 오류 방지
- 단점: 별도 도구 사용 필요
- 추천: 정확한 문법이 중요한 경우
버킷 정책 편집 화면에서 [정책 생성기(Policy Generator)] 버튼을 클릭하여 외부 도구로 정책을 생성한 후 복사하여 사용할 수 있습니다.
📋 실전 정책 예제
예제 1: 정적 웹사이트용 공개 읽기 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForWebsite",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-website-bucket/*"
}
]
}
예제 2: IP 제한이 있는 읽기/쓰기 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OfficeIPOnlyAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-private-bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
}
]
}
예제 3: HTTPS 연결 강제 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyInsecureConnections",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-secure-bucket",
"arn:aws:s3:::my-secure-bucket/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
⚠️ 문제 해결 및 보안 모범 사례
자주 하는 실수와 해결법
- ARN 형식 오류
- ❌ 잘못된 예: arn:aws:s3::my-bucket/*
- ✅ 올바른 예: arn:aws:s3:::my-bucket/* (콜론 3개)
- Resource 타입 혼동
- 버킷 자체: arn:aws:s3:::my-bucket (ListBucket 작업 시)
- 버킷 내 객체: arn:aws:s3:::my-bucket/* (GetObject/PutObject 시)
- 정책이 적용되지 않는 경우
- 퍼블릭 액세스 차단 설정 확인
- JSON 문법 오류 검증
- 필요 권한 보유 여부 확인
정책 테스트 방법
- 브라우저 직접 접근: https://버킷명.s3.amazonaws.com/파일명
- AWS CLI 테스트: aws s3 ls s3://버킷명/
- IAM 정책 시뮬레이터: AWS 콘솔에서 정책 동작 검증
보안 모범 사례
- 최소 권한 원칙 적용
- 필요한 최소한의 권한만 부여
- 정기적으로 불필요한 권한 제거
- 조건부 접근 제어 활용
"Condition": { "IpAddress": {"aws:SourceIp": "허용할IP대역"}, "Bool": {"aws:SecureTransport": "true"}, "DateGreaterThan": {"aws:CurrentTime": "2024-01-01T00:00:00Z"} } - 정기적인 정책 검토
- 분기별 정책 검토 및 업데이트
- CloudTrail 로그를 통한 접근 모니터링
- 불필요한 공개 권한 제거
✅ 정책 설정 체크리스트
설정 완료 후 다음 사항들을 반드시 확인하세요:
- 퍼블릭 액세스 차단 설정 검토
- JSON 문법 오류 없음
- 실제 접근 테스트 수행
- 최소 권한 원칙 준수
- 조건부 제어 적용 (필요시)
- 정책 문서화 및 버전 관리
S3 버킷 정책은 누가, 언제, 어떤 조건에서, 어떤 리소스에 접근할 수 있는지를 제어하는 핵심 보안 도구입니다. 정책 설정 후에는 반드시 실제 테스트를 통해 의도한 대로 동작하는지 확인하고, CloudTrail을 통해 지속적으로 모니터링하는 것이 중요합니다.
📚 참고 문서
- AWS S3 Bucket Policies 공식 문서
- AWS Policy Generator
- https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-S3-%EB%B2%84%ED%82%B7-%EC%83%9D%EC%84%B1-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%8B%A4%EC%A0%84-%EA%B5%AC%EC%B6%95
- https://velog.io/@leeeeeyeon/AWS-S3%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EC%84%9C%EB%B2%84%EB%A5%BC-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90
- https://chobo24.tistory.com/entry/AWS-S3-%EB%B2%84%ED%82%B7-%EC%83%9D%EC%84%B1
- https://velog.io/@jjinwo0/Spring-Boot-AWS-AWS-S3-bucket%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C
728x90
반응형
'내맘대로 개발 일기 > 뽀모로 Do!' 카테고리의 다른 글
| [AWS] Amazon S3 사용을 위한 IAM 사용자 생성하기 (7) | 2025.09.02 |
|---|---|
| [AWS] Amazon S3 버킷 정책(Bucket Policy) 작성 방법 (3가지) (7) | 2025.09.01 |
| [AWS] Amazon S3 버킷 정책 생성기 사용 가이드 (0) | 2025.08.20 |
| [AWS] Amazon S3 Bucket 생성하기 (3) | 2025.08.13 |
| [인프라 구축] AWS Lightsail 서버에 가비아 도메인 연결하기 - 2025년 최신 가이드 (3) | 2025.08.12 |
