Amazon Simple Storage Service(Amazon S3) 버킷에 AWS 계정의 AWS Key Management Service(AWS KMS) 키를 사용하여 암호화된 객체만 저장하려고 합니다. 내 버킷에 해당 객체만 업로드할 수 있도록 하려면 어떻게 해야 합니까?
간략한 설명
암호화 헤더 없이 업로드된 객체(예: x-amz-server-side-encryption 및 x-amz-server-side-encryption-aws-kms-key-id)가 S3 버킷에 저장되기 전에 AWS KMS에 의해 암호화되도록 Amazon S3 기본 암호화를 사용하십시오. 그런 다음 다른 암호화 설정(AES-256)을 사용하는 객체를 업로드할 수 없도록 하고, AWS KMS 암호화를 사용하여 업로드된 객체에 AWS 계정의 키 ID가 포함되도록 하는 버킷 정책을 사용합니다.
참고: AWS KMS 키를 사용하여 암호화된 객체를 업로드하려면 키와 S3 버킷이 동일한 AWS 리전에 있어야 합니다.
해결 방법
Amazon S3 기본 암호화
Amazon S3 콘솔을 사용하여 버킷의 Amazon S3 기본 암호화를 AWS KMS로 설정하려면 다음 단계를 따르십시오.
- Amazon S3 콘솔을 엽니다.
- AWS KMS를 사용하여 암호화된 객체에 사용할 버킷을 선택합니다.
- 속성 보기를 선택합니다.
- 기본 암호화를 선택한 다음 AWS-KMS를 선택합니다.
- 저장을 선택합니다.
참고: REST API, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하여 Amazon S3 기본 암호화를 사용하도록 설정하려면 기본 암호화 구성을 참조하십시오.
버킷 정책
다음 단계에 따라 다른 암호화 설정(AES-256)을 사용하거나 AWS KMS 암호화를 사용하지만 AWS 계정에서 가져오지 않은 키 ID를 포함하는 업로드 요청을 거부하는 버킷 정책을 구성하십시오.
- Amazon S3 콘솔을 엽니다.
- AWS KMS를 사용하여 암호화된 객체에 사용할 버킷을 선택합니다.
- 권한 보기를 선택합니다.
- 버킷 정책을 선택합니다.
- 다음과 비슷한 버킷 정책을 입력합니다.
참고: samplebucketname을 버킷 이름으로 바꾸고 us-east-1:111122223333을 올바른 AWS 리전과 AWS 계정 ID로 바꾸십시오.
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenySSE-S3",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "RequireKMSEncryption",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringNotLikeIfExists": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
}
}
}
]
}
관련 정보
Amazon Simple Storage Service(Amazon S3)에서 AWS KMS를 사용하는 방법