我希望我的 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)的情况下上传的对象先通过 AWS KMS 加密,然后再存储到您的 S3 存储桶中。然后,使用存储桶策略确保无法上传具有其他加密设置 (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 开发工具包启用 Amazon S3 默认加密,请参阅如何为 S3 存储桶设置 Amazon S3 默认加密?

存储桶策略

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

  1. 打开 Amazon S3 控制台
  2. 选择要用于通过 AWS KMS 加密的对象的存储桶。
  3. 选择路由视图。
  4. 选择存储桶策略
  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/*"
                }
            }
        }
    ]
}

此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 08 月 03 日

更新时间:2018 年 8 月 31 日