我希望我的 S3 存储桶只存储使用我的 KMS 密钥加密的对象。我该如何操作?

2 分钟阅读
0

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

简短描述

使用 Amazon S3 默认加密来确保在没有加密标头的情况下上传的对象先通过 AWS KMS 加密,然后再存储到您的 S3 存储桶中。加密标头是诸如 x-amz-server-side-encryptionx-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:

  1. 打开 Amazon S3 控制台
  2. 选择要用于通过 AWS KMS 加密的对象的存储桶。
  3. 选择 Properties(属性)视图。
  4. 选择 Default encryption(默认加密),然后选择 AWS-KMS
  5. AWS KMS key(AWS KMS 密钥)下,选择您的 AWS KMS 密钥。
  6. Bucket Key(存储桶密钥)下,选择 Enable(启用)。此设置让您可以使用 Amazon S3 存储桶密钥。
  7. 选择 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 的请求:

  1. 打开 Amazon S3 控制台
  2. 选择要用于通过 AWS KMS 加密的对象的存储桶。
  3. 选择 Permissions(权限)视图。
  4. 选择 Bucket Policy(存储桶策略)。
  5. 输入类似于以下的存储桶策略:
    **注意:**将 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-encryptionx-amz-server-side-encryption-aws-kms-key-id。有关更多信息,请参阅请求语法


相关信息

Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS

通过 Amazon S3 存储桶密钥降低 SSE-KMS 成本

AWS 官方
AWS 官方已更新 1 年前