고객 관리형 AWS Key Management Service(AWS KMS) 키로 기본 암호화를 사용하도록 Amazon Simple Storage Service(Amazon S3) 버킷을 설정했습니다. AWS Identity and Access Management(IAM) 사용자가 버킷에서 객체를 다운로드하고 버킷에 객체를 업로드할 수 있도록 허용하고 싶습니다.
해결 방법
먼저 AWS KMS 키 정책을 수정합니다. 그런 다음, IAM 사용자의 ID 기반 정책을 수정합니다. IAM 사용자가 S3 버킷과 다른 계정에 있는 경우 버킷 정책도 수정해야 합니다.
키 정책 수정
다음 단계를 완료하십시오.
-
AWS KMS 콘솔을 엽니다.
-
탐색 창에서 고객 관리형 키를 선택한 다음, 키 목록에서 키를 선택합니다.
-
키 정책 탭을 선택하여 정책 문서를 확인합니다.
참고: AWS KMS 콘솔을 사용하여 고객 관리형 키를 만든 경우 정책 문서를 보려면 키 정책 탭에서 정책 보기로 전환을 선택해야 합니다.
-
편집을 선택한 다음, 키 정책에 다음 명령문을 추가하여 kms:GenerateDataKey 및 kms:Decrypt 권한을 부여합니다.
{
"Sid": "ExampleStmt",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Jane"
},
"Resource": "*"
}
참고: 위의 예제 정책 문에는 객체를 다운로드하고 암호화된 S3 버킷에 업로드하는 데 필요한 최소 권한만 포함되어 있습니다. 사용 사례에 따라 더 많은 권한을 추가할 수 있습니다.
동일한 계정 액세스에 대한 ID 기반 정책 수정
다음 단계를 완료하십시오.
-
IAM 콘솔을 엽니다.
-
사용자가 버킷에서 객체를 업로드하고 다운로드할 수 있도록 IAM 사용자에게 다음 정책을 연결합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
참고: Resource 값을 버킷의 Amazon 리소스 이름(ARN)으로 바꿉니다. 와일드카드(*)는 버킷의 객체를 나타냅니다.
중요: 버킷 정책의 명시적 Deny 문은 ID 기반 정책이 부여하는 권한을 차단합니다. 버킷 정책을 검토하여 ID 기반 정책과 충돌하는 명시적 Deny 문이 없는지 확인하십시오.
교차 계정 액세스를 위한 ID 기반 정책 및 버킷 정책 수정
중요: 고객 관리형 키에는 교차 계정 액세스 권한을 부여할 수 있지만 AWS 관리형 키에는 부여할 수 없습니다. AWS 관리형 키의 키 정책은 수정할 수 없습니다.
다음 단계를 완료하십시오.
-
IAM 사용자 계정에서 IAM 콘솔을 엽니다.
-
사용자가 객체를 업로드 및 다운로드하고 AWS KMS 키를 사용할 수 있도록 IAM 사용자에게 다음 정책을 연결합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DownloadandUpload",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
},
{
"Sid": "ListBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": "KMSAccess",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}
]
}
참고: Resource 값을 버킷의 ARN과 AWS KMS 키로 바꿉니다. 와일드카드(*)는 버킷의 객체를 나타냅니다.
-
S3 버킷을 소유한 계정에서 Amazon S3 콘솔을 엽니다.
-
버킷 정책에 다음 명령문을 추가하여 IAM 사용자에게 버킷에 대한 액세스 권한을 부여합니다.
{
"Id": "Policy1584399307003",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DownloadandUpload",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/Jane"
]
}
},
{
"Sid": "ListBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/Jane"
]
}
}
]
}
참고: Id를 버킷 정책의 ID로, Principal 값을 IAM 사용자의 ARN으로, Resource 값을 버킷의 ARN으로 바꿉니다.
교차 계정 액세스에 필요한 최소 권한 외에도 s3:PutObjectAcl 권한을 부여하여 IAM 사용자가 객체에 대한 액세스 제어 목록(ACL)을 설정할 수 있습니다. 그런 다음, bucket-owner-full-control이라는 미리 준비된 ACL을 버킷 계정에 부여합니다. S3 디렉터리 또는 접두사를 동기화하고 버킷 간에 객체를 복사하는 데 필요한 s3:ListBucket 권한을 부여할 수도 있습니다.
관련 정보
키 사용 및 사용 안 함
AWS KMS에서 IAM 정책 사용
Amazon S3 버킷 객체에 대한 읽기 및 쓰기 액세스 권한 부여
모든 새 버킷에 ACL 사용 안 함 및 객체 소유권 적용