조건 키를 사용한 버킷 정책 예시
권한 부여 시 액세스 정책 언어를 사용하여 조건을 지정할 수 있습니다. 선택적 Condition
요소 또는 Condition
블록을 사용하여 정책이 적용되는 시기에 대한 조건을 지정할 수 있습니다.
객체 및 버킷 작업에 Amazon S3 조건 키를 사용하는 정책은 다음 예제를 참조하십시오. 조건 키에 대한 자세한 내용은 Amazon S3의 정책 조건 키 섹션을 참조하십시오. 정책에 지정할 수 있는 Amazon S3 작업, 조건 키, 리소스의 전체 목록은 서비스 승인 참조에서 Amazon S3에 사용되는 작업, 리소스 및 조건 키를 참조하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한 섹션을 참조하세요.
예제: 객체 작업을 위한 Amazon S3 조건 키
다음 예제는 객체 작업에 Amazon S3별 조건 키를 사용하는 방법을 보여줍니다. 정책에 지정할 수 있는 Amazon S3 작업, 조건 키, 리소스의 전체 목록은 서비스 승인 참조에서 Amazon S3에 사용되는 작업, 리소스 및 조건 키를 참조하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한 섹션을 참조하세요.
몇 가지 예제 정책은 PUT Object 작업에서 조건 키를 사용할 수 있는 방법을 보여 줍니다. PUT Object 작업은 ACL(액세스 제어 목록) 기반 권한을 부여하는 데 사용할 수 있는 ACL 전용 헤더를 허용합니다. 이러한 조건 키를 통해 사용자가 객체를 업로드할 때 특정 액세스 권한이 필요하도록 조건을 설정할 수 있습니다. 또한 PutObjectAcl 작업을 사용하여 ACL 기반 권한을 부여할 수 있습니다. 자세한 내용은 Amazon S3 Amazon Simple Storage Service API Reference의 PutObjectAcl을 참조하십시오. ACL에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.
주제
예제 1: 서버 측 암호화를 사용하여 객체를 저장하도록 요구하는 s3:PutObject
권한 부여
Account A에서 버킷을 소유하고 있다고 가정합니다. 계정 관리자는 Account A의 사용자인 Jane에게 항상 Amazon S3 관리형 키(SSE-S3)로 서버 측 암호화를 요청한다는 조건으로 객체를 업로드할 수 있는 권한을 부여하려고 합니다. Account A 관리자는 다음과 같은 s3:x-amz-server-side-encryption
조건 키를 사용하여 이 요구 사항을 지정할 수 있습니다. 다음 Condition
블록의 키-값 페어는 s3:x-amz-server-side-encryption
조건 키와 SSE-S3(AES256
)를 암호화 유형으로 지정합니다.
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
AWS CLI를 사용하여 이 권한을 테스트할 때는 다음 예제와 같이 --server-side-encryption
파라미터를 사용하여 필요한 암호화를 추가해야 합니다. 이 예 명령을 사용하려면
를 실제 정보로 대체하세요.user input
placeholders
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyHappyFace.jpg
--bodyc:\HappyFace.jpg
--server-side-encryption "AES256
" --profileAccountAadmin
예제 2: 복사 소스에 대한 제한이 있는 객체를 복사하기 위한 s3:PutObject
권한 부여
PUT
객체 요청에서 소스 객체를 지정하면 요청은 복사 작업에 해당합니다(CopyObject 참조). 따라서 버킷 소유자는 원본에 대한 제한이 있는 객체 복사 권한을 사용자에게 부여할 수 있습니다. 예를 들면 다음과 같습니다.
-
지정한 소스 버킷에서만 객체 복사를 허용합니다(예:
).amzn-s3-demo-source-bucket
-
지정한 소스 버킷에서 객체를 복사할 수 있으며,
처럼 키 이름 접두사가 특정 접두사로 시작하는 객체(예:public/
)만 복사할 수 있습니다.amzn-s3-demo-source-bucket
/public/*
-
소스 버킷에서 특정 객체만 복사할 수 있습니다(예:
).amzn-s3-demo-source-bucket
/example.jpg
다음 버킷 정책은 사용자(
)에게 Dave
s3:PutObject
권한을 부여합니다. 이 정책은 요청에 s3:x-amz-copy-source
헤더를 포함하고 헤더 값으로 /
키 이름 접두사를 지정하는 조건을 충족하는 객체만 복사하도록 허용합니다. 이 정책 예를 사용하려면 amzn-s3-demo-source-bucket
/public/*
를 실제 정보로 바꾸세요.user
input placeholders
{ "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:::/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::
amzn-s3-demo-source-bucket
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
amzn-s3-demo-source-bucket
/public/*
" } } } ] }
AWS CLI에서 정책 테스트
AWS CLI copy-object
명령을 사용하는 권한을 테스트할 수 있습니다. --copy-source
파라미터를 추가하여 원본을 지정할 수 있습니다. 이때 키 이름은 정책에 허용된 접두사와 일치해야 합니다. --profile
파라미터를 사용하는 사용자 Dave의 자격 증명을 제공해야 합니다. AWS CLI 설정에 대한 자세한 내용은 Amazon S3 API 참조의 AWS CLI를 사용하여 Amazon S3에서 개발을 참조하세요.
aws s3api copy-object --bucket
--key
amzn-s3-demo-source-bucket
HappyFace.jpg
--copy-source
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
--profileAccountADave
특정 객체만 복사할 수 있는 권한 부여
앞서 다룬 정책에서는 StringNotLike
조건을 사용합니다. 특정 객체만 복사할 수 있는 권한을 부여하려면 StringNotLike
에서 StringNotEquals
로 조건을 변경한 뒤 다음 예제와 같이 정확한 객체 키를 지정합니다. 이 예 명령을 사용하려면
를 실제 정보로 대체하세요.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
" } }
예시 3: 특정 버전의 객체에 대한 액세스 권한 부여
Account A에서 버전 관리가 활성화된 버킷을 소유하고 있다고 가정합니다. 버킷에는 몇 가지 버전의
객체가 있습니다. 이제 Account A 관리자는 사용자 HappyFace.jpg
에게 특정 버전의 객체만 가져올 수 있는 권한을 부여하려고 합니다. 계정 관리자는 다음 예제와 같이 조건부로 사용자 Dave
에게 Dave
s3:GetObjectVersion
권한을 부여하여 이 작업을 수행할 수 있습니다. Condition
블록의 키-값 페어는 s3:VersionId
조건 키를 지정합니다. 이 경우 지정된 버전 관리를 사용하는 버킷에서 객체를 가져오려면
에서 정확한 객체 버전 ID를 알고 있어야 합니다. 이 정책 예를 사용하려면 Dave
를 실제 정보로 바꾸세요.user input
placeholders
자세한 내용은 Amazon Simple Storage Service API 참조에서 GetObject를 참조하십시오.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e
" } } } ] }
AWS CLI에서 정책 테스트
--version-id
파라미터와 함께 AWS CLI get-object
명령을 통해 가져올 특정 객체 버전을 식별하여 이 정책의 권한을 테스트할 수 있습니다. 이 명령은 지정된 버전의 객체를 가져와
파일에 저장합니다.OutputFile.jpg
aws s3api get-object --bucket
--key
amzn-s3-demo-bucket
HappyFace.jpg
OutputFile.jpg
--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profileAccountADave
예시 4: 객체 태그 기반 권한 부여
Amazon S3 작업에 객체 태그 지정 조건 키를 사용하는 방법에 대한 예제는 태그 지정 및 액세스 제어 정책 섹션을 참조하세요.
예시 5: 버킷 소유자의 AWS 계정 ID로 액세스 제한
aws:ResourceAccount
또는 s3:ResourceAccount
조건 키를 사용하여 특정 AWS 계정 ID가 소유한 Amazon S3 버킷에 대한 사용자, 역할 또는 애플리케이션 액세스를 제한하는 IAM 또는 가상 프라이빗 클라우드(VPC) 엔드포인트 정책을 작성할 수 있습니다. 이 조건 키를 사용하면 소유하지 않은 버킷에 VPC 내의 클라이언트가 액세스하는 것을 제한할 수 있습니다.
그러나 일부 AWS 서비스는 AWS 관리되는 버킷에 대한 액세스에 의존합니다. 따라서 IAM 정책에서 aws:ResourceAccount
또는 s3:ResourceAccount
키를 사용하면 이러한 리소스에 대한 액세스에도 영향을 미칠 수 있습니다. 자세한 정보는 다음 자료를 참조하십시오.
-
AWS PrivateLink 가이드의 지정된 AWS 계정에서 버킷에 대한 액세스 제한
-
Amazon ECR 안내서에서 Amazon ECR이 사용하는 버킷에 대한 액세스 제한
-
AWS Systems Manager 가이드의 AWS 관리되는 Amazon S3 버킷에 대해 Systems Manager에 대한 필수 액세스 권한 제공
aws:ResourceAccount
및 s3:ResourceAccount
조건 키에 대한 자세한 내용과 사용 방법을 보여주는 예제는 AWS 스토리지 블로그에서 특정 AWS 계정에서 소유한 Amazon S3 버킷에 대한 액세스 제한
예시 6: 최소 TLS 버전 요구
s3:TlsVersion
조건 키를 사용하면 IAM, 가상 프라이빗 클라우드 엔드포인트(VPCE) 또는 버킷 정책을 작성하여 클라이언트가 사용한 TLS 버전에 따라 Amazon S3 버킷에 대한 사용자 또는 애플리케이션의 액세스를 제한할 수 있습니다. 이 조건 키를 사용하여 최소 TLS 버전을 요구하는 정책을 작성할 수 있습니다.
다음 예제 버킷 정책은 TLS 버전이 1.2보다 낮은 클라이언트(예: 1.1 또는 1.0)의 PutObject
요청을 거부합니다. 이 정책 예를 사용하려면
를 실제 정보로 바꾸세요.user input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }
amzn-s3-demo-bucket1
다음 버킷 정책 예제는 TLS 버전이 1.1보다 높은 클라이언트(예: 1.2, 1.3 이상)의 PutObject
요청을 허용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }
amzn-s3-demo-bucket1
예제 7: Deny
문에서 특정 보안 주체 제외
다음 버킷 정책은
계정 번호가 있는 보안 주체를 제외하고 123456789012
에 대한 amzn-s3-demo-bucket
s3:GetObject
액세스를 거부합니다. 이 정책 예를 사용하려면
를 실제 정보로 바꾸세요.user input
placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "" ] } } } ] }
123456789012
예제: 버킷 작업을 위한 Amazon S3 조건 키
다음 정책 예제는 버킷 작업에 Amazon S3별 조건 키를 사용하는 방법을 보여줍니다.
예제 1: IP 주소를 조건으로 s3:GetObject
권한 부여
요청이 특정 범위의 IP 주소(예:
)에서 비롯된 경우 인증된 사용자가 192.0.2.*
s3:GetObject
작업을 사용하도록 권한을 부여합니다. 단, 제외하려는 IP 주소(예:
)는 예외입니다. 192.0.2.188
Condition
블록에서 IpAddress
및 NotIpAddress
가 조건에 해당하며, 각 조건에는 평가를 위한 키-값 페어가 제공됩니다. 이 예제에서의 키-값 페어는 모두 aws:SourceIp
AWS 차원의 키를 사용합니다. 이 정책 예를 사용하려면
를 실제 정보로 바꾸세요.user input placeholders
참고
Condition
블록에 지정된 IPAddress
및 NotIpAddress
키 값은 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:::
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "
amzn-s3-demo-bucket
192.0.2.0/24
" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32
" } } } ] }
Amazon S3 정책에서 다른 AWS 전역 조건 키를 사용할 수도 있습니다. 예를 들어 VPC 엔드포인트에 대한 버킷 정책에서 aws:SourceVpce
및 aws:SourceVpc
조건 키를 지정할 수 있습니다. 구체적인 예는 버킷 정책을 사용하여 VPC 엔드포인트에서 액세스 제어 섹션을 참조하십시오.
참고
일부 AWS 전역 조건 키의 경우, 특정 리소스 유형만 지원됩니다. 따라서 Amazon S3가 사용하려는 전역 조건 키 및 리소스 유형을 지원하는지 아니면 Amazon S3 관련 조건 키를 대신 사용해야 하는지 확인하세요. Amazon S3에 지원되는 리소스 유형과 조건 키의 전체 목록은 서비스 승인 참조에서 Amazon S3에 사용되는 작업, 리소스 및 조건 키를 참조하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한 섹션을 참조하세요.
예제 2: 특정 접두사가 있는 버킷의 객체 목록 가져오기
s3:prefix
조건 키를 사용하여 ListObjectsV2 API 작업의 응답을 특정 접두사가 있는 키 이름으로 제한할 수 있습니다. 버킷 소유자인 경우 이 조건 키로 사용자가 버킷에 있는 특정 접두사의 내용을 나열하도록 제한할 수 있습니다. s3:prefix
조건 키는 버킷의 객체가 키 이름 접두사로 정리되어 있는 경우 유용합니다.
Amazon S3 콘솔은 키 이름 접두사를 사용하여 폴더 개념을 표시합니다. 콘솔만 폴더 개념을 지원하고 Amazon S3 API는 버킷과 객체만 지원합니다. 예를 들어, 키 이름이
및 public/object1.jpg
인 2개의 객체가 있는 경우 콘솔에서는 public/object2.jpg
폴더 아래에 객체가 표시됩니다. Amazon S3 API에서 이러한 객체는 폴더의 객체가 아니라 접두사가 있는 객체입니다. 접두사 및 구분 기호를 사용하여 액세스 권한을 필터링하는 방법에 대한 자세한 내용은 사용자 정책을 사용하여 버킷에 대한 액세스 제어 단원을 참조하십시오.public
다음 시나리오에서 버킷 소유자와 사용자가 속한 상위 계정은 동일합니다. 따라서 버킷 소유자는 버킷 정책 또는 사용자 정책을 사용하여 액세스 권한을 부여할 수 있습니다. ListObjectsV2
API 작업에 사용할 수 있는 다른 조건 키에 대한 자세한 내용은 ListObjectsV2 섹션을 참조하세요.
참고
버킷에서 버전 관리가 활성화된 경우 버킷의 객체를 나열하려면 다음 정책에서 s3:ListBucket
권한 대신 s3:ListBucketVersions
권한을 부여해야 합니다. 또한, s3:ListBucketVersions
권한은 s3:prefix
조건 키를 지원합니다.
사용자 정책
다음 사용자 정책은 사용자에게 요청에서 값이
인 접두사를 지정하도록 요구하는 projects
Condition
문을 통해 s3:ListBucket
권한을 부여합니다(ListObjectsV2 참조). 이 정책 예를 사용하려면
를 실제 정보로 바꾸세요.user input placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
Condition
문은 사용자가
접두사가 있는 객체 키만 나열하도록 제한합니다. 추가된 명시적 projects
Deny
문은 사용자가 다른 권한을 가지고 있든 없든 다른 접두사가 있는 키를 나열하는 것을 거부합니다. 예를 들어, 이전 사용자 정책 업데이트 또는 버킷 정책을 통해 사용자가 제한 없이 객체 키를 나열할 수 있는 권한을 얻을 수 있습니다. 명시적 Deny
문은 항상 Allow
문보다 우선하므로, 사용자가
접두사가 있는 키 이외의 키를 나열하려고 하면 요청이 거부됩니다.projects
버킷 정책
사용자를 식별하는 Principal
요소를 위의 사용자 정책에 추가하는 경우, 다음 예제에서처럼 버킷 정책을 갖게 됩니다. 이 정책 예를 사용하려면
를 실제 정보로 바꾸세요.user input
placeholders
{ "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:::", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
AWS CLI에서 정책 테스트
다음 list-object
AWS CLI 명령을 사용하는 정책을 테스트할 수 있습니다. 이 명령에서 --profile
파라미터를 사용하여 사용자 자격 증명을 제공합니다. AWS CLI 사용 및 설정에 대한 자세한 내용은 Amazon S3 API 참조의 AWS CLI를 사용하여 Amazon S3에서 개발을 참조하세요.
aws s3api list-objects --bucket
--prefix
amzn-s3-demo-bucket
projects
--profileAccountA
예제 3: 최대 키 수 설정
s3:max-keys
조건 키를 사용하여 요청자가 ListObjectsV2 또는 ListObjectVersions 요청에서 반환할 수 있는 최대 키 수를 설정할 수 있습니다. 기본적으로 이러한 API 작업은 최대 1,000개의 키를 반환합니다. s3:max-keys
와 함께 사용할 수 있는 숫자 조건 연산자 목록은 IAM 사용 설명서의 숫자 조건 연산자를 참조하십시오.