如何使用 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 进行的服务器端加密。