ACL에 대한 정책 예시 - Amazon Simple Storage Service

ACL에 대한 정책 예시

버킷 정책의 조건 키를 사용하여 Amazon S3에 대한 액세스를 제어할 수 있습니다.

버킷 소유자가 전체 권한을 가져오도록 요구하는 조건으로 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

x-amz-acl 헤더에 조건부로 s3:PutObject 권한 부여

다음 버킷 정책에서는 객체를 공개적으로 읽기 가능하도록 만드는 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 조건을 검증할 수 없으므로 오류는 보고되지 않습니다.