Amazon S3 조건 키 - Amazon Simple Storage Service

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

Amazon S3 조건 키

권한 부여 시 액세스 정책 언어를 통해 조건을 지정할 수 있습니다. 정책이 적용되기 위한 조건을 지정하려면 선택적 Condition 요소 또는 Condition 블록을 사용하여 정책이 적용되기 위한 조건을 지정할 수 있습니다. 미리 정의된 AWS‐와이드 키와 Amazon S3‐특정 키를 사용하여 Amazon S3 액세스 정책에 조건을 지정할 수 있습니다.

Condition 요소에서 요청의 값과 조건을 매칭하기 위해 부울 연산자(equal, less than 등)를 사용하는 식을 작성할 수 있습니다. 예를 들어 객체를 업로드하는 사용자 권한을 부여하는 경우, 버킷 소유자는 다음과 같이 StringEquals 조건을 추가하여 객체가 공개적으로 읽기 가능하도록 요구할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

이 예에서, Condition 블록은 StringEquals 지정된 키 값 쌍에 적용되는 조건, "s3:x-amz-acl":["public-read"]. 조건 표현에 사용할 수 있는 미리 정의된 키 집합이 있습니다. 이 예제에서는 s3:x-amz-acl 조건 키를 사용합니다. 이 조건에서는 사용자에게 모든 PUT Object 요청에 public-read 값을 가진 x-amz-acl 헤더를 포함하도록 요구합니다.

AWS‐ 차원 조건 키

AWS에서는 정책을 지원하는 전체 AWS 서비스에서 지원되는 공통 키 집합을 제공합니다. 이러한 키는 AWS‐와이드 키 접두어를 사용해 aws:. 전체 목록 AWS‐넓은 조건 키, 참조 사용 가능 AWS 조건 키 에서 IAM 사용 설명서.

Amazon S3에서 AWS‐ 차원 조건 키를 사용할 수 있습니다. 다음 버킷 정책 예제에서는 요청이 특정 범위의 IP 주소(192.0.2.0.*)에서 비롯된 경우 s3:GetObject 작업을 사용하기 위한 인증된 사용자 권한을 허용합니다. 단, IP 주소가 192.0.2.188인 경우는 예외입니다. 조건 블록에서 IpAddressNotIpAddress가 조건에 해당하며 각 조건에는 평가를 위한 키-값 페어가 제공됩니다. 이 예제에서의 키-값 페어는 모두 aws:SourceIp AWS‐라는 차원의 키를 사용합니다.

참고

조건에 지정된 IPAddressNotIpAddress 키 값은 RFC 4632에 설명된 것과 같은 CIDR 표기법을 사용합니다. 자세한 내용은 http://www.rfc-editor.org/rfc/rfc4632.txt를 참조하십시오.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

Amazon S3 정책에서 다른 AWS‐ 차원 조건 키를 사용할 수도 있습니다. 예를 들어 VPC 엔드포인트에 대한 버킷 정책에서 aws:SourceVpceaws:SourceVpc 조건 키를 지정할 수 있습니다. 예제는 의 VPC 엔드포인트에 대한 예제 버킷 정책Amazon S3을 참조하십시오.

Amazon S3‐ 전용 조건 키

특정 Amazon S3 작업에 Amazon S3 조건 키를 사용할 수 있습니다. 각 조건 키는 조건을 설정할 수 있는 API에서 허용하는 동일한 이름 요청 헤더에 매핑됩니다. Amazon S3‐ 전용 조건 키는 동일한 이름 요청 헤더의 동작을 지시합니다. Amazon S3‐ 전용 조건 키의 전체 목록은 Amazon S3에 사용되는 작업, 리소스 및 조건 키 단원을 참조하십시오.

예를 들어 s3:PutObject 권한에 대한 조건 권한을 부여하는 데 사용할 수 있는 조건 키 s3:x-amz-acl은 PUT Object API에서 지원되는 x-amz-acl 요청 헤더의 동작을 정의합니다. s3:VersionId 권한에 대한 조건부 권한을 부여하는 데 사용할 수 있는 조건 키 s3:GetObjectVersion는 GET Object 요청에서 설정한 versionId 쿼리 파라미터의 동작을 정의합니다.

다음 버킷 정책에서는 객체를 공개적으로 읽기 가능하도록 만드는 x-amz-acl 헤더가 요청에 포함된 경우 두 개의 AWS 계정에 대해 s3:PutObject 권한을 허용합니다. Condition 블록에서는 StringEquals 조건을 사용하며 여기에는 평가를 위한 키-값 페어 "s3:x-amz-acl":["public-read"가 제공됩니다. 키-값 페어에서 s3:x-amz-acl은 Amazon S3 전용 키로서, 접두사 s3:로 표시됩니다.

{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": { "AWS": [ "arn:aws:iam::Account1-ID:root", "arn:aws:iam::Account2-ID:root" ] }, "Action":"s3:PutObject", "Resource": ["arn:aws:s3:::awsexamplebucket1/*"], "Condition": { "StringEquals": { "s3:x-amz-acl":["public-read"] } } } ] }
중요

모든 조건이 전체 작업에 적용되는 것은 아닙니다. 예를 들어 s3:CreateBucket Amazon S3 권한을 부여하는 정책에는 s3:LocationConstraint 조건을 포함하는 것이 가능합니다. 그러나 s3:GetObject 권한을 부여하는 정책에 이 조건을 포함시키는 것은 의미가 없습니다. Amazon S3는 Amazon S3– 전용 조건을 포함하는 이 유형의 의미론적 오류를 테스트할 수 있습니다. 그러나, IAM 사용자에 대해 정책을 만드는 경우 의미 체계상으로 잘못된 Amazon S3 조건을 포함한다 해도, IAM에서 Amazon S3 조건을 검증할 수 없으므로 오류는 보고되지 않습니다.

객체 작업에 대한 예제 — Amazon S3 조건 키

이 단원에서는 객체 작업에 Amazon S3‐ 전용 조건 키를 사용할 수 있는 방법을 보여 주는 예제를 제공합니다. 정책에서 지정할 수 있는 Amazon S3 작업, 조건 키 및 리소스의 전체 목록은 Amazon S3에 사용되는 작업, 리소스 및 조건 키 단원을 참조하십시오.

몇 가지 예제 정책은 PUT Object 작업에서 조건 키를 사용할 수 있는 방법을 보여 줍니다. PUT Object 작업은 ACL(액세스 제어 목록) 기반 권한을 부여하는 데 사용할 수 있는 ACL 전용 헤더를 허용합니다. 이러한 키를 사용하면 버킷 소유자는 사용자가 객체를 업로드할 때 특정 액세스 권한을 요구하도록 조건을 설정할 수 있습니다. 또한 PutObjectAcl 작업을 사용하여 ACL 기반 권한을 부여할 수 있습니다. 자세한 내용은 을 참조하십시오. 목표 실행 에서 Amazon S3 Amazon Simple Storage Service API Reference. ACL에 대한 자세한 내용은 ACL(액세스 통제 목록) 개요 단원을 참조하십시오.

예 1 s3:PutObject 권한 부여(버킷 소유자가 완전한 제어권을 가지도록 요구하는 조건 포함)

PUT 개체 작동은 액세스 제어 목록(ACL)을 허용합니다.–ACL 기반 권한을 부여하는 데 사용할 수 있는 특정 헤더입니다. 이러한 키를 사용하면 버킷 소유자는 사용자가 객체를 업로드할 때 특정 액세스 권한을 요구하도록 조건을 설정할 수 있습니다.

Account A가 버킷을 소유하고 있고 계정 관리자는 Dave라는 Account B의 사용자에게 객체 업로드 권한을 부여하려 한다고 가정합니다. 기본적으로 Dave가 업로드하는 객체는 Account B의 소유이며 Account A에는 이러한 객체에 대한 권한이 없습니다. 버킷 소유자는 비용을 지불하고 있으므로 Dave가 업로드한 객체에 대한 전체 권한을 갖길 원합니다. Account A 관리자는 요청에 명시적으로 전체 권한을 부여하거나 미리 준비된 ACL을 사용하는 ACL 전용 헤더를 포함하는 조건으로 s3:PutObject 권한을 Dave에게 부여함으로써 이 작업을 수행할 수 있습니다. 자세한 내용은 PUT Object 단원을 참조하십시오.

x-amz-full-control 헤더 필요

버킷 소유자에 대한 전체 제어 권한으로 요청에 x-amz-full-control 헤더를 포함하도록 요구할 수 있습니다. 다음 버킷 정책은 s3:PutObject 조건 키를 사용하는 조건으로 사용자 Dave에게 s3:x-amz-grant-full-control 권한을 부여합니다. 이 조건 키는 요청에 x-amz-full-control 헤더를 포함하도록 요구합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }
참고

이 예제는 계정 간 권한에 관한 것입니다. 그러나 Dave(권한을 가져오는 사람)가 버킷을 소유한 AWS 계정에 속한 경우 이러한 조건부 권한은 필요하지 않습니다. Dave가 속한 상위 계정이 사용자가 업로드한 객체를 소유하고 있기 때문입니다.

명시적 거부 추가

앞서 다뤄본 버킷 정책에서는 조건부 권한을 Account B의 사용자 Dave에게 부여했습니다. 반면 이 정책이 적용되면 Dave는 다른 정책을 통한 어떠한 조건 없이도 같은 권한을 가질 수 있습니다. 예를 들어, Dave는 특정 그룹에 속할 수 있으며 이 그룹에 아무런 조건 없이 s3:PutObject 권한을 부여합니다. 그러한 권한 순환 고리를 끊기 위해 명시적 거부를 추가하여 더 강력한 액세스 정책을 작성할 수 있습니다. 이 예제에서는 버킷 소유자에게 전체 권한을 부여하는 요청에 필수 헤더를 포함하지 않은 경우 사용자 Dave의 업로드 권한을 명시적으로 거부합니다. 명시적 거부는 이미 부여된 다른 모든 권한에 항상 우선합니다. 다음은 명시적 거부가 추가된 개정된 액세스 정책 예제입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }

AWS CLI를 사용한 정책 테스트

두 개의 AWS 계정이 있는 경우 AWS Command Line Interface(AWS CLI)를 사용하여 정책을 테스트할 수 있습니다. 정책을 연결하고 Dave의 자격 증명을 사용하여 다음 AWS CLI put-object 명령을 통해 권한을 테스트합니다. --profile 파라미터를 추가하여 Dave의 자격 증명을 제공합니다. --grant-full-control 파라미터를 추가하여 버킷 소유자에게 전체 제어 권한을 부여합니다. AWS CLI 설정 및 사용에 대한 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile

x-amz-acl 헤더 필요

버킷 소유자에 대한 전체 제어 권한을 부여하는 미리 준비된 ACL 사용 x-amz-acl 헤더를 포함하도록 요구할 수 있습니다. 요청에 x-amz-acl 헤더를 포함하도록 요구하려면 다음 예제와 같이 Condition 블록의 키-값 페어를 대체하고 s3:x-amz-acl 조건 키를 지정할 수 있습니다.

"Condition": { "StringNotEquals": { "s3:x-amz-acl": "bucket-owner-full-control" }

AWS CLI를 사용하는 권한을 테스트하려면 --acl 파라미터를 지정합니다. 그런 다음 AWS CLI에서는 요청을 보낼 때 x-amz-acl 헤더를 추가합니다.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --acl "bucket-owner-full-control" --profile AccountBadmin

예 2 s3:PutObject 권한 부여(서버 측 암호화를 사용하여 저장된 개체 필요)

Account A에서 버킷을 소유하고 있다고 가정합니다. 계정 관리자는 Account A의 사용자인 Jane이 Amazon S3에서 암호화된 객체를 저장할 수 있도록 항상 서버 측 암호화를 요청한다는 조건으로 그녀에게 객체 업로드 권한을 부여하려 한다고 가정합니다. Account A 관리자는 다음과 같이 s3:x-amz-server-side-encryption 조건 키를 사용하여 이 작업을 수행할 수 있습니다. Condition 블록의 키-값 페어는 s3:x-amz-server-side-encryption 키를 지정합니다.

"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }

AWS CLI를 사용하여 권한을 테스트하는 경우 --server-side-encryption 파라미터를 사용하여 필요한 파라미터를 추가해야 합니다.

aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountBadmin

예 3 복사 소스에서 제한을 사용하여 개체를 복사하기 위한 s3:PutObject 권한 부여

PUT Object 요청에서 원본 객체를 지정하는 경우, 이는 복사 작업에 해당합니다(PUT Object - Copy 참조). 따라서 버킷 소유자는 원본에 대한 제한이 있는 객체 복사 권한을 사용자에게 부여할 수 있습니다. 예를 들면 다음과 같습니다.

  • sourcebucket 버킷에서만 객체를 복사하도록 허용합니다.

  • 소스 버킷에서 객체를 복사하고 키 이름 접두사가 public/ f로 시작하는 객체(예: sourcebucket/public/*)만 복사하도록 허용합니다.

  • 소스버킷에서 특정 개체만 복사하도록 허용합니다(예: sourcebucket/example.jpg).

다음 버킷 정책은 사용자(Dave)에게 s3:PutObject 권한을 부여합니다. 이는 요청에 s3:x-amz-copy-source 헤더를 포함하고 헤더 값으로 /awsexamplebucket1/public/* 키 이름 접두사를 지정하는 조건을 충족하는 객체만 복사하도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/folder", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "awsexamplebucket1/public/*" } } } ] }

AWS CLI를 사용한 정책 테스트

AWS CLI copy-object 명령을 사용하는 권한을 테스트할 수 있습니다. --copy-source 파라미터를 추가하여 원본을 지정할 수 있습니다. 이때 키 이름은 정책에 허용된 접두사와 일치해야 합니다. --profile 파라미터를 사용하는 사용자 Dave의 자격 증명을 제공해야 합니다. AWS CLI 설정에 대한 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

aws s3api copy-object --bucket awsexamplebucket1 --key HappyFace.jpg --copy-source examplebucket/public/PublicHappyFace1.jpg --profile AccountADave

특정 객체만 복사할 수 있는 권한 부여

앞서 다룬 정책에서는 StringNotLike 조건을 사용합니다. 특정 객체만 복사할 수 있는 권한을 부여하려면 StringNotLike에서 StringNotEquals로 조건을 변경한 뒤 다음과 같이 정확한 객체 키를 지정해야 합니다.

"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "awsexamplebucket1/public/PublicHappyFace1.jpg" } }

예 4 개체의 특정 버전에 대한 액세스 권한 부여

Account A에서 버전 관리를 사용하는 버킷을 소유하고 있다고 가정합니다. 버킷에는 몇 가지 버전의 HappyFace.jpg 객체가 있습니다. 계정 관리자는 현재 해당 계정의 사용자 Dave에게 특정 버전의 객체만 가져올 수 있는 권한을 부여하려 합니다. 계정 관리자는 다음과 같이 조건부로 Dave에게 s3:GetObjectVersion 권한을 부여함으로써 이 작업을 수행할 수 있습니다. Condition 블록의 키-값 페어는 s3:VersionId 조건 키를 지정합니다. 이 경우 Dave는 가져오려는 객체의 정확한 객체 버전 ID를 알고 있어야 합니다.

자세한 내용은 을 참조하십시오. 개체 가져오기 에서 Amazon Simple Storage Service API Reference.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }

AWS CLI를 사용한 정책 테스트

특정 객체 버전을 식별하는 --version-id 파라미터를 적용한 AWS CLI get-object 명령을 사용하여 권한을 테스트할 수 있습니다. 이 명령은 객체를 가져와서 이를 OutputFile.jpg 파일로 저장합니다.

aws s3api get-object --bucket examplebucketversionenabled --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

예 5 특정 스토리지 클래스가 있는 개체로 개체 업로드 제한

계정 ID 123456789012로 표시되는 계정 A가 버킷 을 소유하고 있다고 가정해 봅시다. Account A가 버킷을 소유하고 있고, 계정 관리자는 Account A에 속한 사용자 Dave만 STANDARD_IA 스토리지 클래스를 이용해 저장할 버킷에 객체를 업로드할 수 있도록 허용하려고 합니다. 객체 업로드를 특정 스토리지 클래스로 제한하기 위해 Account A 관리자는 다음 버킷 정책 예와 같이 s3:x-amz-storage-class 조건 키를 사용할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-storage-class": [ "STANDARD_IA" ] } } } ] }

예 6 개체 태그를 기반으로 권한 부여

Amazon S3 작업에 객체 태그 지정 조건 키를 사용하는 방법에 대한 예는 객체 태그 지정 및 액세스 제어 정책 단원을 참조하십시오.

버킷 작업에 대한 예제 — Amazon S3 조건 키

이 단원에서는 버킷 작업에 Amazon S3‐ 전용 조건 키를 사용하는 방법을 보여 주는 정책 예제를 제공합니다.

예 1 특정 지역에서만 버킷을 생성할 수 있는 사용자 권한 부여

AWS 계정 관리자가 해당 계정 사용자(Dave)에게 남아메리카(상파울루) 리전에서만 버킷을 생성하는 권한을 부여하려고 한다고 가정합니다. 계정 관리자는 다음과 같은 조건으로 s3:CreateBucket 권한을 부여하는 다음 사용자 정책을 연결할 수 있습니다. Condition 블록의 키-값 페어는 s3:LocationConstraint 조건 키와 sa-east-1 리전을 해당 값으로 지정합니다.

참고

이 예제에서 버킷 소유자는 해당 사용자 중 하나에게 권한을 부여하려 하므로 버킷 정책 또는 사용자 정책 중 하나를 사용할 수 있습니다. 이 예제는 사용자 정책을 나타냅니다.

다음 목록을 보려면 Amazon S3 지역, 참조 지역 및 끝점 에서 AWS General Reference.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }

명시적 거부 추가

앞의 정책은 사용자가 다른 지역에서 버킷을 생성할 수 없도록 제한합니다. sa-east-1. 그러나 일부 다른 정책은 다른 지역에서 버킷을 생성할 수 있는 이 사용자 권한을 부여할 수 있습니다. 예를 들어 사용자가 그룹에 속한 경우 그룹 내 전체 사용자에게 다른 리전에서 버킷을 생성할 수 있는 권한을 허용하는 정책이 이 그룹에 연결되어 있을 수 있습니다. 사용자가 다른 리전에서 버킷을 생성할 수 있는 권한을 갖지 못하게 하려면 위 정책에 명시적 거부 문을 추가할 수 있습니다.

Deny 문은 StringNotLike 조건을 사용합니다. 즉, 위치 제약이 sa-east-1. 명시적 거부를 사용하면 사용자가 어떤 다른 권한을 획득하든 다른 지역에서 버킷을 생성할 수 없습니다. 아래 정책에는 명시적 거부 문이 포함되어 있습니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }

AWS CLI를 사용한 정책 테스트

다음 create-bucket AWS CLI 명령을 사용하는 정책을 테스트할 수 있습니다. 이 예제에서는 bucketconfig.txt 파일을 사용하여 위치 제한을 지정합니다. Windows 파일 경로를 확인하여 버킷 이름과 경로를 적절히 업데이트해야 합니다. --profile 파라미터를 사용하여 사용자 자격 증명을 제공해야 합니다. AWS CLI 설정 및 사용에 대한 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

aws s3api create-bucket --bucket examplebucket --profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt

bucketconfig.txt 파일은 다음과 같은 구성을 지정합니다.

{"LocationConstraint": "sa-east-1"}

예 2 특정 접두사를 사용하여 버킷에 있는 개체 목록 가져오기

s3:prefix 조건 키를 사용하여 GET 버킷(ListObjects) API의 응답을 특정 접두사가 있는 키 이름으로 제한할 수 있습니다. 버킷 소유자는 버킷에 있는 특정 접두사의 콘텐츠를 나열하도록 사용자를 제한할 수 있습니다. 이 조건 키는 버킷의 객체가 키 이름 접두사로 정리되어 있는 경우 유용합니다. Amazon S3 콘솔은 키 이름 접두사를 사용하여 폴더 개념을 표시합니다. 콘솔만 폴더 개념을 지원하고 Amazon S3 API는 버킷과 객체만 지원합니다. 접두사 및 구분 기호를 사용하여 액세스 권한을 필터링하는 방법에 대한 자세한 내용은 안내 사용자 정책을 사용하여 버킷에 대한 액세스 제어 단원을 참조하십시오.

예를 들어 키 이름이 public/object1.jpgpublic/object2.jpg인 두 개의 객체가 있는 경우, 콘솔에서는 public 폴더 아래에 객체가 표시됩니다. Amazon S3 API에서 이러한 객체는 폴더의 객체가 아니라 접두사가 있는 객체입니다. 그러나 Amazon S3 API에서 그러한 접두사를 사용하여 객체 키를 구성하는 경우, 사용자가 특정 접두사가 있는 키 이름 목록을 가져오도록 허용하는 s3:prefix 조건으로 s3:ListBucket 권한을 부여할 수 있습니다.

이 예제에서, 버킷 소유자와 사용자가 속한 상위 계정은 동일합니다. 따라서 버킷 소유자는 버킷 정책 또는 사용자 정책 중 하나를 사용할 수 있습니다. GET 버킷(ListObjects) API와 함께 사용할 수 있는 다른 조건 키에 대한 자세한 내용은 ListObjects를 참조하십시오.

사용자 정책

다음 사용자 정책은 사용자가 요청에서 prefix의 값을 projects로 지정하도록 요구하는 조건으로 s3:ListBucket 권한을 부여합니다(GET Bucket (List Objects) 참조).

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }

이 조건은 사용자가 projects 접두사가 있는 객체 키만 수신하도록 제한합니다. 추가된 명시적 거부는 사용자가 보유할 수 있는 다른 모든 권한에도 불구하고 다른 접두사가 있는 키의 목록을 가져오려는 사용자 요청을 거부합니다. 사용자가 앞서 다룬 사용자 정책으로 업데이트하거나 버킷 정책을 통해 아무런 제한 없이 객체 키 목록을 가져올 권한을 갖게 될 수 있습니다. 명시적 거부가 항상 우선하므로 projects 접두사가 아닌 키의 목록을 가져오려는 사용자 요청은 거부됩니다.

버킷 정책

사용자를 식별하는 Principal 요소를 위의 사용자 정책에 추가하는 경우, 다음과 같이 버킷 정책을 갖게 됩니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1", "Condition" : { "StringNotEquals" : { "s3:prefix": "examplefolder" } } } ] }

AWS CLI를 사용한 정책 테스트

다음 list-object AWS CLI 명령을 사용하는 정책을 테스트할 수 있습니다. 이 명령에서 --profile 파라미터를 사용하여 사용자 자격 증명을 제공합니다. AWS CLI 설정 및 사용에 대한 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

aws s3api list-objects --bucket awsexamplebucket1 --prefix examplefolder --profile AccountADave

버킷에서 버전 관리를 사용하는 경우 버킷의 객체 목록을 가져오려면 s3:ListBucket 권한 대신 앞서 다룬 정책에 s3:ListBucketVersions 권한을 부여해야 합니다. 또한 이 권한은 s3:prefix 조건 키를 지원합니다.

예 3 최대 키 수 설정

s3:max-keys 조건 키를 사용하여 요청자가 GET 버킷(ListObjects) 또는 ListObjectVersions 요청에서 반환할 수 있는 최대 키 수를 설정할 수 있습니다. 기본적으로 API에서는 최대 1,000개의 키를 반환합니다. 에서 사용할 수 있는 숫자 조건 연산자 목록은 s3:max-keys 첨부된 예제를 참조하십시오. 수치 조건 연산자 에서 IAM 사용 설명서.