Chat Conversation

참여자: User, QueryPie

Message 1 from User

S3 버킷 정책 예제

Message 2 from QueryPie

AWS S3 버킷 정책에 대한 다양한 예제를 검색해서 포괄적인 정보를 제공하겠습니다. AWS S3 버킷 정책은 JSON 형식을 사용하여 리소스 기반 액세스 제어를 제공합니다. 버킷 소유자만이 정책을 연결할 수 있으며, 버킷 내 모든 객체에 적용됩니다.

기본 정책 구조

S3 버킷 정책은 다음과 같은 기본 요소로 구성됩니다:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "정책 ID",
      "Effect": "Allow|Deny",
      "Principal": "권한을 부여받을 주체",
      "Action": "허용/거부할 S3 작업",
      "Resource": "정책이 적용될 리소스",
      "Condition": "조건부 제약사항"
    }
  ]
}

주요 정책 예제

1. 읽기 전용 액세스 정책

특정 사용자에게 버킷과 객체에 대한 읽기 권한만 부여:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/Dave"
      },
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    }
  ]
}

2. 특정 폴더 액세스 정책

사용자가 자신의 폴더에만 접근할 수 있도록 제한:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUserToSeeFolder",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/JohnDoe"
      },
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::company-bucket"],
      "Condition": {
        "StringLike": {
          "s3:prefix": ["home/JohnDoe/*"]
        }
      }
    },
    {
      "Sid": "AllowUserFolderAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/JohnDoe"
      },
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::company-bucket/home/JohnDoe/*"]
    }
  ]
}

3. 태그 기반 액세스 제어

특정 태그가 있는 객체만 업로드 허용:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/JohnDoe"
      },
      "Action": ["s3:PutObject"],
      "Resource": ["arn:aws:s3:::my-bucket/*"],
      "Condition": {
        "StringEquals": {
          "s3:RequestObjectTag/Department": "Finance"
        }
      }
    }
  ]
}

4. IP 주소 기반 접근 제한

특정 IP 범위에서만 접근 허용:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": ["203.0.113.0/24", "192.0.2.0/24"]
        }
      }
    }
  ]
}

5. 크로스 계정 액세스

다른 AWS 계정에 접근 권한 부여:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT-B-ID:root"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::shared-bucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

6. 퍼블릭 읽기 액세스

모든 사용자에게 읽기 권한 부여:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::public-bucket/*"
    }
  ]
}

정책 적용 시 주의사항

리소스 ARN 형식

  • 버킷: arn:aws:s3:::bucket-name
  • 객체: arn:aws:s3:::bucket-name/*

보안 고려사항

  • 최소 권한 원칙을 적용하여 필요한 최소한의 권한만 부여
  • Condition 문을 활용하여 세밀한 접근 제어 구현
  • 정기적으로 정책을 검토하고 불필요한 권한 제거

이러한 예제들을 참조하여 특정 요구사항에 맞는 S3 버킷 정책을 구성할 수 있습니다.

[Source: https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html] [Source: https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/example-bucket-policies.html] [Source: https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html]