如何使用 AWS KMS 加密 Amazon S3 存储桶中的特定文件夹?

上次更新时间:2019 年 6 月 20 日

我想使用 AWS Key Management Service (AWS KMS) 密钥加密 Amazon Simple Storage Service (Amazon S3) 存储桶中的特定文件夹。该如何操作? 

解决方法

使用 Amazon S3 控制台对文件夹进行加密

  1. 打开 Amazon S3 控制台
  2. 导航到您要加密的文件夹。
  3. 选择文件夹,然后选择操作
  4. 选择更改加密
  5. 对于更改加密,选择 AWS-KMS
  6. 对于选择密钥,选择要用于加密该文件夹的 AWS KMS 密钥。
    注意:名为 aws/s3 的密钥是由 AWS KMS 管理的默认密钥。您可以使用默认密钥或自定义密钥对文件夹进行加密。
  7. 选择保存

使用 AWS 命令行界面 (AWS CLI) 加密文件夹

注意:您不能使用 AWS CLI 命令更改现有文件夹的加密。而是,可以通过运行 AWS CLI 命令,在启用 AWS KMS 加密的情况下复制文件夹覆盖自身。

要使用默认 AWS KMS 密钥 (aws/s3) 对文件进行加密,请运行以下命令,通过 AWS KMS 加密复制文件夹覆盖自身:

aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms

要使用自定义 AWS KMS 密钥对文件进行加密,请运行以下命令。请务必将密钥的 ID 指定为 --sse-kms-key-id 的值:

aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms --sse-kms-key-id a1b2c3d4-e5f6-7890-g1h2-123456789abc

要求以后的上传使用 AWS KMS 加密对象

更改加密后,系统仅对文件夹中已包含的对象进行加密。更改加密后添加到文件夹的对象可以在不加密的情况下上传。您可以使用存储桶策略要求以后的上传使用 AWS KMS 加密的对象。

例如,以下存储桶策略将拒绝访问 awsexamplebucket/awsexamplefolder/* 上的 s3:PutObject,除非请求包含使用 AWS KMS 进行的服务器端加密:

{
  "Version": "2012-10-17",
  "Id": "PutObjPolicy",
  "Statement": [
    {
      "Sid": "DenyIncorrectEncryptionHeader",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::awsexamplebucket/awsexamplefolder/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "aws:kms"
        }
      }
    },
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::awsexamplebucket/awsexamplefolder/*",
      "Condition": {
        "Null": {
          "s3:x-amz-server-side-encryption": true
        }
      }
    }
  ]
}

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?