내맘대로 개발 일기/뽀모로 Do!

[AWS] Amazon S3 버킷 정책(Bucket Policy) 설정하기

bu119 2025. 8. 26. 09:00
728x90
반응형

Amazon S3 버킷 정책은 버킷과 객체에 대한 접근 제어를 JSON 형식으로 정의하는 보안 기능입니다.
S3는 기본적으로 외부 접근이 차단되어 있기 때문에, 웹사이트 호스팅, 파일 업로드/다운로드, 특정 사용자 권한 부여 등의 상황에서 반드시 버킷 정책을 설정해야 합니다.

 

이번 글에서는 AWS 콘솔에서 버킷 정책을 단계별로 설정하는 방법실무에서 자주 사용하는 정책 예제를 정리합니다.


📋 목차

  1. 사전 준비사항
  2. 버킷 정책 설정 방법
  3. 정책 작성 방법 3가지
  4. 실전 예제
  5. 문제 해결 및 모범 사례

🛡️ 사전 준비사항

퍼블릭 액세스 차단 확인

  • 새로 생성된 S3 버킷은 기본적으로 퍼블릭 액세스 차단(Block Public Access) 이 활성화됩니다
  • 외부 접근이 필요한 경우 이 설정을 해제해야 합니다
  • ⚠️ 주의: 보안 위험을 충분히 검토한 후 해제하세요

필요 권한 확인

  • 버킷 정책 설정을 위해서는 s3:PutBucketPolicy 권한이 필요합니다
  • 버킷 소유자 또는 해당 권한이 있는 IAM 사용자만 수정 가능합니다
  1.  

⚙️ 버킷 정책 설정 방법

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"
        }
      }
    }
  ]
}

⚠️ 문제 해결 및 보안 모범 사례

자주 하는 실수와 해결법

  1. ARN 형식 오류
    • ❌ 잘못된 예: arn:aws:s3::my-bucket/*
    • ✅ 올바른 예: arn:aws:s3:::my-bucket/* (콜론 3개)
  2. Resource 타입 혼동
    • 버킷 자체: arn:aws:s3:::my-bucket (ListBucket 작업 시)
    • 버킷 내 객체: arn:aws:s3:::my-bucket/* (GetObject/PutObject 시)
  3. 정책이 적용되지 않는 경우
    • 퍼블릭 액세스 차단 설정 확인
    • JSON 문법 오류 검증
    • 필요 권한 보유 여부 확인

정책 테스트 방법

  1. 브라우저 직접 접근: https://버킷명.s3.amazonaws.com/파일명
  2. AWS CLI 테스트: aws s3 ls s3://버킷명/
  3. IAM 정책 시뮬레이터: AWS 콘솔에서 정책 동작 검증

보안 모범 사례

  1. 최소 권한 원칙 적용
    • 필요한 최소한의 권한만 부여
    • 정기적으로 불필요한 권한 제거
  2. 조건부 접근 제어 활용
     
    "Condition": {
      "IpAddress": {"aws:SourceIp": "허용할IP대역"},
      "Bool": {"aws:SecureTransport": "true"},
      "DateGreaterThan": {"aws:CurrentTime": "2024-01-01T00:00:00Z"}
    }
  3. 정기적인 정책 검토
    • 분기별 정책 검토 및 업데이트
    • CloudTrail 로그를 통한 접근 모니터링
    • 불필요한 공개 권한 제거

✅ 정책 설정 체크리스트

설정 완료 후 다음 사항들을 반드시 확인하세요:

  • 퍼블릭 액세스 차단 설정 검토
  • JSON 문법 오류 없음
  • 실제 접근 테스트 수행
  • 최소 권한 원칙 준수
  • 조건부 제어 적용 (필요시)
  • 정책 문서화 및 버전 관리

S3 버킷 정책은 누가, 언제, 어떤 조건에서, 어떤 리소스에 접근할 수 있는지를 제어하는 핵심 보안 도구입니다. 정책 설정 후에는 반드시 실제 테스트를 통해 의도한 대로 동작하는지 확인하고, CloudTrail을 통해 지속적으로 모니터링하는 것이 중요합니다.


📚 참고 문서

728x90
반응형