Amazon S3 보안 (Amazon S3 Security)

Amazon S3는 단순한 저장소 서비스지만, 보안(Security) 을 제대로 설정하지 않으면 데이터 유출(Data Leak)과 같은 심각한 문제가 발생할 수 있습니다. AWS Certified Machine Learning Engineer – Associate 시험에서도 자주 출제되는 주제이므로 꼭 이해해야 합니다.


1. S3 보안 유형

🔹 User-Based (IAM 기반)

  • IAM Policies
    IAM(Identity and Access Management)에서 특정 사용자(User) 또는 그룹(Group)에 대해 어떤 API 호출(API Calls)을 허용할지 정의합니다.
    → 예: s3:GetObject 권한 부여.

🔹 Resource-Based (리소스 기반)

  • Bucket Policies

    • JSON 기반 정책으로, 버킷 전체에 대한 접근 권한을 설정합니다.
    • Cross-Account Access(계정 간 접근)도 허용 가능.
    • 버킷 정책은 S3 콘솔에서 직접 작성/관리.
  • Object ACL (Access Control List)

    • 객체 단위로 세밀하게 접근 제어.
    • 하지만 현재는 비추천(Deprecated) → 대부분 버킷 정책으로 대체.
  • Bucket ACL

    • 버킷 단위 ACL. 거의 사용하지 않으며 역시 비추천.

2. IAM 권한 평가 규칙

S3 객체에 접근하려면 다음 조건을 만족해야 합니다:

  • IAM 정책이 ALLOW 이거나 리소스 정책이 ALLOW
  • 그리고 명시적 DENY가 없어야 함

👉 즉, ALLOW OR ALLOW 이면서 동시에 NO DENY 조건이어야 함.


3. S3 버킷 정책 (Bucket Policies)

  • 형식: JSON 기반 문서
  • 구성 요소
    • Resource: 적용 대상 (버킷/객체 ARN)
    • Effect: Allow 또는 Deny
    • Action: 허용/거부할 API 목록 (s3:GetObject, s3:PutObject 등)
    • Principal: 정책 적용 대상 (계정, 사용자, 역할, * = 모든 사용자)

예시 1: 퍼블릭 읽기 (Public Access)

1
2
3
4
5
6
7
8
9
10
11
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-example-bucket/*"
}
]
}
  • 이 정책은 my-example-bucket 안의 모든 객체(*)를 누구나 읽기 가능하도록 허용.

4. 보안 시나리오별 접근 방법

  • 퍼블릭 접근 (Public Access)
    • 버킷 정책으로 GetObject 권한을 열어줌.
    • 단, Block Public Access 설정을 해제해야 함.

  • 내부 사용자 (IAM User)
    • IAM 정책으로 권한 부여 (s3:ListBucket, s3:GetObject 등).

  • EC2 인스턴스에서 접근
    • IAM User 사용 ❌ → IAM Role을 EC2에 부여해야 함.

  • Cross-Account Access (계정 간 접근)
    • 다른 AWS 계정의 IAM User가 접근하려면 → 버킷 정책으로 허용.


5. Block Public Access 설정

  • AWS가 데이터 유출 방지(Data Leak Prevention) 를 위해 도입한 기능.
  • 기본적으로 모든 퍼블릭 접근을 막음.
  • ✅ 시험 포인트:
    • 버킷을 공개해야 한다면 반드시 Block Public Access를 해제해야 함.
    • 하지만 기업 환경에서는 대부분 항상 켜둔다.
    • 계정 레벨에서도 적용 가능 → 모든 버킷이 퍼블릭 차단됨.

6. 암호화 (Encryption)

  • SSE-S3: S3가 자체적으로 키 관리 (간단, 기본 옵션).
  • SSE-KMS: AWS KMS(Key Management Service)를 사용해 키 관리 (더 세밀한 보안, 로깅 가능).
  • 시험에서는 SSE-S3와 SSE-KMS 차이점을 잘 물어봄.

✅ 시험 대비 핵심 정리

  1. IAM Policy vs Bucket Policy

    • IAM Policy: 사용자(User) 관점에서 권한 관리.
    • Bucket Policy: 리소스(Resource) 관점에서 권한 관리.
  2. 객체 접근 조건

    • ALLOW(사용자 정책 OR 리소스 정책) + NO DENY.
  3. EC2에서 S3 접근IAM Role 사용.

  4. Cross-Account Access버킷 정책 필요.

  5. Block Public Access

    • 기본 ON (데이터 유출 방지).
    • 시험에서는 “퍼블릭 버킷이 동작하지 않는다 → Block Public Access 때문” 자주 출제.
  6. 암호화 옵션

    • SSE-S3 (자동, 간단) vs SSE-KMS (보안·규제 요구사항 대응).