Amazon S3용 ID 기반 정책 예시

Amazon S3용 ID 기반 정책 예시 (Identity-based policy examples for Amazon S3)

ID 기반 정책은 IAM 사용자, 그룹, 역할에 연결해 Amazon S3 리소스에 대한 권한을 부여하는 정책이에요. 기본적으로 사용자와 역할은 Amazon S3 리소스를 만들거나 수정할 권한이 없으므로, 필요한 권한을 부여하려면 IAM 정책을 만들어 연결해야 해요.

이 문서는 Amazon S3에서 사용할 수 있는 ID 기반 정책 예시를 제공해요. 각 예시는 특정 사용 사례를 보여주며, 여기에 나온 자리 표시자를 본인의 정보로 바꿔 사용하세요.

출처: 문서

본문

예시 1: 버킷의 모든 객체에 대한 읽기 전용 액세스

다음 정책은 특정 버킷과 그 객체에 대한 읽기 전용 액세스를 부여해요. s3:GetObject는 객체 읽기, s3:ListBucket은 객체 나열을 허용해요.

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

예시 2: 버킷과 객체에 대한 전체 액세스

다음 정책은 특정 버킷과 그 객체에 대한 모든 S3 권한(s3:*)을 부여해요. 버킷 자체와 버킷 내 객체 모두에 대해 모든 작업을 허용해요.

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

예시 3: 특정 프리픽스에 대한 액세스 제한

다음 정책은 logs/ 프리픽스 아래의 객체에 대해서만 작업을 허용해요. Resource에 arn:aws:s3:::amzn-s3-demo-bucket/logs/*를 지정해 해당 프리픽스로 범위를 제한해요.

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

예시 4: 모든 버킷 나열

다음 정책은 계정의 모든 S3 버킷을 나열하는 권한을 부여해요. s3:ListAllMyBuckets 작업은 계정 수준 작업으로, Resource로 "*"를 지정해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        }
    ]
}

예시 5: 객체 버전 관리(Versioning) 작업

다음 정책은 버전이 있는 객체 작업(s3:GetObjectVersion, s3:DeleteObjectVersion)을 허용해요. 버전 작업에는 객체 버전을 지정하는 경로에 버전별 권한이 필요해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersion",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}

예시 6: 조건으로 액세스 제한 (HTTPS 요구)

다음 정책은 요청이 HTTPS를 사용하지 않는 경우 모든 객체 작업을 거부해요. aws:SecureTransport 조건 키를 사용하며, false인 경우 액세스를 거부해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

예시 7: 특정 IP 범위에서만 액세스 허용

다음 정책은 지정된 IP 범위에서만 버킷 작업을 허용해요. aws:SourceIp 조건 키와 IpAddress 연산자를 사용해 IP 범위로 제한해요.

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

예시 8: 특정 태그가 있는 객체에만 액세스

다음 정책은 department=marketing 태그가 있는 객체에 대해서만 작업을 허용해요. s3:ExistingObjectTag 조건 키를 사용해 객체 태그를 검사해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/department": "marketing"
                }
            }
        }
    ]
}

예시 9: 멀티파트 업로드 작업

다음 정책은 객체 업로드와 멀티파트 업로드 관련 작업을 허용해요. s3:PutObject로 객체 업로드, s3:AbortMultipartUpload와 s3:ListMultipartUploadParts로 멀티파트 업로드 관리를 허용해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}

ID 기반 정책 작성 모범 사례

  • 리소스 ARN 정확히 지정 - 버킷 ARN(arn:aws:s3:::bucket-name)과 객체 ARN(arn:aws:s3:::bucket-name/*)을 구분해 필요한 범위만 지정하세요.
  • 최소 권한 적용 - 실제로 필요한 최소한의 작업과 리소스에 대해서만 권한을 부여해요.
  • 조건 활용 - IP, HTTPS, 태그, VPC 등 조건 키를 사용해 액세스를 더 세밀하게 제한하세요.
  • 거부는 광범위하게, 허용은 좁게 - 예상치 못한 액세스를 방지하기 위해 거부를 광범위하게, 허용을 좁게 작성하세요.