메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

버킷 정책 예제

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

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

참고

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

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

다음 예제 정책은 s3:PutObjects3:PutObjectAcl 권한을 여러 AWS 계정에 부여하고, 이러한 작업에 대한 요청에 public-read 미리 준비된 ACL을 포함하도록 요구합니다. 자세한 내용은 정책에서 권한 지정정책에서 조건 지정을 참조하십시오.

Copy
{ "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:::examplebucket/*"], "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

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

다음 예제 정책은 모든 퍼블릭 익명 사용자에게 s3:GetObject 권한을 부여합니다. (이들에게 허용되는 권한 및 작업 목록은 정책에서 권한 지정을 참조하십시오.) 이 권한을 사용하면 모든 사용자가 객체 데이터를 읽을 수 있어, 버킷을 웹 사이트로 구성할 때 그리고 모든 사람이 버킷의 객체를 읽을 수 있기를 원할 때 유용합니다.

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

특정 IP 주소 액세스 제한

다음 예제는 모든 사용자에게 권한을 부여하여 지정된 버킷에서 모든 Amazon S3 객체 작업을 수행할 수 있도록 합니다. 하지만 조건에 지정된 IP 주소 범위에서만 요청을 허용해야 합니다.

이 문의 조건은 허용되는 인터넷 프로토콜 버전 4(IPv4) IP 주소인 54.240.143.* 범위를 식별합니다(한 가지 예외: 54.240.143.188).

Condition 블록은 IpAddressNotIpAddress 조건과 AWS 전체 범위 조건 키인 aws:SourceIp 조건 키를 사용합니다. 이러한 조건 키에 대한 자세한 내용은 정책에서 조건 지정을 참조하십시오. aws:sourceIp IPv4 값은 표준 CIDR 표기법을 사용합니다. 자세한 내용은 IAM 사용 설명서IP 주소 조건 연산자를 참조하십시오.

Copy
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} } } ] }

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 주소 조건 연산자를 참조하십시오.

Copy
{ "Id":"PolicyId2", "Version":"2012-10-17", "Statement":[ { "Sid":"AllowIPmix", "Effect":"Allow", "Principal":"*", "Action":"s3:*", "Resource":"arn:aws:s3:::examplebucket/*", "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 참조자에 대한 액세스 제한

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

Copy
{ "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", "Resource":"arn:aws:s3:::examplebucket/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

사용하는 브라우저는 요청에 http referer 헤더를 포함하고 있어야 합니다.

다음 예와 같이 버킷 정책에 명시적 거부를 추가하면 examplebucket 버킷에서 객체에 대한 보안 액세스를 발전시킬 수 있습니다. 명시적 거부는 ACL 또는 사용자 정책과 같은 다른 방법을 사용하여 examplebucket 버킷에서 객체에 부여할 수도 있는 모든 권한을 대체합니다.

Copy
{ "Version": "2012-10-17", "Id": "http referer policy example", "Statement": [ { "Sid": "Allow get requests referred by www.example.com and example.com.", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } }, { "Sid": "Explicit deny to ensure requests are allowed only from specific referer.", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } } ] }

Amazon CloudFront 오리진 자격 증명에 권한 부여

다음 예제 버킷 정책은 CloudFront 오리진 ID에 권한을 부여하여 Amazon S3 버킷에서 모든 객체를 가져옵니다(나열합니다). CloudFront 오리진 ID는 CloudFront 비공개 콘텐츠 기능을 활성화하는 데 사용합니다. 이 정책은 AWS 대신 정식 사용자 접두사를 사용하여 정식 사용자 ID를 지정합니다. 비공개 콘텐츠 서비스를 제공하기 위한 CloudFront 지원에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서에서 비공개 콘텐츠 서비스 제공 주제를 참조하십시오. CloudFront 배포 오리진 액세스 ID를 위한 정식 사용자 ID를 지정해야 합니다. 정식 사용자 ID 찾기에 대한 지침은 정책에서 보안 주체 지정을 참조하십시오.

Copy
{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[ { "Sid":" Grant a CloudFront Origin Identity access to support private content", "Effect":"Allow", "Principal":{"CanonicalUser":"79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"}, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::example-bucket/*" } ] }

MFA 인증이 필요한 버킷 정책 추가

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

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

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

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

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

다음 버킷 정책은 이전 버킷 정책을 확장한 것입니다. 이 버킷 정책에는 두 가지 정책 명령문이 포함됩니다. 한 개 문으로 버킷(examplebucket)에 대한 s3:GetObject 권한을 모든 사람에게 허용하고, 다른 문으로 MFA 인증을 요구하여 버킷의 examplebucket/taxdocuments 폴더에 대한 액세스를 추가로 제한합니다.

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

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

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

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

다른 AWS 계정이 버킷에 객체를 업로드할 수 있도록 허용할 수 있습니다. 하지만 버킷 소유자로서 버킷에 업로드 된 객체를 완벽하게 제어해야 한다고 결정할 수 있습니다. 해당 계정이 이메일 주소(xyz@amazon.com)에서 식별된 버킷 소유자에 대한 완벽한 제어 액세스를 부여하지 않으면 다음 정책은 특정 AWS 계정(111111111111)이 객체 업로드 기능을 거부하게 만듭니다. 정책의 StringEquals 조건은 요구 사항을 표현하도록 s3:x-amz-grant-full-control 조건 키를 지정합니다(정책에서 조건 지정 참조).

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"111", "Effect":"Allow", "Principal":{"AWS":"1111111111"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*" }, { "Sid":"112", "Effect":"Deny", "Principal":{"AWS":"1111111111" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*", "Condition": { "StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]} } } ] }

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

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

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

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