Amazon S3 조건 키 예 - Amazon Simple Storage Service

Amazon S3 조건 키 예

권한 부여 시 액세스 정책 언어를 사용하여 조건을 지정할 수 있습니다. 선택적 Condition 요소 또는 Condition 차단을 사용하여 정책이 적용되는 시기에 대한 조건을 지정할 수 있습니다.

객체 및 버킷 작업에 Amazon S3 조건 키를 사용하는 정책은 다음 예제를 참조하십시오. 조건 키에 대한 자세한 내용은 Amazon S3 조건 키 섹션을 참조하십시오. 정책에서 지정할 수 있는 Amazon S3 작업, 조건 키 및 리소스의 전체 목록은 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 ReferencePutObjectAcl을 참조하십시오. ACL에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

예제 1: 버킷 소유자가 전체 권한을 가져오도록 요구하는 조건으로 s3:PutObject 권한 부여

PUT Object 작업은 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 CLI를 사용하여 Amazon S3에서 개발 단원을 참조하십시오.

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": { "StringEquals": { "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 CLI를 사용하여 Amazon S3에서 개발 단원을 참조하십시오.

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 ReferenceGetObject를 참조하십시오.

{ "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로 표시되는 Account 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:::DOC-EXAMPLE-BUCKET1/*", "Condition": { "StringEquals": { "s3:x-amz-storage-class": [ "STANDARD_IA" ] } } } ] }

예제 6: 객체 태그 기반 권한 부여

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

예제 7: 버킷 소유자의 AWS 계정 ID로 액세스 제한

aws:ResourceAccount 또는 s3:ResourceAccount 키를 사용하여 특정 AWS 계정 ID가 소유한 Amazon S3 버킷에 대한 사용자, 역할 또는 애플리케이션 액세스를 제한하는 IAM 또는 Virtual Private Cloud(VPC) 엔드포인트 정책을 작성할 수 있습니다. 이 조건 키를 사용하면 소유하지 않은 버킷에 VPC 내의 클라이언트가 액세스하는 것을 제한할 수 있습니다.

그러나 일부 AWS 서비스는 AWS 관리되는 버킷에 대한 액세스에 의존합니다. 따라서 IAM 정책에서 aws:ResourceAccount 또는 s3:ResourceAccount 키를 사용하면 이러한 리소스에 대한 액세스에도 영향을 미칠 수 있습니다.

자세한 내용과 예제는 다음 리소스를 참조하십시오.

예제 8: 최소 TLS 버전 요구

s3:TLSVersion IAM 조건 키를 사용하면 IAM, Virtual Private Cloud 엔드포인트(VPCE) 또는 버킷 정책을 작성하여 클라이언트가 사용하는 TLS 버전에 따라 Amazon S3 버킷에 대한 사용자 또는 애플리케이션의 액세스를 제한할 수 있습니다. 이 조건 키를 사용하여 최소 TLS 버전을 요구하는 정책을 작성할 수 있습니다.

이 예제 버킷 정책은 TLS 버전이 1.2보다 낮은 클라이언트(예: 1.1 또는 1.0)의 PutObject 요청을 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

이 예제 버킷 정책은 TLS 버전이 1.1보다 높은 클라이언트(예: 1.2, 1.3 이상)의 PutObject 요청을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

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

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

예제 1: 사용자에게 특정 리전에서만 버킷을 만들 수 있는 권한 부여

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

참고

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

Amazon S3 리전 목록은 AWS 일반 참조의 리전 및 엔드포인트를 참조하십시오.

{ "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 CLI를 사용하여 Amazon S3에서 개발 단원을 참조하십시오.

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를 참조하십시오.

사용자 정책

다음 사용자 정책은 사용자가 요청에서 s3:ListBucket의 값을 prefix로 지정하도록 요구하는 조건으로 projects 권한을 부여합니다(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": "projects" } } } ] }
AWS CLI에서 정책 테스트

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

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 사용 설명서숫자 조건 연산자를 참조하십시오.