액세스 포인트를 사용하도록 IAM 정책 구성 - Amazon Simple Storage Service

액세스 포인트를 사용하도록 IAM 정책 구성

Amazon S3 액세스 포인트는 리소스, 사용자 또는 기타 조건별로 액세스 포인트 사용을 제어할 수 있는 AWS Identity and Access Management(IAM) 리소스 정책을 지원합니다. 애플리케이션 또는 사용자가 액세스 포인트를 통해 객체에 액세스할 수 있으려면 액세스 포인트와 기본 버킷 모두에서 요청을 허용해야 합니다.

중요

버킷에 S3 액세스 포인트를 추가해도 버킷 이름이나 Amazon 리소스 이름(ARN)을 통해 액세스할 때 버킷의 동작이 변경되지 않습니다. 버킷에 대한 모든 기존 작업은 이전과 같이 계속 작동합니다. 액세스 포인트 정책에 포함시키는 제한은 해당 액세스 포인트를 통해 이루어진 요청에만 적용됩니다.

IAM 리소스 정책을 사용할 때는 AWS Identity and Access Management Access Analyzer의 보안 경고, 오류, 일반 경고 및 제안 사항을 해결한 후 정책을 저장해야 합니다. IAM Access Analyzer는 정책 확인은 실행하여 IAM 정책 문법모범 사례에 대해 정책을 검증합니다. 이러한 확인은 결과를 생성하고 보안 모범 사례를 준수하고 작동하는 정책을 작성하는 데 도움이 되는 권장 사항을 제공합니다.

IAM Access Analyzer를 사용한 정책 검증에 대한 자세한 내용은 IAM 사용 설명서의 IAM Access Analyzer 정책 검증을 참조하십시오. IAM Access Analyzer에서 반환된 경고, 오류 및 제안 사항 목록을 보려면 IAM Access Analyzer 정책 확인 참조를 참조하십시오.

액세스 포인트 정책 예제

다음 예제에서는 액세스 포인트를 통해 이루어진 요청을 제어하기 위해 IAM 정책을 만드는 방법을 보여줍니다.

참고

액세스 포인트 정책에 부여된 권한은 기본 버킷이 동일한 액세스를 허용하는 경우에만 유효합니다. 다음 두 가지 방법으로 이 작업을 수행할 수 있습니다.

  1. (권장) 액세스 포인트에 액세스 제어 위임에 설명된 대로 버킷의 액세스 제어를 액세스 포인트에 위임합니다.

  2. 액세스 포인트 정책에 포함된 동일한 권한을 기본 버킷의 정책에 추가합니다. 예제 1 액세스 포인트 정책 예제는 기본 버킷 정책을 수정하여 필요한 액세스를 허용하는 방법을 보여줍니다.

예 1 - 액세스 포인트 정책 권한 부여

다음 액세스 포인트 정책은 계정 Jane 내의 IAM 사용자 123456789012에게 계정 GET 내의 액세스 포인트 PUT를 통해 접두사 Jane/를 포함하는 my-access-point123456789012 객체에 대한 권한을 부여합니다.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Jane" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Jane/*" }] }
참고

액세스 포인트 정책이 Jane에 대한 액세스 권한을 효과적으로 부여하려면 기본 버킷에서도 Jane에 대해 동일한 액세스를 허용해야 합니다. 액세스 포인트에 액세스 제어 위임에 설명된 대로 버킷의 액세스 제어를 액세스 포인트에 위임할 수 있습니다. 또는 다음 정책을 기본 버킷에 추가하여 Jane에게 필요한 권한을 부여할 수 있습니다. 액세스 포인트와 버킷 정책 간에 Resource 항목이 다릅니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Jane" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Jane/*" }] }
예 2 - 태그 조건이 있는 액세스 포인트 정책

다음 액세스 포인트 정책은 계정 123456789012 내의 IAM 사용자 Mateo에게 태그 키 datafinance 값으로 설정된 계정 123456789012 내의 액세스 포인트 my-access-point를 통해 GET 객체에 대한 권한을 부여합니다.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::123456789012:user/Mateo" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/data": "finance" } } }] }
예 3 - 버킷 목록 조회를 허용하는 액세스 포인트 정책

다음 액세스 포인트 정책은 계정 123456789012 내의 IAM 사용자 Arnav가 계정 123456789012 내의 버킷 기본 액세스 포인트 my-access-point에 포함된 객체를 볼 수 있는 권한을 허용합니다.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Arnav" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point" }] }
예 4 - 서비스 제어 정책

다음 서비스 제어 정책에서는 Virtual Private Cloud(VPC) 네트워크 오리진을 사용하여 모든 새 액세스 포인트를 생성해야 합니다. 이 정책을 적용하면 조직의 사용자가 인터넷에서 액세스할 수 있는 새 액세스 포인트를 생성할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }
예 5 - S3 작업을 VPC 네트워크 오리진으로 제한하는 버킷 정책

다음 버킷 정책은 버킷 example-s3-bucket에 대한 모든 S3 객체 작업에 대한 액세스를 네트워크 오리진이 VPC인 액세스 포인트로 제한합니다.

중요

이 예제에서 보이는 것과 같은 설명을 사용하기 전에 크로스 리전 복제와 같이 액세스 포인트에서 지원하지 않는 기능을 사용할 필요가 없습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::example-s3-bucket/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }

조건 키

S3 액세스 포인트는 리소스에 대한 액세스를 제어하기 위해 IAM 정책에서 사용할 수 있는 조건 키를 사용합니다. 다음 조건 키는 IAM 정책의 일부만 나타냅니다. 정책 예제를 모두 확인하려면 액세스 포인트 정책 예제, 액세스 포인트에 액세스 제어 위임, 크로스 계정 액세스 포인트에 대한 권한 부여 페이지를 참조하십시오.

s3:DataAccessPointArn

이 예제는 액세스 포인트 ARN과 일치시키는 데 사용할 수 있는 문자열을 보여줍니다. 다음 예제에서는 리전 us-west-2의 AWS 계정 123456789012에 대한 모든 액세스 포인트와 일치합니다.

"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*" } }
s3:DataAccessPointAccount

이 예제는 액세스 포인트 소유자의 계정 ID와 일치시키는 데 사용할 수 있는 문자열 연산자를 보여줍니다. 다음 예제는 AWS 계정 123456789012가 소유한 모든 액세스 포인트와 일치합니다.

"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "123456789012" } }
s3:AccessPointNetworkOrigin

이 예제는 네트워크 오리진 Internet 또는 VPC와 일치시키는 데 사용할 수 있는 문자열 연산자를 보여줍니다. 다음 예제에서는 오리진이 VPC인 액세스 포인트와만 일치합니다.

"Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }

Amazon S3에서 조건 키를 사용하는 방법에 대한 자세한 내용은 서비스 승인 참조에서 Amazon S3에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

액세스 포인트에 액세스 제어 위임

버킷에 대한 액세스 제어를 버킷의 액세스 포인트에 위임할 수 있습니다. 다음 예제 버킷 정책은 버킷 소유자의 계정이 소유한 모든 액세스 포인트에 대한 전체 액세스를 허용합니다. 따라서 이 버킷에 대한 모든 액세스는 해당 액세스 포인트에 연결된 정책에 의해 제어됩니다. 버킷에 직접 액세스할 필요가 없는 모든 사용 사례에 대해 이 방법으로 버킷을 구성하는 것이 좋습니다.

예 6 - 액세스 포인트에 액세스 제어를 위임하는 버킷 정책
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "Bucket ARN", "Bucket ARN/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }

크로스 계정 액세스 포인트에 대한 권한 부여

다른 계정이 소유한 버킷에 액세스 포인트를 생성하려면 먼저 버킷 이름과 계정 소유자 ID를 지정하여 액세스 포인트를 만들어야 합니다. 그런 다음, 액세스 포인트로부터의 요청을 승인하도록 버킷 정책을 버킷 소유자가 업데이트해야 합니다. 액세스 포인트를 생성하는 것은 액세스 포인트가 버킷 콘텐츠에 대한 액세스를 제공하지 않는다는 점에서 DNS CNAME을 생성하는 것과 유사합니다. 모든 버킷 액세스는 버킷 정책에 의해 제어됩니다. 다음 예제 버킷 정책은 신뢰할 수 있는 AWS 계정이 소유한 액세스 포인트에서 버킷의 GETLIST 요청을 허용합니다.

Bucket ARN을 버킷의 ARN으로 바꿉니다.

예 7 - 다른 AWS 계정에 권한을 위임하는 버킷 정책
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : ["s3:GetObject","s3:ListBucket"], "Resource" : [ "Bucket ARN", "Bucket ARN/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID" } } }] }