Amazon S3가 IAM과 함께 작동하는 방식
Amazon S3가 IAM과 함께 작동하는 방식 (How Amazon S3 works with IAM)
IAM을 사용해 Amazon S3에 대한 액세스를 관리하기 전에 Amazon S3에서 사용할 수 있는 IAM 기능을 알아두세요.
출처: 문서
본문
Amazon S3에서 사용할 수 있는 IAM 기능
| IAM 기능 | Amazon S3 지원 |
|---|---|
| ID 기반 정책 | 예 |
| 리소스 기반 정책 | 예 |
| 정책 작업 | 예 |
| 정책 리소스 | 예 |
| 정책 조건 키(서비스 특정) | 예 |
| ACL | 예 |
| ABAC(정책의 태그) | 부분적 |
| 임시 자격 증명 | 예 |
| 전달 액세스 세션(FAS) | 예 |
| 서비스 역할 | 예 |
| 서비스 연결 역할 | 부분적 |
Amazon S3와 다른 AWS 서비스가 대부분의 IAM 기능과 함께 작동하는 방식에 대한 높은 수준의 개요는 IAM 사용자 가이드의 IAM과 함께 작동하는 AWS 서비스를 참고하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.
Amazon S3용 ID 기반 정책
ID 기반 정책 지원: 예
ID 기반 정책은 IAM 사용자, 사용자 그룹 또는 역할 같은 자격에 연결할 수 있는 JSON 권한 정책 문서예요. 이러한 정책은 사용자와 역할이 어떤 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 제어해요. ID 기반 정책을 만드는 방법을 알아보려면 IAM 사용자 가이드의 고객 관리형 정책으로 사용자 지정 IAM 권한 정의를 참고하세요.
IAM ID 기반 정책을 사용하면 허용 또는 거부되는 작업과 리소스, 작업이 허용되거나 거부되는 조건을 지정할 수 있어요. JSON 정책에서 사용할 수 있는 모든 요소에 대해 알아보려면 IAM 사용자 가이드의 IAM JSON 정책 요소 참조를 참고하세요.
Amazon S3 ID 기반 정책 예시는 Amazon S3용 ID 기반 정책을 참고하세요.
Amazon S3 내의 리소스 기반 정책
리소스 기반 정책 지원: 예
리소스 기반 정책은 리소스에 연결하는 JSON 정책 문서예요. 리소스 기반 정책의 예로는 IAM 역할 신뢰 정책과 Amazon S3 버킷 정책이 있어요. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이를 사용해 특정 리소스에 대한 액세스를 제어할 수 있어요. 정책이 연결된 리소스에 대해 정책은 지정된 보안 주체가 해당 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 정의해요. 리소스 기반 정책에서 보안 주체를 지정해야 해요. 보안 주체에는 계정, 사용자, 역할, 페더레이션 사용자 또는 AWS 서비스가 포함될 수 있어요.
교차 계정 액세스를 활성화하려면 리소스 기반 정책의 보안 주체로 전체 계정 또는 다른 계정의 IAM 엔터티를 지정할 수 있어요. 자세한 내용은 IAM 사용자 가이드의 IAM의 교차 계정 리소스 액세스를 참고하세요.
Amazon S3 서비스는 버킷 정책, 액세스 포인트 정책, 액세스 그랜트를 지원해요.
- 버킷 정책은 Amazon S3 버킷에 연결되는 리소스 기반 정책이에요. 버킷 정책은 어떤 보안 주체가 버킷에서 작업을 수행할 수 있는지 정의해요.
- 액세스 포인트 정책은 기본 버킷 정책과 함께 평가되는 리소스 기반 정책이에요.
- 액세스 그랜트는 프리픽스, 버킷 또는 객체별로 Amazon S3의 데이터에 대한 액세스 권한을 정의하는 단순화된 모델이에요. S3 Access Grants에 대한 정보는 S3 Access Grants로 액세스 관리를 참고하세요.
버킷 정책의 보안 주체
Principal 요소는 리소스에 대한 액세스가 허용되거나 거부되는 사용자, 계정, 서비스 또는 기타 엔터티를 지정해요. 다음은 Principal을 지정하는 예시예요. 자세한 내용은 IAM 사용자 가이드의 Principal을 참고하세요.
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 사용자에게 권한 부여
계정 내 IAM 사용자에게 권한을 부여하려면 "AWS": "user-ARN" 이름-값 쌍을 제공해야 해요.
"Principal": { "AWS": "arn:aws:iam::account-number-without-hyphens:user/username" }
단계별 지침을 제공하는 상세 예시는 예시 1: 버킷 소유자가 사용자에게 버킷 권한 부여와 예시 3: 버킷 소유자가 소유하지 않은 객체에 권한 부여를 참고하세요.
참고 버킷 정책을 업데이트한 후 IAM 자격이 삭제되면 버킷 정책은 ARN 대신 보안 주체 요소에 고유 식별자를 표시해요. 이러한 고유 ID는 재사용되지 않으므로 모든 정책 문에서 고유 식별자를 가진 보안 주체를 안전하게 제거할 수 있어요. 고유 식별자에 대한 자세한 내용은 IAM 사용자 가이드의 IAM 식별자를 참고하세요.
익명 권한 부여
경고 Amazon S3 버킷에 익명 액세스를 부여할 때는 주의하세요. 익명 액세스를 부여하면 전 세계 누구나 버킷에 액세스할 수 있어요. S3 버킷에 어떤 종류의 익명 쓰기 액세스도 절대 부여하지 말 것을 강력히 권장해요.
모든 사람에게 권한을 부여하려면(익명 액세스라고도 함) Principal 값으로 와일드카드("*")를 설정하세요. 예를 들어 버킷을 웹사이트로 구성하면 버킷의 모든 객체가 공개적으로 액세스 가능하도록 하려는 것이에요.
"Principal": "*"
"Principal": { "AWS": "*" }
리소스 기반 정책에서 Allow 효과와 함께 "Principal": "*"를 사용하면 AWS에 로그인하지 않은 사람을 포함해 누구나 리소스에 액세스할 수 있어요.
리소스 기반 정책에서 Allow 효과와 함께 "Principal": { "AWS": "*" }를 사용하면 같은 파티션의 모든 계정에서 어떤 루트 사용자, IAM 사용자, 가정된 역할 세션 또는 페더레이션 사용자도 리소스에 액세스할 수 있어요.
익명 사용자의 경우 이 두 방법은 동일해요. 자세한 내용은 IAM 사용자 가이드의 모든 보안 주체를 참고하세요.
보안 주체 이름 또는 ARN의 일부를 매칭하는 데 와일드카드를 사용할 수 없어요.
중요 AWS 액세스 제어 정책에서 보안 주체
"*"와{"AWS": "*"}는 동일하게 동작해요.
리소스 권한 제한
리소스 정책을 사용해 IAM 보안 주체가 달리 액세스할 수 있는 리소스에 대한 액세스를 제한할 수도 있어요. Deny 문을 사용해 액세스를 방지하세요.
다음 예시는 보안 전송 프로토콜이 사용되지 않으면 액세스를 차단해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyBucketAccessIfSTPNotUsed",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
이 제한이 모든 사람에게 적용되도록 "Principal": "*"를 사용하는 것은 이 방법으로 특정 계정이나 보안 주체에게만 액세스를 거부하려고 시도하는 것보다 이 정책의 모범 사례예요.
CloudFront URL을 통한 액세스 요구
사용자가 Amazon S3 URL 대신 CloudFront URL로만 Amazon S3 콘텐츠에 액세스하도록 요구할 수 있어요. 이렇게 하려면 CloudFront 오리진 액세스 제어(OAC)를 만든 다음 S3 데이터의 권한을 변경하세요. 버킷 정책에서 Principal로 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용 버킷 정책을 참고하세요. 액세스 포인트 정책 예시는 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
Amazon S3용 정책 작업
정책 작업 지원: 예
관리자는 AWS JSON 정책을 사용해 누가 무엇에 액세스할 수 있는지, 즉 어떤 보안 주체가 어떤 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 지정할 수 있어요.
JSON 정책의 Action 요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 작업을 설명해요. 정책에 작업을 포함해 관련 작업 수행 권한을 부여하세요.
다음은 S3 API 작업과 필수 정책 작업 간의 다양한 매핑 유형을 보여줘요.
- 같은 이름의 일대일 매핑. 예를 들어
PutBucketPolicyAPI 작업을 사용하려면s3:PutBucketPolicy정책 작업이 필요해요. - 다른 이름의 일대일 매핑. 예를 들어
ListObjectsV2API 작업을 사용하려면s3:ListBucket정책 작업이 필요해요. - 일대다 매핑. 예를 들어
HeadObjectAPI 작업을 사용하려면s3:GetObject가 필요해요. 또한 S3 객체 잠금을 사용하고 객체의 법적 보류 상태나 보존 설정을 가져오려면HeadObjectAPI 작업을 사용하기 전에 해당s3:GetObjectLegalHold또는s3:GetObjectRetention정책 작업도 필요해요. - 다대일 매핑. 예를 들어
ListObjectsV2또는HeadBucketAPI 작업을 사용하려면s3:ListBucket정책 작업이 필요해요.
정책에서 사용할 Amazon S3 작업 목록은 서비스 권한 부여 참조의 Amazon S3가 정의한 작업을 참고하세요. Amazon S3 API 작업의 전체 목록은 Amazon Simple Storage Service API 참조의 Amazon S3 API 작업을 참고하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.
Amazon S3의 정책 작업은 작업 앞에 다음 접두사를 사용해요.
s3
단일 문에서 여러 작업을 지정하려면 쉼표로 구분하세요.
"Action": [
"s3:action1",
"s3:action2"
]
버킷 작업
버킷 작업은 버킷 리소스 유형에 대해 작동하는 S3 API 작업이에요. 예를 들어 CreateBucket, ListObjectsV2, PutBucketPolicy가 있어요. 버킷 작업용 S3 정책 작업은 버킷 정책이나 IAM ID 기반 정책에서 Resource 요소가 다음 예시 형식의 S3 버킷 유형 Amazon 리소스 이름(ARN) 식별자여야 해요.
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
다음 버킷 정책은 계정 12345678901의 사용자 Akua에게 S3 버킷에서 ListObjectsV2 API 작업을 수행하고 객체를 나열하는 s3:ListBucket 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Akua to list objects in the bucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Akua"
},
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
}
]
}
일반 목적 버킷용 액세스 포인트 정책의 버킷 작업. 일반 목적 버킷용 액세스 포인트 정책에서 부여된 권한은 기본 버킷이 같은 권한을 허용하는 경우에만 유효해요. S3 액세스 포인트를 사용할 때는 버킷에서 액세스 포인트로 액세스 제어를 위임하거나 액세스 포인트 정책의 같은 권한을 기본 버킷의 정책에 추가해야 해요. 자세한 내용은 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요. 액세스 포인트 정책에서 버킷 작업용 S3 정책 작업은 Resource 요소에 다음 형식의 액세스 포인트 ARN을 사용해야 해요.
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
다음 액세스 포인트 정책은 계정 12345678901의 사용자 Akua에게 example-access-point라는 S3 액세스 포인트를 통해 ListObjectsV2 API 작업을 수행할 s3:ListBucket 권한을 부여해요. 이 권한은 Akua가 example-access-point와 연결된 버킷의 객체를 나열할 수 있게 해줘요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAkuaToListObjectsInBucketThroughAccessPoint",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Akua"
},
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:us-west-2:111122223333:accesspoint/example-access-point"
}
]
}
참고 모든 버킷 작업이 일반 목적 버킷용 액세스 포인트에서 지원되는 것은 아니에요. 자세한 내용은 S3 작업과 액세스 포인트 호환성을 참고하세요.
디렉터리 버킷용 액세스 포인트 정책의 버킷 작업. 디렉터리 버킷용 액세스 포인트 정책에서 부여된 권한은 기본 버킷이 같은 권한을 허용하는 경우에만 유효해요. S3 액세스 포인트를 사용할 때는 버킷에서 액세스 포인트로 액세스 제어를 위임하거나 액세스 포인트 정책의 같은 권한을 기본 버킷의 정책에 추가해야 해요. 자세한 내용은 디렉터리 버킷용 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요. 액세스 포인트 정책에서 버킷 작업용 S3 정책 작업은 Resource 요소에 다음 형식의 액세스 포인트 ARN을 사용해야 해요.
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
다음 액세스 포인트 정책은 계정 12345678901의 사용자 Akua에게 example-access-point--usw2-az1--xa-s3라는 액세스 포인트를 통해 ListObjectsV2 API 작업을 수행할 s3:ListBucket 권한을 부여해요. 이 권한은 Akua가 example-access-point--usw2-az1--xa-s3와 연결된 버킷의 객체를 나열할 수 있게 해줘요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAkuaToListObjectsInTheBucketThroughAccessPoint",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Akua"
},
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3express:us-east-1:111122223333:accesspoint/example-access-point-usw2-az1-xa-s3"
}
]
}
참고 모든 버킷 작업이 디렉터리 버킷용 액세스 포인트에서 지원되는 것은 아니에요. 자세한 내용은 디렉터리 버킷용 액세스 포인트의 객체 작업을 참고하세요.
객체 작업
객체 작업은 객체 리소스 유형에 대해 작동하는 S3 API 작업이에요. 예를 들어 GetObject, PutObject, DeleteObject가 있어요. 객체 작업용 S3 정책 작업은 정책에서 Resource 요소가 다음 예시 형식의 S3 객체 ARN이어야 해요.
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*"
참고 객체 ARN은 이전 예시에서 볼 수 있듯이 버킷 이름 뒤에 슬래시를 포함해야 해요.
다음 버킷 정책은 계정 12345678901의 사용자 Akua에게 s3:PutObject 권한을 부여해요. 이 권한은 Akua가 PutObject API 작업을 사용해 amzn-s3-demo-bucket이라는 S3 버킷에 객체를 업로드할 수 있게 해줘요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Akua to upload objects",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Akua"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
액세스 포인트 정책의 객체 작업. S3 액세스 포인트를 사용해 객체 작업에 대한 액세스를 제어할 때는 액세스 포인트 정책을 사용할 수 있어요. 액세스 포인트 정책을 사용할 때 객체 작업용 S3 정책 작업은 Resource 요소에 다음 형식의 액세스 포인트 ARN을 사용해야 해요.
arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource
액세스 포인트를 사용하는 객체 작업의 경우 Resource 요소의 전체 액세스 포인트 ARN 뒤에 /object/ 값을 포함해야 해요. 다음은 몇 가지 예시예요.
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/*"
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/prefix/*"
다음 액세스 포인트 정책은 계정 12345678901의 사용자 Akua에게 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::111122223333:user/Akua"
},
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/example-access-point/object/*"
}
]
}
참고 모든 객체 작업이 액세스 포인트에서 지원되는 것은 아니에요. 자세한 내용은 S3 작업과 액세스 포인트 호환성을 참고하세요.
디렉터리 버킷용 액세스 포인트 정책의 객체 작업. 디렉터리 버킷용 액세스 포인트를 사용해 객체 작업에 대한 액세스를 제어할 때는 액세스 포인트 정책을 사용할 수 있어요. 액세스 포인트 정책을 사용할 때 객체 작업용 S3 정책 작업은 Resource 요소에 다음 형식의 액세스 포인트 ARN을 사용해야 해요.
arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource
액세스 포인트를 사용하는 객체 작업의 경우 Resource 요소의 전체 액세스 포인트 ARN 뒤에 /object/ 값을 포함해야 해요. 다음은 몇 가지 예시예요.
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/prefix/*"
다음 액세스 포인트 정책은 계정 12345678901의 사용자 Akua에게 example-access-point--usw2-az1--xa-s3라는 액세스 포인트를 통해 액세스 포인트와 연결된 버킷의 모든 객체에 대해 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": "s3express:CreateSession","s3:GetObject",
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
}
]
}
참고 모든 객체 작업이 디렉터리 버킷용 액세스 포인트에서 지원되는 것은 아니에요. 자세한 내용은 디렉터리 버킷용 액세스 포인트의 객체 작업을 참고하세요.
일반 목적 버킷용 액세스 포인트 작업
액세스 포인트 작업은 accesspoint 리소스 유형에 대해 작동하는 S3 API 작업이에요. 예를 들어 CreateAccessPoint, DeleteAccessPoint, GetAccessPointPolicy가 있어요. 액세스 포인트 작업용 S3 정책 작업은 버킷 정책이나 액세스 포인트 정책이 아닌 IAM ID 기반 정책에서만 사용할 수 있어요. 액세스 포인트 작업은 Resource 요소가 다음 예시 형식의 액세스 포인트 ARN이어야 해요.
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
다음 IAM ID 기반 정책은 example-access-point라는 S3 액세스 포인트에서 GetAccessPointPolicy API 작업을 수행할 s3:GetAccessPointPolicy 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPoint",
"Effect": "Allow",
"Action": [
"s3:GetAccessPointPolicy"
],
"Resource": "arn:aws:s3:*:123456789012:accesspoint/example-access-point"
}
]
}
액세스 포인트를 사용할 때 버킷 작업에 대한 액세스를 제어하려면 일반 목적 버킷용 액세스 포인트 정책의 버킷 작업을, 객체 작업에 대한 액세스를 제어하려면 액세스 포인트 정책의 객체 작업을 참고하세요. 액세스 포인트 정책 구성 방법에 대한 자세한 내용은 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
디렉터리 버킷용 액세스 포인트 작업
디렉터리 버킷용 액세스 포인트 작업은 accesspoint 리소스 유형에 대해 작동하는 S3 API 작업이에요. 예를 들어 CreateAccessPoint, DeleteAccessPoint, GetAccessPointPolicy가 있어요. 액세스 포인트 작업용 S3 정책 작업은 버킷 정책이나 액세스 포인트 정책이 아닌 IAM ID 기반 정책에서만 사용할 수 있어요. 디렉터리 버킷용 액세스 포인트 작업은 Resource 요소가 다음 예시 형식의 액세스 포인트 ARN이어야 해요.
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
다음 IAM ID 기반 정책은 example-access-point--usw2-az1--xa-s3라는 액세스 포인트에서 GetAccessPointPolicy API 작업을 수행할 s3express:GetAccessPointPolicy 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPointUsw2Az1XaS3",
"Effect": "Allow",
"Action": [
"s3express:CreateSession","s3express:GetAccessPointPolicy"
],
"Resource": "arn:aws:s3:*:111122223333:accesspoint/example-access-point"
}
]
}
다음 IAM ID 기반 정책은 디렉터리 버킷용 액세스 포인트를 만들 s3express:CreateAccessPoint 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Grant CreateAccessPoint.",
"Principal": "*",
"Action": "s3express:CreateSession",
"s3express:CreateAccessPoint""Effect": "Allow",
"Resource": "*"
}
]
}
다음 IAM ID 기반 정책은 디렉터리 버킷용 액세스 포인트에 대한 액세스 포인트 범위를 만들 s3express:PutAccessPointScope 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Grant PutAccessPointScope",
"Principal": "*",
"Action": "s3express:CreateSession",
"s3express:CreateAccessPoint",
"S3Express:PutAccessPointScope""Effect": "Allow",
"Resource": "*"
}
]
}
디렉터리 버킷용 액세스 포인트를 사용해 버킷 작업에 대한 액세스를 제어하려면 디렉터리 버킷용 액세스 포인트 정책의 버킷 작업을, 객체 작업에 대한 액세스를 제어하려면 디렉터리 버킷용 액세스 포인트 정책의 객체 작업을 참고하세요. 디렉터리 버킷용 액세스 포인트 정책 구성 방법에 대한 자세한 내용은 디렉터리 버킷용 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
Object Lambda 액세스 포인트 작업
Amazon S3 Object Lambda를 사용하면 Amazon S3 GET, LIST, HEAD 요청에 자체 코드를 추가해 데이터가 애플리케이션에 반환될 때 수정·처리할 수 있어요. 다른 액세스 포인트를 통해 요청하는 것과 동일한 방식으로 Object Lambda 액세스 포인트를 통해 요청할 수 있어요. 자세한 내용은 S3 Object Lambda로 객체 변환을 참고하세요.
Object Lambda 액세스 포인트 작업 정책 구성 방법에 대한 자세한 내용은 Object Lambda 액세스 포인트용 IAM 정책 구성을 참고하세요.
Multi-Region 액세스 포인트 작업
Multi-Region 액세스 포인트는 여러 AWS 리전에 있는 S3 버킷에서 요청을 처리하는 데 애플리케이션이 사용할 수 있는 글로벌 엔드포인트를 제공해요. Multi-Region 액세스 포인트를 사용해 단일 리전에서 사용되는 것과 동일한 아키텍처로 다중 리전 애플리케이션을 구축한 다음 전 세계 어디에서나 실행할 수 있어요. 자세한 내용은 Multi-Region 액세스 포인트로 다중 리전 트래픽 관리를 참고하세요.
Multi-Region 액세스 포인트 작업 정책 구성 방법에 대한 자세한 내용은 Multi-Region 액세스 포인트 정책 예시를 참고하세요.
일괄 작업
(Batch Operations) 작업은 job 리소스 유형에 대해 작동하는 S3 API 작업이에요. 예를 들어 DescribeJob과 CreateJob이 있어요. 작업용 S3 정책 작업은 버킷 정책이 아닌 IAM ID 기반 정책에서만 사용할 수 있어요. 또한 작업은 IAM ID 기반 정책에서 Resource 요소가 다음 예시 형식의 job ARN이어야 해요.
"Resource": "arn:aws:s3:*:123456789012:job/*"
다음 IAM ID 기반 정책은 example-job이라는 S3 Batch Operations 작업에서 DescribeJob API 작업을 수행할 s3:DescribeJob 권한을 부여해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowDescribingBatchOperationJob",
"Effect": "Allow",
"Action": [
"s3:DescribeJob"
],
"Resource": "arn:aws:s3:*:111122223333:job/example-job"
}
]
}
S3 Storage Lens 구성 작업
S3 Storage Lens 구성 작업 구성 방법에 대한 자세한 내용은 Amazon S3 Storage Lens 권한 설정을 참고하세요.
계정 작업
계정 작업은 계정 수준에서 작동하는 S3 API 작업이에요. 예를 들어 GetPublicAccessBlock(계정용)이 있어요. 계정은 Amazon S3가 정의한 리소스 유형이 아니에요. 계정 작업용 S3 정책 작업은 버킷 정책이 아닌 IAM ID 기반 정책에서만 사용할 수 있어요. 또한 계정 작업은 IAM ID 기반 정책에서 Resource 요소가 "*"이어야 해요.
다음 IAM ID 기반 정책은 s3:GetAccountPublicAccessBlock 권한을 부여해 계정 수준 GetPublicAccessBlock API 작업을 수행하고 계정 수준 공개 액세스 차단 설정을 검색해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRetrievingTheAccountLevelPublicAccessBlockSettings",
"Effect": "Allow",
"Action": [
"s3:GetAccountPublicAccessBlock"
],
"Resource": [
"*"
]
}
]
}
Amazon S3 정책 예시
Amazon S3 ID 기반 정책 예시는 Amazon S3용 ID 기반 정책을 참고하세요. Amazon S3 리소스 기반 정책 예시는 Amazon S3용 버킷 정책과 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
Amazon S3용 정책 리소스
정책 리소스 지원: 예
관리자는 AWS JSON 정책을 사용해 누가 무엇에 액세스할 수 있는지, 즉 어떤 보안 주체가 어떤 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 지정할 수 있어요.
JSON 정책의 Resource 요소는 작업이 적용되는 객체를 지정해요. 모범 사례로, 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가 정의한 작업을 참고하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Amazon S3 API 작업에 필요한 권한을 참고하세요.
리소스 ARN의 와일드카드 문자
리소스 ARN의 일부로 와일드카드 문자를 사용할 수 있어요. 모든 ARN 세그먼트(콜론으로 구분된 부분) 내에서 와일드카드 문자(*와 ?)를 사용할 수 있어요. 별표(*)는 0개 이상의 문자 조합을 나타내고 물음표(?)는 단일 문자를 나타내요. 각 세그먼트에서 여러 * 또는 ? 문자를 사용할 수 있어요. 하지만 와일드카드 문자는 세그먼트를 가로지를 수 없어요.
다음 ARN은 ARN의 relative-ID 부분에서 * 와일드카드 문자를 사용해 amzn-s3-demo-bucket 버킷의 모든 객체를 식별해요.
arn:aws:s3:::amzn-s3-demo-bucket/*
다음 ARN은 *를 사용해 모든 S3 버킷과 객체를 나타내요.
arn:aws:s3:::*
다음 ARN은 relative-ID 부분에서 두 와일드카드 문자 *와 ?를 모두 사용해요. 이 ARN은 amzn-s3-demo-example1bucket, amzn-s3-demo-example2bucket, amzn-s3-demo-example3bucket 같은 버킷의 모든 객체를 식별해요.
arn:aws:s3:::amzn-s3-demo-example?bucket/*
리소스 ARN의 정책 변수
Amazon S3 ARN에서 정책 변수를 사용할 수 있어요. 정책 평가 시 이러한 미리 정의된 변수는 해당 값으로 대체돼요. 버킷을 사용자마다 하나씩 폴더 모음으로 구성한다고 가정해 보세요. 폴더 이름은 사용자 이름과 같아요. 사용자에게 자체 폴더 권한을 부여하려면 리소스 ARN에 정책 변수를 지정할 수 있어요.
arn:aws:s3:::bucket_name/developers/${aws:username}/
런타임에 정책이 평가되면 리소스 ARN의 ${aws:username} 변수가 요청하는 사람의 사용자 이름으로 대체돼요.
Amazon S3 정책 예시
Amazon S3 ID 기반 정책 예시는 Amazon S3용 ID 기반 정책을 참고하세요. Amazon S3 리소스 기반 정책 예시는 Amazon S3용 버킷 정책과 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
Amazon S3용 정책 조건 키
서비스 특정 정책 조건 키 지원: 예
관리자는 AWS JSON 정책을 사용해 누가 무엇에 액세스할 수 있는지, 즉 어떤 보안 주체가 어떤 리소스에서 어떤 조건으로 어떤 작업을 수행할 수 있는지 지정할 수 있어요.
Condition 요소는 정의된 기준에 따라 언제 문이 실행되는지 지정해요. 정책의 조건을 요청의 값과 매칭하기 위해 같음 또는 작음 같은 조건 연산자를 사용하는 조건식을 만들 수 있어요. 모든 AWS 글로벌 조건 키는 IAM 사용자 가이드의 AWS 글로벌 조건 컨텍스트 키를 참고하세요.
각 Amazon S3 조건 키는 조건이 설정될 수 있는 API가 허용하는 같은 이름의 요청 헤더에 매핑돼요. Amazon S3 특정 조건 키는 같은 이름의 요청 헤더의 동작을 규정해요. 예를 들어 s3:GetObjectVersion 권한에 조건부 권한을 부여하는 데 사용되는 s3:VersionId 조건 키는 GET Object 요청에 설정하는 versionId 쿼리 파라미터의 동작을 정의해요.
Amazon S3 조건 키 목록은 서비스 권한 부여 참조의 Amazon S3 조건 키를 참고하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 Amazon S3가 정의한 작업을 참고하세요.
예시: 특정 스토리지 클래스의 객체로 객체 업로드 제한
계정 ID 123456789012로 표시되는 계정 A가 버킷을 소유한다고 가정해 보세요. 계정 A의 관리자는 계정 A의 사용자인 Dave가 객체가 STANDARD_IA 스토리지 클래스에 저장된 경우에만 버킷에 객체를 업로드할 수 있도록 제한하려고 해요. 객체 업로드를 특정 스토리지 클래스로 제한하려면 계정 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:::amzn-s3-demo-bucket1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-storage-class": [
"STANDARD_IA"
]
}
}
}
]
}
예시에서 Condition 블록은 지정된 키-값 쌍 "s3:x-amz-storage-class":["STANDARD_IA"]에 적용되는 StringEquals 조건을 지정해요. 조건을 표현할 때 사용할 수 있는 사전 정의된 키 집합이 있어요. 예시는 s3:x-amz-storage-class 조건 키를 사용해요. 이 조건은 사용자가 모든 PutObject 요청에 값 STANDARD_IA가 있는 x-amz-storage-class 헤더를 포함하도록 요구해요.
Amazon S3 정책 예시
Amazon S3 ID 기반 정책 예시는 Amazon S3용 ID 기반 정책을 참고하세요. Amazon S3 리소스 기반 정책 예시는 Amazon S3용 버킷 정책과 액세스 포인트 사용을 위한 IAM 정책 구성을 참고하세요.
Amazon S3의 ACL
ACL 지원: 예
Amazon S3에서 액세스 제어 목록(ACL)은 어떤 AWS 계정이 리소스에 액세스할 권한이 있는지 제어해요. ACL은 JSON 정책 문서 형식을 사용하지 않는다는 점을 제외하면 리소스 기반 정책과 유사해요.
중요 Amazon S3의 대부분의 현대적 사용 사례는 더 이상 ACL을 사용할 필요가 없어요.
Amazon S3에서 ACL로 액세스를 제어하는 방법에 대한 정보는 ACL로 액세스 관리를 참고하세요.
Amazon S3와 함께 ABAC 사용
ABAC(정책의 태그) 지원: 부분적
속성 기반 액세스 제어(ABAC)는 태그라고 하는 속성을 기반으로 권한을 정의하는 권한 부여 전략이에요. IAM 엔터티와 AWS 리소스에 태그를 연결한 다음 보안 주체의 태그가 리소스의 태그와 일치할 때 작업을 허용하도록 ABAC 정책을 설계할 수 있어요.
태그 기반으로 액세스를 제어하려면 정책의 조건 요소에 aws:ResourceTag/key-name, aws:RequestTag/key-name 또는 aws:TagKeys 조건 키를 사용해 태그 정보를 제공하세요.
서비스가 모든 리소스 유형에 대해 세 가지 조건 키를 모두 지원하면 값은 예이고, 일부 리소스 유형에 대해서만 세 가지 조건 키를 모두 지원하면 값은 부분적이에요.
ABAC에 대한 자세한 내용은 IAM 사용자 가이드의 ABAC 권한 부여로 권한 정의를 참고하세요. ABAC 설정 단계가 포함된 튜토리얼을 보려면 IAM 사용자 가이드의 속성 기반 액세스 제어(ABAC) 사용을 참고하세요.
Amazon S3에서 ABAC를 지원하는 리소스에 대한 정보는 속성 기반 액세스 제어(ABAC)를 위한 태그 사용을 참고하세요.
태그를 기반으로 S3 Batch Operations 작업에 대한 액세스를 제한하는 ID 기반 정책 예시는 작업 태그로 Batch Operations 권한 제어를 참고하세요.
ABAC와 객체 태그
ABAC 정책에서 객체는 aws: 태그 대신 s3: 태그를 사용해요. 객체 태그를 기반으로 객체에 대한 액세스를 제어하려면 다음 태그를 사용해 정책의 Condition 요소에 태그 정보를 제공하세요.
s3:ExistingObjectTag/tag-keys3:RequestObjectTagKeyss3:RequestObjectTag/tag-key
객체 태그를 사용해 액세스를 제어하는 방법(권한 정책 예시 포함)은 태그 및 액세스 제어 정책을 참고하세요.
Amazon S3와 함께 임시 자격 증명 사용
임시 자격 증명 지원: 예
임시 자격 증명은 AWS 리소스에 대한 단기 액세스를 제공하며 페더레이션을 사용하거나 역할을 전환할 때 자동으로 생성돼요. AWS는 장기 액세스 키 대신 임시 자격 증명을 동적으로 생성할 것을 권장해요. 자세한 내용은 IAM 사용자 가이드의 IAM의 임시 보안 자격 증명과 IAM과 함께 작동하는 AWS 서비스를 참고하세요.
Amazon S3용 전달 액세스 세션
전달 액세스 세션(FAS) 지원: 예
전달 액세스 세션(FAS)은 AWS 서비스를 호출하는 보안 주체의 권한을 요청하는 AWS 서비스와 결합해 다운스트림 서비스에 요청하는 데 사용해요. FAS 요청 시 정책 세부 정보는 전달 액세스 세션을 참고하세요.
Amazon S3는 SSE-KMS로 객체를 암호화할 때 객체를 복호화하기 위해 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 Storage Lens용 서비스 연결 역할 사용을 참고하세요.
Amazon S3 서비스를 보안 주체로
| 정책의 서비스 이름 | S3 기능 | 자세한 내용 |
|---|---|---|
s3.amazonaws.com |
S3 복제 | 라이브 복제 설정 개요 |
s3.amazonaws.com |
S3 이벤트 알림 | Amazon S3 이벤트 알림 |
s3.amazonaws.com |
S3 인벤토리 | S3 인벤토리로 데이터 카탈로그 생성 및 분석 |
access-grants.s3.amazonaws.com |
S3 Access Grants | 위치 등록 |
batchoperations.s3.amazonaws.com |
S3 Batch Operations | Batch Operations 권한 부여 |
logging.s3.amazonaws.com |
S3 서버 액세스 로깅 | Amazon S3 서버 액세스 로깅 활성화 |
storage-lens.s3.amazonaws.com |
S3 Storage Lens | 데이터 내보내기를 사용한 Amazon S3 Storage Lens 메트릭 보기 |