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

上次更新日期:2021 年 11 月 1 日

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

解决方法

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

1.    打开 Amazon S3 控制台

2.    导航到您要加密的文件夹。

警告:如果您的文件夹包含大量对象,则可能会遇到调节错误。为避免限制错误,请考虑增加 Amazon S3 存储桶上的 Amazon S3 请求限制。有关排查调节错误问题的更多提示,请参阅向 AWS KMS 发出请求时为什么我会收到 ThrottlingExceptions 错误?

3.    选择文件夹,然后选择 Actions(操作)。

4.    选择 Edit server-side encryption(编辑服务器端加密)。

5.    为 Enabling Server-side encryption(启用服务器端加密)选择 Enable(启用)。

6.    为您的 AWS Key Management Service 密钥 (SSE-KMS) 选择加密密钥类型

7.    选择要用于文件夹加密的 AWS KMS 密钥。

注意:名为 aws/s3 的密钥是由 AWS KMS 管理的默认密钥。您可以使用默认密钥或自定义密钥对文件夹进行加密。

8.    选择 Save changes(保存更改)。

使用 AWS CLI 加密文件夹

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

要使用默认的 AWS KMS 密钥 (aws/s3) 加密文件,请运行以下命令:

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

此命令语法使用 AWS KMS 加密将文件夹复制到自身。

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

要使用自定义 AWS KMS 密钥对文件进行加密,请运行以下命令:

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

确保为 --sse-kms-key-id 指定您自己的密钥 ID。

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

更改加密后,系统仅对文件夹中已包含的对象进行加密。更改加密后添加到文件夹的对象可以在不加密的情况下上传。您可以使用存储桶策略要求以后的上传使用 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
        }
      }
    }
  ]
}

此存储桶策略将拒绝访问 docexamplebucket/docexamplefolder/* 上的 s3:PutObject,除非请求包含使用 AWS KMS 进行的服务器端加密。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?