Amazon S3에서 IAM을 사용하는 방법 - Amazon Simple Storage Service

Amazon S3에서 IAM을 사용하는 방법

IAM을 사용하여 Amazon S3에 대한 액세스를 관리하기 전에 Amazon S3에서 사용할 수 있는 IAM 기능에 대해 알아봅니다.

Amazon S3 및 기타 AWS 서비스가 대부분의 IAM 기능과 작동하는 방법을 개괄적으로 알아보려면 IAM 사용 설명서의 AWS IAM으로 작업하는 서비스를 참조하세요.

Amazon S3의 ID 기반 정책

ID 기반 정책 지원

자격 증명 기반 정책은 IAM 사용자, 사용자 그룹 또는 역할과 같은 자격 증명에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 사용자와 역할이 어떤 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는 지를 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 IAM 사용 설명서IAM 정책 생성을 참조하세요.

IAM 자격 증명 기반 정책을 사용하면 허용되거나 거부되는 작업와 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. 자격 증명 기반 정책에서는 보안 주체가 연결된 사용자 또는 역할에 적용되므로 보안 주체를 지정할 수 없습니다. JSON 정책에서 사용하는 모든 요소에 대해 알아보려면 IAM 사용 설명서IAM JSON 정책 요소 참조를 참조하세요.

Amazon S3의 ID 기반 정책 예시

Amazon S3 ID 기반 정책 예시를 보려면 Amazon S3의 ID 기반 정책 섹션을 참조하세요.

Amazon S3 내의 리소스 기반 정책

리소스 기반 정책 지원

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 리소스 기반 정책의 예는 IAM 역할 신뢰 정책과 Amazon S3 버킷 정책입니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 정책이 연결된 리소스의 경우 정책은 지정된 보안 주체가 해당 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는 지를 정의합니다. 리소스 기반 정책에서 보안 주체를 지정해야 합니다. 보안 주체에는 계정, 사용자, 역할, 연동 사용자 또는 AWS 서비스가 포함될 수 있습니다.

계정 간 액세스를 활성화하려는 경우 전체 계정이나 다른 계정의 IAM 엔터티를 리소스 기반 정책의 보안 주체로 지정할 수 있습니다. 리소스 기반 정책에 크로스 계정 보안 주체를 추가하는 것은 트러스트 관계 설정의 절반밖에 되지 않는다는 것을 유념하세요. 보안 주체와 리소스가 서로 다른 AWS 계정에 있는 경우 신뢰할 수 있는 계정의 IAM 관리자는 보안 주체 엔터티(사용자 또는 역할)에도 리소스 액세스 권한을 부여해야만 합니다. 개체에 자격 증명 기반 정책을 연결하여 권한을 부여합니다. 하지만 리소스 기반 정책이 동일 계정의 보안 주체에 액세스를 부여하는 경우 추가 자격 증명 기반 정책이 필요하지 않습니다. 자세한 정보는 IAM 사용 설명서IAM 역할과 리소스 기반 정책의 차이를 참조하세요.

Amazon S3 서비스는 버킷 정책, 액세스 포인트 정책 및 액세스 권한을 지원합니다.

  • 버킷 정책은 Amazon S3 버킷에 연결되는 리소스 기반 정책입니다. 버킷 정책은 버킷에서 작업을 수행할 수 있는 보안 주체를 정의합니다.

  • 액세스 포인트 정책은 기본 버킷 정책과 함께 평가되는 리소스 기반 정책입니다.

  • Access Grants는 Amazon S3의 데이터에 대한 액세스 권한을 접두사, 버킷 또는 객체별로 정의하는 간소화된 모델입니다. S3 Access Grants에 대한 자세한 내용은 S3 Access Grants를 통한 액세스 관리 섹션을 참조하세요.

버킷 정책의 보안 주체

Principal 요소는 리소스에 대한 액세스가 허용 또는 거부된 사용자, 계정, 서비스 또는 기타 엔터티를 지정합니다. 다음은 Principal 지정의 예입니다. 자세한 내용은 IAM 사용 설명서보안 주체를 참조하십시오.

AWS 계정에 권한 부여

AWS 계정에 권한을 부여하려면 다음 형식을 사용하여 계정을 식별합니다.

"AWS":"account-ARN"

예를 들면 다음과 같습니다.

"Principal":{"AWS":"arn:aws:iam::AccountIDWithoutHyphens:root"}
"Principal":{"AWS":["arn:aws:iam::AccountID1WithoutHyphens:root","arn:aws:iam::AccountID2WithoutHyphens:root"]}

IAM 사용자에게 권한 부여

계정 내의 IAM 사용자에게 권한을 부여하려면 "AWS":"user-ARN" 이름-값 페어를 제공해야 합니다.

"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}

단계별 지침을 제공하는 자세한 예는 예제 1: 버킷 소유자가 자신의 사용자에게 버킷 권한 부여예제 3: 버킷 소유자가 자신이 소유하지 않는 객체에 대한 권한 부여 단원을 참조하십시오.

참고

버킷 정책을 업데이트한 후 IAM 자격 증명이 삭제되면 버킷 정책은 ARN 대신 principal 요소에 고유 식별자를 표시합니다. 이러한 고유 ID는 절대 재사용되지 않으므로 모든 정책 설명에서 고유 식별자가 있는 보안 주체를 안전하게 제거할 수 있습니다. 고유 식별자에 대한 자세한 내용은 IAM 사용 설명서의 IAM 식별자를 참조하십시오.

익명 권한 부여

주의

Amazon S3 버킷에 익명 액세스 권한을 부여할 때는 주의해야 합니다. 익명 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. S3 버킷에 대한 익명 쓰기 액세스 권한을 부여하지 않는 것이 좋습니다.

모두에게 권한을 부여하고 익명 액세스로도 참조되려면 와일드카드 문자("*")를 Principal 값으로 설정합니다. 예를 들어 버킷을 웹 사이트로 구성하는 경우 버킷의 모든 객체를 공개적으로 액세스 가능하게 하려 할 수 있습니다.

"Principal":"*"
"Principal":{"AWS":"*"}

리소스 기반 정책에서 "Principal": "*"을(를) Allow 효과와 함께 사용하면 사용자 리소스에 액세스하기 위해 AWS에 로그인하지 않아도 누구나 허용할 수 있습니다.

리소스 기반 정책에서 "Principal" : { "AWS" : "*" }Allow 효과와 함께 사용하면 동일한 파티션의 모든 계정에 있는 모든 루트 사용자, IAM 사용자, 수임된 역할 세션 또는 페더레이션 사용자가 리소스에 액세스할 수 있습니다.

익명 사용자의 경우 이들 두 메서드는 동일합니다. 자세한 내용은 IAM 사용 설명서모든 보안 주체를 참조하십시오.

보안 주체 이름이나 ARN의 일부를 나타내기 위해 와일드카드를 사용할 수 없습니다.

중요

누구나 AWS 계정을 생성할 수 있기 때문에 두 가지 방법의 보안 수준은 다르게 작동하더라도 동일합니다.

리소스 권한 제한

또한 리소스 정책을 사용하여 IAM 보안 주체가 사용할 수 있을 리소스에 대한 액세스를 제한할 수 있습니다. 액세스를 방지하려면 Deny 명령문을 사용합니다.

다음은 보안 전송 프로토콜을 사용하지 않는 경우 액세스를 차단하는 예시입니다.

{"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": <bucket ARN>, "Condition": { "Boolean": { "aws:SecureTransport" : "false"} } }

이 방법을 사용하여 특정 계정이나 보안 주체에 대한 액세스를 거부하는 대신 "Principal": "*"을 사용하여 이 제한이 모든 사람에게 적용되도록 하는 것이 이 정책의 모범 사례입니다.

CloudFront URL을 통한 액세스 요구

사용자가 Amazon S3 URL 대신 CloudFront URL만 사용하여 Amazon S3 콘텐츠에 액세스하도록 요구할 수 있습니다. 이렇게 하려면 CloudFront 원본 액세스 제어(OAC)를 만듭니다. 그런 다음 S3 데이터에 대한 권한을 변경하세요. 버킷 정책에서 다음과 같이 CloudFront를 보안 주체로 설정할 수 있습니다.

"Principal":{"Service":"cloudfront.amazonaws.com"}

정책의 Condition 요소를 사용하여 S3 오리진이 포함된 CloudFront 배포를 위한 요청인 경우에만 CloudFront에서 버킷에 액세스하도록 허용합니다.

"Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID" } }

CloudFront URL을 통한 S3 액세스 요구에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서Amazon Simple Storage Service 오리진에 대한 액세스 제한을 참조하세요. Amazon CloudFront 사용의 보안 및 개인 정보 보호 이점에 대한 자세한 내용은 콘텐츠에 대한 보안 액세스 구성 및 액세스 제한을 참조하세요.

Amazon S3용 리소스 기반 정책 예시

Amazon S3의 정책 작업

정책 작업 지원

관리자는 AWSJSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 보안 주체가 어떤 리소스와 어떤 조건에서 작업을 수행할 수 있는지를 지정할 수 있습니다.

JSON 정책의 Action요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 태스크를 설명합니다. 일반적으로 정책 작업의 이름은 연결된 AWSAPI 작업의 이름과 동일합니다. 일치하는 API 작업이 없는 권한 전용 작업 같은 몇 가지 예외도 있습니다. 정책에서 여러 작업이 필요한 몇 가지 작업도 있습니다. 이러한 추가 작업을 일컬어 종속 작업이라고 합니다.

연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에 작업을 포함하십시오.

다음은 S3 API 작업과 필수 정책 작업 간의 다양한 유형 매핑 관계 유형을 보여줍니다.

  • 이름이 동일한 일대일 매핑. 예를 들어, PutBucketPolicy API 작업을 사용하려면 s3:PutBucketPolicy 정책 작업이 필요합니다.

  • 이름이 다른 일대일 매핑. 예를 들어, ListObjectsV2 API 작업을 사용하려면 s3:ListBucket 정책 작업이 필요합니다.

  • 일대다 매핑. 예를 들어, HeadObject API 작업을 사용하려면 s3:GetObject가 필요합니다. 또한 S3 객체 잠금을 사용하고 객체의 법적 보존 상태 또는 보존 설정을 가져오려는 경우 HeadObject API 작업을 사용하기 전에 해당 s3:GetObjectLegalHold 또는 s3:GetObjectRetention 정책 작업도 필요합니다.

  • 다대일 매핑. 예를 들어, ListObjectsV2 또는 HeadBucket API 작업을 사용하려면 s3:ListBucket 정책 작업이 필요합니다.

정책에 사용하기 위한 Amazon S3 작업의 목록을 보려면 서비스 승인 참조의 Amazon S3에서 정의한 작업을 참조하세요. Amazon S3 API 작업의 전체 목록은 Amazon Simple Storage Service API 참조에서 Amazon S3 API Actions를 참조하세요.

Amazon S3의 정책 작업에서는 작업 앞에 다음과 같은 접두사를 사용합니다.

s3

단일 문에서 여러 작업을 지정하려면 다음과 같이 쉼표로 구분합니다.

"Action": [ "s3:action1", "s3:action2" ]

버킷 작업은 버킷 리소스 유형에서 작동하는 S3 API 작업입니다. 예를 들면 CreateBucket, ListObjectsV2PutBucketPolicy입니다. 버킷 작업에 대한 S3 정책 작업을 위해서는 버킷 정책 또는 IAM 자격 증명 기반 정책의 Resource 요소가 다음 예시 형식의 S3 버킷 유형 Amazon 리소스 이름(ARN) 식별자여야 합니다.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"

다음 버킷 정책은 12345678901 계정을 가진 사용자 Akua에게 ListObjectsV2 API 작업을 수행하고 S3 버킷의 객체를 나열할 수 있는 s3:ListBucket 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to list objects in the bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }
액세스 포인트 정책의 버킷 작업

액세스 포인트 정책에 부여된 권한은 기본 버킷이 동일한 권한을 허용하는 경우에만 유효합니다. S3 액세스 포인트를 사용하는 경우, 버킷의 액세스 제어를 액세스 포인트에 위임하거나 액세스 포인트 정책의 동일한 권한을 기본 버킷 정책에 추가해야 합니다. 자세한 내용은 액세스 포인트를 사용하도록 IAM 정책 구성 단원을 참조하십시오. 액세스 포인트 정책에서 버킷 작업을 위한 S3 정책 작업을 위해서는 다음 형식으로 Resource 요소에 대한 accesspoint ARN을 사용해야 합니다.

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT"

다음 액세스 포인트 정책은 12345678901 계정을 가진 사용자 Akua에게 S3 액세스 포인트 DOC-EXAMPLE-ACCESS-POINT를 통해 ListObjectsV2 API 작업을 수행하여 액세스 포인트의 관련 버킷에 있는 객체를 나열할 수 있는 s3:ListBucket 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to list objects in the bucket through access point", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT" } ] }
참고

S3 액세스 포인트에서 모든 버킷 작업을 지원하는 것은 아닙니다. 자세한 내용은 S3 작업과의 액세스 포인트 호환성 단원을 참조하십시오.

객체 작업은 객체 리소스 유형에 따라 작동하는 S3 API 작업입니다. 예를 들면 GetObject, PutObjectDeleteObject입니다. 객체 작업에 대한 S3 정책 작업을 위해서는 정책의 Resource 요소가 다음 예시 형식의 S3 객체 ARN이어야 합니다.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/*"
참고

이전 예시에서 볼 수 있듯이 객체 ARN에는 버킷 이름 뒤에 슬래시가 있어야 합니다.

다음 버킷 정책은 12345678901 계정을 가진 사용자 Akua에게 PutObject API 작업을 수행하고 S3 버킷에 객체를 업로드할 수 있는 s3:PutObject 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to upload objects", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
액세스 포인트 정책의 버킷 작업

S3 액세스 포인트를 사용하여 객체 작업에 대한 액세스를 제어하는 경우 액세스 포인트 정책을 사용할 수 있습니다. 액세스 포인트 정책을 사용할 때 객체 작업을 위한 S3 정책 작업을 위해서는 arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource 형식으로 Resource 요소에 대한 accesspoint ARN을 사용해야 합니다. 액세스 포인트를 사용하는 객체 작업의 경우 Resource 요소에서 전체 액세스 포인트 ARN 뒤에 /object/ 값을 포함해야 합니다. 여기 몇 가지 예가 있습니다.

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/*"
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/prefix/*"

다음 액세스 포인트 정책은 12345678901 계정을 가진 사용자 Akua에게 액세스 포인트 DOC-EXAMPLE-ACCESS-POINT를 통해 액세스 포인트의 관련 버킷에 있는 모든 객체에 GetObject API 작업을 수행할 수 있는 s3:GetObject 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to get objects through access point", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/*" } ] }
참고

S3 액세스 포인트에서 모든 객체 작업을 지원하는 것은 아닙니다. 자세한 내용은 S3 작업과의 액세스 포인트 호환성 단원을 참조하십시오.

액세스 포인트 작업은 accesspoint 리소스 유형에서 작동하는 S3 API 작업입니다. 예를 들면 CreateAccessPoint, DeleteAccessPointGetAccessPointPolicy입니다. 액세스 포인트 작업에 대한 S3 정책 작업은 IAM 자격 증명 기반 정책에서만 사용할 수 있으며 버킷 정책이나 액세스 포인트 정책에서는 사용할 수 없습니다. 액세스 포인트 작업을 위해서는 Resource 요소가 다음 예시 형식의 accesspoint ARN이어야 합니다.

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT"

다음 IAM 자격 증명 기반 정책은 S3 액세스 포인트 DOC-EXAMPLE-ACCESS-POINTGetAccessPointPolicy API 작업을 수행할 수 있는 s3:GetAccessPointPolicy 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Grant permission to retrieve the access point policy of access point DOC-EXAMPLE-ACCESS-POINT", "Effect": "Allow", "Action": [ "s3:GetAccessPointPolicy" ], "Resource": "arn:aws:s3:*:123456789012:access point/DOC-EXAMPLE-ACCESS-POINT" } ] }

액세스 포인트를 사용하는 경우 버킷 작업에 대한 액세스를 제어하려면 액세스 포인트 정책의 버킷 작업 섹션을, 객체 작업에 대한 액세스를 제어하려면 액세스 포인트 정책의 버킷 작업 섹션을 참조하세요. 액세스 포인트 정책을 구성하는 방법에 대한 자세한 내용은 액세스 포인트를 사용하도록 IAM 정책 구성 섹션을 참조하세요.

Amazon S3 객체 Lambda를 통해 자체 코드를 Amazon S3 GET, LIST, HEAD 요청에 추가하여 애플리케이션으로 데이터가 반환될 때 데이터를 수정 및 처리할 수 있습니다. 객체 Lambda 액세스 포인트를 통해 요청할 수 있으며, 이는 다른 액세스 포인트를 통해 요청하는 것과 동일하게 작동합니다. 자세한 내용은 S3 객체 Lambda를 사용하여 객체 변환 단원을 참조하십시오.

객체 Lambda 액세스 포인트 작업용 정책을 구성하는 방법에 대한 자세한 내용은 객체 Lambda 액세스 포인트에 대한 IAM 정책 구성 섹션을 참조하세요.

다중 리전 액세스 포인트는 애플리케이션이 여러 AWS 리전에 있는 S3 버킷의 요청을 이행하는 데 사용할 수 있는 글로벌 엔드포인트를 제공합니다. 다중 리전 액세스 포인트를 사용하여 단일 리전에서 사용되는 것과 동일한 아키텍처로 다중 리전 애플리케이션을 구축하면 전 세계 어디에서나 해당 애플리케이션을 실행할 수 있습니다. 자세한 내용은 Amazon S3의 다중 리전 액세스 포인트 단원을 참조하십시오.

다중 리전 액세스 포인트 작업용 정책을 구성하는 방법에 대한 자세한 내용은 다중 리전 액세스 포인트 정책 예시 섹션을 참조하세요.

(배치 작업) 작업은 작업 리소스 유형에서 작동하는 S3 API 작업입니다. 예: DescribeJobCreateJob. 작업에 대한 S3 정책 작업은 IAM 자격 증명 기반 정책에서만 사용할 수 있으며 버킷 정책에서는 사용할 수 없습니다. 또한 작업을 위해서는 IAM 자격 증명 기반 정책의 Resource 요소가 다음 예시 형식의 job ARN이어야 합니다.

"Resource": "arn:aws:s3:*:123456789012:job/*"

다음 IAM 자격 증명 기반 정책은 S3 배치 작업 DOC-EXAMPLE-JOBDescribeJob API 작업을 수행할 수 있는 s3:DescribeJob 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow describing the Batch operation job DOC-EXAMPLE-JOB", "Effect": "Allow", "Action": [ "s3:DescribeJob" ], "Resource": "arn:aws:s3:*:123456789012:job/DOC-EXAMPLE-JOB" } ] }

S3 Storage Lens 구성 작업을 구성하는 방법에 대한 자세한 내용은 Amazon S3 스토리지 렌즈 권한 섹션을 참조하세요.

계정 작업은 계정 수준에서 작동하는 S3 API 작업입니다. 예: GetPublicAccessBlock(계정의 경우). 계정은 Amazon S3에서 정의한 리소스 유형이 아닙니다. 계정 작업에 대한 S3 정책 작업은 IAM 자격 증명 기반 정책에서만 사용할 수 있으며 버킷 정책에서는 사용할 수 없습니다. 또한 계정 작업을 위해서는 IAM 자격 증명 기반 정책의 Resource 요소가 "*"여야 합니다.

다음 IAM 자격 증명 기반 정책은 계정 수준의 GetPublicAccessBlock API 작업을 수행하고 계정 수준의 퍼블릭 액세스 차단 설정을 검색할 수 있는 s3:GetAccountPublicAccessBlock 권한을 부여합니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"Allow retrieving the account-level Public Access Block settings", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }

Amazon S3용 정책 예시

Amazon S3의 정책 리소스

정책 리소스 지원

관리자는 AWSJSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 보안 주체가 어떤 리소스와 어떤 조건에서 작업을 수행할 수 있는지 지정할 수 있습니다.

Resource JSON 정책 요소는 작업이 적용되는 하나 이상의 개체를 지정합니다. 문장에는 Resource또는 NotResource요소가 반드시 추가되어야 합니다. 모범 사례에 따라 Amazon 리소스 이름(ARN)을 사용하여 리소스를 지정합니다. 리소스 수준 권한이라고 하는 특정 리소스 타입을 지원하는 작업에 대해 이 작업을 수행할 수 있습니다.

작업 나열과 같이 리소스 수준 권한을 지원하지 않는 작업의 경우, 와일드카드(*)를 사용하여 해당 문이 모든 리소스에 적용됨을 나타냅니다.

"Resource": "*"

일부 Amazon S3 API 작업에서는 여러 리소스가 지원됩니다. 예를 들어 s3:GetObject는 EXAMPLE-RESOURCE-1 및 EXAMPLE-RESOURCE-2에 액세스하므로 보안 주체는 두 리소스에 모두 액세스할 수 있는 권한을 반드시 가져야 합니다. 단일 문에서 여러 리소스를 지정하려면 ARN을 쉼표로 구분합니다.

"Resource": [ "EXAMPLE-RESOURCE-1", "EXAMPLE-RESOURCE-2"

Amazon S3의 리소스는 버킷, 객체, 액세스 포인트 또는 작업입니다. 정책에서는 버킷, 객체, 액세스 포인트 또는 작업의 Amazon 리소스 이름(ARN)을 사용하여 리소스를 식별합니다.

Amazon S3 리소스 유형 및 해당 ARN의 목록을 보려면 서비스 권한 부여 참조의 Amazon S3에서 정의한 리소스를 참조하세요. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 Amazon S3에서 정의한 작업을 참조하세요.

리소스 ARN용 와일드카드

와일드카드는 리소스 ARN에도 사용할 수 있습니다. ARN 세그먼트(콜론으로 구분된 부분) 내에서 와일드카드 문자(*?)를 사용할 수 있습니다. 별표(*)는 0개 이상의 문자 조합을 나타내고 물음표(?)는 단일 문자를 나타냅니다. * 또는 ? 문자를 각 세그먼트에서 여러 번 사용할 수 있지만, 와일드카드 한 개를 여러 세그먼트에 걸쳐서 적용할 수는 없습니다.

  • 다음 ARN에서는 ARN의 상대 ID 부분에 와일드카드 문자 *를 사용하여 examplebucket 버킷의 모든 객체를 나타냅니다.

    arn:aws:s3:::examplebucket/*
  • 다음 ARN에서는 * 기호를 사용하여 모든 S3 버킷 및 객체를 나타냅니다.

    arn:aws:s3:::*
  • 다음 ARN에서는 relative-ID 부분에 와일드카드 문자 *?를 모두 사용합니다. 이를 통해 example1bucket, example2bucket, example3bucket 등 버킷의 모든 객체를 나타냅니다.

    arn:aws:s3:::example?bucket/*

리소스 ARN의 정책 변수

Amazon S3 ARN에서 정책 변수를 사용할 수 있습니다. 정책 평가 시에는 이러한 사전 정의된 변수가 해당 값으로 대체됩니다. 폴더 하나당 각 사용자용으로 할당된 폴더의 모음으로 버킷을 구성한다고 가정합니다. 폴더 이름은 사용자 이름과 같습니다. 해당 폴더에 대한 사용자 권한을 부여하려면 다음과 같이 리소스 ARN에 정책 변수를 지정하면 됩니다.

arn:aws:s3:::bucket_name/developers/${aws:username}/

런타임 시 정책이 평가되면 리소스 ARN의 ${aws:username} 변수가 요청을 제기하는 사용자 이름으로 대체됩니다.

Amazon S3용 정책 예시

Amazon S3의 정책 조건 키

서비스별 정책 조건 키 지원

관리자는 AWSJSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 보안 주체가 어떤 리소스와 어떤 조건에서 작업을 수행할 수 있는지 지정할 수 있습니다.

Condition 요소(또는 Condition 블록)를 사용하면 정책이 발효되는 조건을 지정할 수 있습니다. Condition 요소는 옵션입니다. 같거나 작음과 같은 조건 연산자를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다.

한 문에서 여러 Condition요소를 지정하거나 단일 Condition요소에서 여러 키를 지정하는 경우 AWS는 논리적 AND태스크를 사용하여 평가합니다. 단일 조건 키의 여러 값을 지정하는 경우 AWS는 논리적 OR태스크를 사용하여 조건을 평가합니다. 명문의 권한을 부여하기 전에 모든 조건을 충족해야 합니다.

조건을 지정할 때 자리 표시자 변수를 사용할 수도 있습니다. 예를 들어, IAM 사용자에게 IAM 사용자 이름으로 태그가 지정된 경우에만 리소스에 액세스할 수 있는 권한을 부여할 수 있습니다. 자세한 정보는 IAM 사용 설명서IAM 정책 요소: 변수 및 태그를 참조하세요.

AWS는 전역 조건 키와 서비스별 조건 키를 지원합니다. 모든 AWS 전역 조건 키를 보려면 IAM 사용자 가이드AWS 전역 조건 컨텍스트 키를 참조하세요.

각 Amazon S3 조건 키는 API에서 조건이 설정될 수 있도록 허용된 같은 이름의 요청 헤더에 매핑됩니다. Amazon S3 전용 조건 키는 이름이 같은 요청 헤더의 동작을 명령합니다. 예를 들어 s3:GetObjectVersion 권한에 대한 조건부 권한을 부여하는 데 사용할 수 있는 조건 키 s3:VersionId는 GET Object 요청에서 설정한 versionId 쿼리 파라미터의 동작을 정의합니다.

Amazon S3 조건 키 목록을 보려면 서비스 승인 참조의 Amazon S3에 사용되는 조건 키를 참조하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 Amazon S3에서 정의한 작업을 참조하세요.

예: 특정 스토리지 클래스를 이용한 객체 업로드 제한

계정 ID 123456789012로 표시되는 Account A가 버킷을 소유하고 있다고 가정합니다. 계정 A 관리자는 계정 A에 속한 사용자인 Dave가 STANDARD_IA 스토리지 클래스에 저장된 버킷에 객체를 업로드할 수만 있도록 Dave의 권한을 제한하려고 합니다. 객체 업로드를 특정 스토리지 클래스로 제한하기 위해 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" ] } } } ] }

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

Amazon S3용 정책 예시

Amazon S3의 ACL

ACL 지원

Amazon S3에서 액세스 제어 목록(ACL)은 리소스에 액세스할 수 있는 AWS 계정을 제어합니다. ACLs는 JSON 정책 문서 형식을 사용하지 않지만 리소스 기반 정책과 유사합니다.

중요

Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다.

Amazon S3의 ACL을 사용한 액세스 제어에 대한 자세한 내용은 ACL을 사용한 액세스 관리 섹션을 참조하세요.

Amazon S3의 ABAC

ABAC(정책 내 태그) 지원

부분

속성 기반 액세스 제어(ABAC)는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. AWS에서는 이러한 속성을 태그라고 합니다. IAM 엔터티(사용자 또는 역할) 및 많은 AWS리소스에 태그를 연결할 수 있습니다. ABAC의 첫 번째 단계로 개체 및 리소스에 태그를 지정합니다. 그런 다음 보안 주체의 태그가 액세스하려는 리소스의 태그와 일치할 때 작업을 허용하도록 ABAC 정책을 설계합니다.

ABAC는 빠르게 성장하는 환경에서 유용하며 정책 관리가 번거로운 상황에 도움이 됩니다.

태그를 기반으로 액세스를 제어하려면 aws:ResourceTag/key-name, aws:RequestTag/key-name 또는 aws:TagKeys 조건 키를 사용하여 정책의 조건 요소에 태그 정보를 제공합니다.

서비스가 모든 리소스 타입에 대해 세 가지 조건 키를 모두 지원하는 경우, 값은 서비스에 대해 입니다. 서비스가 일부 리소스 타입에 대해서만 세 가지 조건 키를 모두 지원하는 경우, 값은 부분적입니다.

ABAC에 대한 자세한 정보는 IAM 사용 설명서ABAC란 무엇인가요?를 참조하세요. ABAC 설정 단계가 포함된 자습서를 보려면 IAM 사용 설명서속성 기반 액세스 제어(ABAC) 사용을 참조하세요.

태그를 기반으로 S3 배치 작업에 대한 액세스를 제한하는 ID 기반 정책의 예시를 보려면 작업 태그를 사용하여 S3 배치 작업에 대한 권한 제어 섹션을 참조하세요.

ABAC 및 객체 태그

ABAC 정책에서 객체는 aws: 태그 대신 s3: 태그를 사용합니다. 객체 태그를 기반으로 객체에 대한 액세스를 제어하려면 다음 태그를 사용하여 정책의 조건 요소에 태그 정보를 제공하세요.

  • s3:ExistingObjectTag/tag-key

  • s3:s3:RequestObjectTagKeys

  • s3:RequestObjectTag/tag-key

권한 정책 예시를 포함하여 객체 태그를 사용한 액세스 제어에 대한 자세한 내용은 태그 지정 및 액세스 제어 정책 섹션을 참조하세요.

Amazon S3에서 임시 자격 증명 사용

임시 보안 인증 지원

일부 AWS 서비스는 임시 보안 인증을 사용하여 로그인할 때 작동하지 않습니다. 임시 보안 인증으로 작동하는 AWS 서비스를 비롯한 추가 정보는 IAM 사용 설명서IAM으로 작업하는 AWS 서비스를 참조하세요.

사용자 이름과 암호를 제외한 다른 방법을 사용하여 AWS Management Console에 로그인하면 임시 보안 인증을 사용하는 것입니다. 예를 들어 회사의 Single Sign-On(SSO) 링크를 사용하여 AWS에 액세스하면 해당 프로세스에서 자동으로 임시 보안 인증을 생성합니다. 또한 콘솔에 사용자로 로그인한 다음 역할을 전환할 때 임시 보안 인증을 자동으로 생성합니다. 역할 전환에 대한 자세한 정보는 IAM 사용 설명서역할로 전환(콘솔)을 참조하세요.

AWS CLI 또는 AWS API를 사용하여 임시 보안 인증을 수동으로 만들 수 있습니다 그런 다음 이러한 임시 보안 인증을 사용하여 AWS에 액세스할 수 있습니다. AWS에서는 장기 액세스 키를 사용하는 대신 임시 보안 인증을 동적으로 생성할 것을 권장합니다. 자세한 정보는 IAM의 임시 보안 인증 섹션을 참조하세요.

Amazon S3에 대한 액세스 세션 전달

전달 액세스 세션(FAS) 지원

IAM 사용자 또는 역할을 사용하여 AWS에서 작업을 수행하는 사람은 보안 주체로 간주됩니다. 일부 서비스를 사용하는 경우 다른 서비스에서 다른 작업을 시작하는 작업을 수행할 수 있습니다. FAS는 AWS 서비스를 직접 호출하는 보안 주체의 권한과 요청하는 AWS 서비스를 함께 사용하여 다운스트림 서비스에 대한 요청을 수행합니다. FAS 요청은 서비스에서 완료를 위해 다른 AWS 서비스 또는 리소스와의 상호 작용이 필요한 요청을 받은 경우에만 이루어집니다. 이 경우 두 작업을 모두 수행할 수 있는 권한이 있어야 합니다. FAS 요청 시 정책 세부 정보는 전달 액세스 세션을 참조하세요.

  • SSE-KMS를 사용하여 암호화되었을 때 Amazon S3에서 객체 암호 해독을 위해 AWS KMS를 직접적으로 호출할 때 FAS가 사용됩니다. 자세한 내용은 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용 단원을 참조하십시오.

  • S3 Access Grants 또한 FAS를 사용합니다. 특정 ID와 관련해 S3 데이터에 대한 액세스 권한 부여를 생성한 후, 피부여자는 S3 Access Grants에 임시 자격 증명을 요청합니다. S3 Access Grants는 AWS STS로부터 요청자를 위한 임시 자격 증명을 받아 요청자에게 자격 증명을 벤딩합니다. 자세한 내용은 S3 Access Grants를 통해 Amazon S3 데이터에 대한 액세스 요청 단원을 참조하십시오.

Amazon S3의 서비스 역할

서비스 역할 지원

서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 IAM 역할입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 정보는 IAM 사용자 설명서AWS 서비스에 대한 권한을 위임할 역할 생성을 참조합니다.

주의

서비스 역할에 대한 권한을 변경하면 Amazon S3 기능이 중단될 수 있습니다. Amazon S3에서 관련 지침을 제공하는 경우에만 서비스 역할을 편집합니다.

Amazon S3의 서비스 연결 역할

서비스 링크 역할 지원

부분

서비스 링크 역할은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 링크 역할은 AWS 계정에 나타나고, 서비스가 소유합니다. IAM 관리자는 서비스 링크 역할의 권한을 볼 수 있지만 편집은 할 수 없습니다.

Amazon S3는 Amazon S3 Storage Lens 대한 서비스 연결 역할을 지원합니다. Amazon S3 서비스 연결 역할 생성 또는 관리에 대한 자세한 내용은 Amazon S3 스토리지 렌즈에 대한 서비스 연결 역할 사용 섹션을 참조하세요.

보안 주체로서의 Amazon S3 서비스

정책의 서비스 이름 S3 기능 추가 정보

s3.amazonaws.com

S3 복제

복제 설정

s3.amazonaws.com

S3 이벤트 알림

Amazon S3 이벤트 알림

s3.amazonaws.com

S3 인벤토리

Amazon S3 인벤토리

access-grants.s3.amazonaws.com

S3 Access Grants

위치 등록

batchoperations.s3.amazonaws.com

S3 배치 작업

Amazon S3 배치 작업에 대한 권한 부여

logging.s3.amazonaws.com

S3 서버 액세스 로깅

Amazon S3 서버 액세스 로깅 사용 설정

storage-lens.s3.amazonaws.com

S3 Storage Lens

데이터 내보내기를 사용하여 Amazon S3 스토리지 렌즈 지표 보기