我希望我的 Amazon Simple Storage Service (Amazon S3) 存储桶仅存储使用我的 AWS 账户中的 AWS Key Management Service (AWS KMS) 密钥加密的对象。我怎样才能确保只有那些对象可以上传到我的存储桶?
简短描述
使用 Amazon S3 默认加密来确保在没有加密标头的情况下上传的对象先通过 AWS KMS 加密,然后再存储到您的 S3 存储桶中。加密标头是诸如 x-amz-server-side-encryption 和 x-amz-server-side-encryption-aws-kms-key-id 之类的标头。然后,使用存储桶策略来确保使用 AWS KMS 和您 AWS 账户中的 AWS KMS 密钥 ID 对上传的对象进行加密。
注意: 要上传使用 AWS KMS 密钥加密的对象,密钥和 S3 存储桶必须在同一 AWS 区域中。
解决方法
Amazon S3 默认加密
按照以下步骤,使用 Amazon S3 控制台将存储桶的 Amazon S3 默认加密设置为 AWS KMS:
- 打开 Amazon S3 控制台。
- 选择要用于通过 AWS KMS 加密的对象的存储桶。
- 选择 Properties(属性)视图。
- 选择 Default encryption(默认加密),然后选择 AWS-KMS。
- 在 AWS KMS key(AWS KMS 密钥)下,选择您的 AWS KMS 密钥。
- 在Bucket Key(存储桶密钥)下,选择 Enable(启用)。此设置让您可以使用 Amazon S3 存储桶密钥。
- 选择 Save(保存)。
**注意:**要通过 REST API、AWS Command Line Interface (AWS CLI) 或 AWS 开发工具包开启 Simple Storage Service (Amazon S3) 默认加密,请参阅开启 Simple Storage Service (Amazon S3) 默认存储桶加密。
存储桶策略
按照以下步骤来配置您的存储桶策略以拒绝使用其他加密设置 (AES-256) 的上传请求。或者,使用 AWS KMS 加密但包含并非来自您 AWS 账户的密钥 ID 的请求:
- 打开 Amazon S3 控制台。
- 选择要用于通过 AWS KMS 加密的对象的存储桶。
- 选择 Permissions(权限)视图。
- 选择 Bucket Policy(存储桶策略)。
- 输入类似于以下的存储桶策略:
**注意:**将 bucketname 替换为您存储桶的名称。将 us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab 替换为您的 AWS 区域、AWS 账户 ID 和 AWS KMS 密钥 ID。
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "RequireKMSEncryption",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucketname/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "RequireSpecificKMSKey",
"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/1234abcd-12ab-34cd-56ef-1234567890ab"
}
}
}
]
}
将此存储桶策略添加到 S3 存储桶后,在将对象上传到 S3 存储桶时,必须包含标头 x-amz-server-side-encryption 和 x-amz-server-side-encryption-aws-kms-key-id。有关更多信息,请参阅请求语法。
相关信息
Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS
通过 Amazon S3 存储桶密钥降低 SSE-KMS 成本