버킷 정책 예제 - Amazon Simple Storage Service

버킷 정책 예제

이 단원에서는 몇 가지 버킷 정책의 일반적인 사용 사례에 대한 예제를 제시합니다. 정책에서는 리소스 값에 bucketexamplebucket 문자열을 사용합니다. 이러한 정책을 테스트하려면 이 문자열을 버킷 이름으로 대체합니다. 액세스 정책 언어에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 섹션을 참조하세요.

참고

버킷 정책은 크기가 20KB로 제한됩니다.

AWS 정책 생성기를 사용하여 Amazon S3 버킷에 대한 버킷 정책을 생성할 수 있습니다. 그런 다음 생성된 문서를 사용하여 여러 타사 도구 또는 애플리케이션을 통해 Amazon S3 콘솔을 사용하여 버킷 정책을 설정할 수 있습니다.

중요

Amazon S3 콘솔을 사용하여 권한을 테스트할 경우 콘솔이 요구하는 추가 권한 즉, s3:ListAllMyBuckets, s3:GetBucketLocations3:ListBucket 권한을 부여해야 합니다. 콘솔을 사용하여 사용자에게 권한을 부여하고 테스트하는 방법에 대한 예는 사용자 정책을 사용하여 버킷에 대한 액세스 제어을 참조하세요.

추가 조건을 포함하여 여러 계정에 권한 부여

다음 정책 예제는 s3:PutObjects3:PutObjectAcl 권한을 여러 AWS 계정 에 부여하고, 이러한 작업에 대한 요청에 public-read 표준 액세스 제어 목록(ACL)을 포함하도록 요구합니다. 자세한 내용은 Amazon S3 작업Amazon S3 조건 키 예 섹션을 참조하세요.

주의

Amazon S3 버킷에 대한 익명 액세스 권한을 부여하거나 퍼블릭 액세스 차단 설정을 비활성화할 때 주의하세요. 익명 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. 정적 웹 사이트 호스팅용과 같이 특별히 필요한 경우가 아니면 Amazon S3 버킷에 익명 액세스 권한을 부여하지 않는 것이 좋습니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]}, "Action":["s3:PutObject","s3:PutObjectAcl"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

익명 사용자에게 읽기 전용 권한 부여

다음 예제 정책은 모든 퍼블릭 익명 사용자에게 s3:GetObject 권한을 부여합니다. (이들에게 허용되는 권한 및 작업 목록은 Amazon S3 작업을 참조하세요.) 이 권한을 사용하면 모든 사용자가 객체 데이터를 읽을 수 있어, 버킷을 웹 사이트로 구성할 때 그리고 모든 사람이 버킷의 객체를 읽을 수 있기를 원할 때 유용합니다. 버킷 정책을 사용하여 익명 사용자에게 읽기 전용 권한을 부여하기 전에 버킷에 대한 퍼블릭 액세스 차단 설정을 비활성화해야 합니다. 자세한 내용은 웹 사이트 액세스에 대한 권한 설정 섹션을 참조하세요.

주의

Amazon S3 버킷에 대한 익명 액세스 권한을 부여하거나 퍼블릭 액세스 차단 설정을 비활성화할 때 주의하세요. 익명 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. 정적 웹 사이트 호스팅용과 같이 특별히 필요한 경우가 아니면 Amazon S3 버킷에 익명 액세스 권한을 부여하지 않는 것이 좋습니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PublicRead", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] } ] }

특정 IP 주소에 대한 액세스 제한

다음 예제에서는 조건에 지정된 IP 주소 범위에서 요청이 시작되지 않는 한, 모든 사용자가 지정된 S3 버킷의 객체에 대한 Amazon S3 작업을 수행할 수 있는 권한을 거부합니다.

이 문은 54.240.143.0/24를 허용되는 IPv4(인터넷 프로토콜 버전 4) IP 주소의 범위로 식별합니다.

Condition 블록은 NotIpAddress 조건과 AWS 전역 조건 키인 aws:SourceIp 조건 키를 사용합니다. 이러한 조건 키에 대한 자세한 내용은 Amazon S3 조건 키 예을 참조하세요. aws:SourceIp IPv4 값은 표준 CIDR 표기법을 사용합니다. 자세한 내용은 IAM 사용 설명서IAM JSON 정책 요소 참조를 참조하세요.

중요

이 정책을 사용하기 전에 이 예제의 IP 주소 범위를 사용 사례에 적합한 값으로 바꾸세요. 그렇지 않으면 버킷에 액세스할 수 없습니다.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} } } ] }

IPv4 및 IPv6 주소 허용

IPv6 주소를 사용하고자 하는 경우, IPv6으로 전환하는 동안 조직의 정책이 계속 적용되도록 하려면 기존 IPv4 범위 외에도 IPv6 주소 범위를 포함하도록 조직의 모든 정책을 업데이트하는 것이 좋습니다.

다음 버킷 정책 예제에서는 IPv4 및 IPv6 주소 범위를 혼합하여 조직의 유효 IP 주소를 모두 표현하는 방법을 보여 줍니다. 이 정책 예제에서는 IP 주소 예 54.240.143.12001:DB8:1234:5678::1에 대한 액세스를 허용하며, 주소 54.240.143.1292001:DB8:1234:5678:ABCD::1에 대한 액세스는 거부합니다.

aws:SourceIp에 대한 IPv6 값은 표준 CIDR 형식이어야 합니다. IPv6의 경우 0의 범위를 나타내기 위해 ::을 사용할 수 있습니다(예: 2032001:DB8:1234:5678::/64). 자세한 내용은 IAM 사용 설명서IP 주소 조건 연산자를 참조하세요.

중요

이 정책을 사용하기 전에 이 예제의 IP 주소 범위를 사용 사례에 적합한 값으로 바꾸세요. 그렇지 않으면 버킷에 액세스할 수 없습니다.

{ "Id":"PolicyId2", "Version":"2012-10-17", "Statement":[ { "Sid":"AllowIPmix", "Effect":"Allow", "Principal":"*", "Action":"s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

특정 HTTP Referer에 대한 액세스 제한

Amazon S3 버킷인 DOC-EXAMPLE-BUCKET에 저장된 사진과 동영상 링크가 포함된 도메인 이름(www.example.com 또는 example.com)의 웹 사이트가 있다고 가정합니다. 기본적으로 모든 Amazon S3 리소스는 비공개이므로 리소스를 만든 AWS 계정 만 이 리소스에 액세스할 수 있습니다. 웹 사이트에서 이들 객체에 대한 읽기 권한을 허용하려면, s3:GetObject 키를 사용하여 특정 웹 페이지에서만 GET 요청을 허용하는 조건으로 aws:Referer 권한을 허용하는 버킷 정책을 추가할 수 있습니다. 다음 정책은 StringLike 조건 키로 aws:Referer 조건을 지정합니다.

{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

사용하는 브라우저에는 요청의 HTTP referer 헤더가 포함되어야 합니다.

중요

이 키를 사용할 때는 주의해야 합니다. 공개적으로 알려진 참조자 헤더 값을 포함하는 것은 위험합니다. 권한이 없는 사용자가 수정된 브라우저나 사용자 지정 브라우저를 사용하여 원하는 aws:referer 값을 제공할 수 있습니다. 따라서 무단 사용자의 직접 aws:referer 요청을 차단할 목적으로 AWS를 사용해서는 안 됩니다. 이러한 값은 고객이 Amazon S3에 저장된 콘텐츠 등의 디지털 콘텐츠를 권한이 없는 타사 사이트에서 참조하지 못하도록 보호하기 위해서만 사용하세요. 자세한 내용은 IAM 사용 설명서에서 aws:referer 섹션을 참조하세요.

Amazon CloudFront OAI에 권한 부여

다음 예제 버킷 정책은 CloudFront 오리진 액세스 ID(OAI)에 권한을 부여하여 Amazon S3 버킷에서 모든 객체를 가져옵니다(읽습니다). CloudFront OAI를 사용하면 사용자가 Amazon S3이 아니라 CloudFront를 통해 버킷의 객체에 액세스하도록 허용할 수 있습니다. 자세한 내용은 Amazon CloudFront 개발자 안내서오리진 액세스 ID를 사용하여 Amazon S3 콘텐츠에 대한 액세스 제한 단원을 참조하세요.

다음 정책은 OAI의 ID를 정책의 Principal로 사용합니다. S3 버킷 정책을 사용하여 CloudFront OAI에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서Amazon S3 버킷 정책 사용을 참조하세요.

이 예제를 사용하려면

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

MFA가 필요한 버킷 정책 추가

Amazon S3은 Amazon S3 리소스에 액세스하기 위해 멀티 팩터 인증(MFA)을 적용할 수 있는 기능인 MFA 보호 API 액세스를 지원합니다. 멀티 팩터 인증은 AWS 환경에 적용할 수 있는 추가 보안 레벨을 제공합니다. 이는 사용자가 유효한 MFA 코드를 제공하여 MFA 디바이스를 물리적으로 가지고 있음을 증명하게 하는 보안 기능입니다. 자세한 내용은 AWS 멀티 팩터 인증을 참조하세요. Amazon S3 리소스에 액세스하는 모든 요청에 대해 MFA가 필요할 수 있습니다.

버킷 정책에서 aws:MultiFactorAuthAge 키를 사용하여 MFA 요구 사항을 실행할 수 있습니다. AWS Identity and Access Management (IAM) 사용자는 AWS Security Token Service( AWS STS )에서 발급한 임시 자격 증명을 사용하여 Amazon S3 리소스에 액세스할 수 있습니다. AWS STS 요청 시 MFA 코드를 제공합니다.

Amazon S3에서 Multi-Factor Authentication으로 요청을 수신한 경우 aws:MultiFactorAuthAge 키는 임시 자격 증명이 생성된 시간(초 단위)을 나타내는 숫자 값을 제공합니다. 요청 시 제공된 임시 자격 증명이 MFA 디바이스를 사용하여 만들어진 경우 이 키 값은 null(없음)입니다. 버킷 정책에서는 다음 예제 버킷 정책에서 나온 것처럼 이 값을 확인할 수 있는 조건을 추가할 수 있습니다. MFA를 사용하여 요청이 인증되지 않으면 정책은 /taxdocuments 버킷의 DOC-EXAMPLE-BUCKET 폴더에서 모든 Amazon S3 작업을 거부합니다. MFA에 대한 자세한 내용은 IAM 사용 설명서AWS에서 멀티 팩터 인증(MFA) 사용을 참조하세요.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

Null 블록의 Condition 조건이 true로 평가되려면 aws:MultiFactorAuthAge 키 값이 null이 되어 요청 시 임시 보안 자격 증명이 MFA 키 없이 만들어 졌음을 나타내야 합니다.

다음 버킷 정책은 이전 버킷 정책을 확장한 것입니다. 이 버킷 정책에는 두 가지 정책 명령문이 포함됩니다. 하나의 문은 모든 사용자에게 버킷(s3:GetObject)에 대한 DOC-EXAMPLE-BUCKET 권한을 허용합니다. 다른 문은 버킷의 DOC-EXAMPLE-BUCKET/taxdocuments 폴더에 액세스할 때 MFA를 요구함으로써 액세스를 제한합니다.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

요청 인증 시 사용된 임시 보안 자격 증명의 수명 주기에 상관없이 aws:MultiFactorAuthAge 키가 유효한 기간을 제한하는 숫자 조건을 선택적으로 사용할 수 있습니다. 예를 들어, 다음 버킷 정책은 MFA 인증 요구 이외에도 임시 세션이 얼마 전에 생성되었는지도 확인합니다. aws:MultiFactorAuthAge 키 값이 임시 세션이 1시간(3,600초) 전에 생성되었음을 나타낼 경우 해당 정책은 모든 작업을 거부합니다.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

버킷 소유자가 완벽하게 제어할 수 있도록 보증하면서 객체에 업로드하는 교차 계정 권한 부여

다음 예제에서는 업로드된 객체를 완전히 제어하면서 다른 AWS 계정 이 버킷에 객체를 업로드하도록 허용하는 방법을 보여 줍니다. 이 정책은 특정 AWS 계정 (123456789012)이 객체를 업로드할 때 bucket-owner-full-control이라는 표준 ACL을 포함하고 있는 경우에만 객체를 업로드할 수 있도록 합니다. 정책의 StringEquals 조건은 요구 사항을 표현하도록 s3:x-amz-acl 조건 키를 지정합니다(Amazon S3 조건 키 예 참조).

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"123456789012"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Amazon S3 인벤토리 및 Amazon S3 분석에 권한 부여

Amazon S3 인벤토리는 Amazon S3 버킷의 객체 목록을 만들고, Amazon S3 분석 내보내기는 분석에서 사용되는 데이터의 출력 파일을 만듭니다. 인벤토리가 객체를 열거하는 버킷을 원본 버킷이라고 합니다. 인벤토리 파일이 작성되는 버킷과 분석 내보내기 파일이 작성되는 버킷을 대상 버킷이라고 합니다. Amazon S3 버킷의 인벤토리를 설정할 때와 분석 내보내기를 설정할 때는 대상 버킷의 버킷 정책을 만들어야 합니다. 자세한 내용은 Amazon S3 인벤토리Amazon S3 분석 - 스토리지 클래스 분석 섹션을 참조하세요.

다음 버킷 정책 예제는 원본 버킷의 계정에서 대상 버킷에 객체를 쓸 수 있는 Amazon S3 권한(PUT)을 부여합니다. Amazon S3 인벤토리와 Amazon S3 분석 내보내기를 설정할 때는 대상 버킷에서 이와 같은 버킷 정책을 사용합니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"InventoryAndAnalyticsExamplePolicy", "Effect":"Allow", "Principal": {"Service": "s3.amazonaws.com"}, "Action":"s3:PutObject", "Resource":["arn:aws:s3:::destinationbucket/*"], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "123456789012", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Amazon S3 Storage Lens에 대한 권한 부여

Amazon S3 Storage Lens는 사용량 및 활동 지표를 집계하고 Amazon S3 콘솔 홈(버킷) 페이지의 계정 스냅샷, 대화형 대시보드 또는 CSV 또는 Parquet 형식으로 다운로드할 수 있는 지표 내보내기를 통해 정보를 표시합니다. 대시보드를 사용하여 인사이트와 추세를 시각화하고, 이상치에 표시하고, 스토리지 비용 최적화와 데이터 보호 모범 사례 적용을 위한 권장 사항을 수신할 수 있습니다. AWS Management Console, AWS CLI, AWS SDK 또는 REST API를 통해 S3 Storage Lens를 사용할 수 있습니다.

S3 Storage Lens에서 Amazon S3 버킷의 지표 내보내기로 스토리지 사용량을 집계하여 추가 분석에 사용할 수 있습니다. S3 Storage Lens가 지표 내보내기를 배치하는 버킷을 대상 버킷이라고 합니다. S3 Storage Lens 지표 내보내기를 설정하려면 대상 버킷에 대한 버킷 정책이 있어야 합니다. 자세한 내용은 Amazon S3 Storage Lens를 사용하여 스토리지 활동 및 사용량 평가 섹션을 참조하세요.

다음 예제 버킷 정책은 대상 버킷에 객체(PUT)를 쓸 수 있는 권한을 Amazon S3에 부여합니다. S3 Storage Lens 지표 내보내기를 설정할 때는 대상 버킷에 이와 같은 버킷 정책을 사용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": [ "storage-lens.s3.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" }, "StringEquals": { "aws:SourceAccount": "111122223333" }, "StringEquals": { "aws:SourceArn": "arn:aws:s3:your-region:111122223333:storage-lens/your-dashboard-configuration-id" } } } ] }

S3 Storage Lens 조직 수준 지표 내보내기를 설정할 때는 이전 버킷 정책 "Action": "s3:PutObject" 리소스를 다음과 같이 수정합니다.

{ "Action": "s3:PutObject", "Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",