跳至内容

如何将我的 S3 存储桶配置为仅存储由我的 KMS 密钥加密的对象?

2 分钟阅读
0

我希望我的 Amazon Simple Storage Service (Amazon S3) 存储桶仅存储由我的 AWS 账户中的 AWS Key Management Service (AWS KMS) 密钥加密的对象。我怎样才能确保只有这些对象可以上传到我的存储桶?

简短描述

使用 Amazon S3 默认加密确保无加密标头(例如 x-amz-server-side-encryption 和 x-amz-server-side-encryption-aws-kms-key-id)的上传对象在存储在 S3 存储桶中之前由 AWS KMS 进行加密。然后,使用存储桶策略确保不能上传具有其他加密设置 (AES-256) 的对象,并且使用 AWS KMS 加密的上传对象必须包含来自您的 AWS 账户的密钥 ID。

**注意:**要上传由 AWS KMS 密钥加密的对象,密钥和 S3 存储桶必须位于同一 AWS 区域中。

解决方法

Amazon S3 默认加密

按照以下步骤,使用 Amazon S3 控制台将存储桶的 Amazon S3 默认加密设置为 AWS KMS:

  1. 打开 Amazon S3 控制台
  2. 选择要用于由 AWS KMS 加密的对象的存储桶。
  3. 选择 Properties(属性)视图。
  4. 选择 Default encryption(默认加密),然后选择 AWS-KMS
  5. 选择 Save(保存)。

**注意:**要使用 REST API、AWS 命令行界面 (AWS CLI) 或 AWS SDK 启用 Amazon S3 默认加密,请参阅配置默认加密

存储桶策略

按照以下步骤配置您的存储桶策略,以拒绝使用其他加密设置 (AES-256) 或使用 AWS KMS 加密但包含非您的 AWS 账户的密钥 ID 的上传请求:

  1. 打开 Amazon S3 控制台
  2. 选择要用于由 AWS KMS 加密的对象的存储桶。
  3. 选择 Permissions(权限)视图。
  4. 选择 Bucket Policy(存储桶策略)。
  5. 输入与以下内容类似的存储桶策略:
    **注意:**将 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

AWS 官方已更新 2 年前