我想使用 AWS Key Management Service (AWS KMS)密钥加密 Amazon Simple Storage Service (Amazon S3)桶中的特定文件夹。
解决方法
使用 Amazon S3 控制台
- 打开 Amazon S3 控制台。
- 导航到要加密的文件夹。
**警告:**如果您的文件夹包含大量对象,则可能会遇到限制错误。为避免出现限制错误,请提高您对 Amazon S3 桶的 Amazon S3 请求限制。有关限制错误的更多疑难解答提示,请参阅为什么我在向 AWS KMS 发出请求时收到 ThrottlingExceptions 错误?
- 选择文件夹,然后选择操作。
- 选择编辑服务器端加密。
- 要启用服务器端加密,请选择启用。
- 对于您的 AWS Key Management Service(SSE-KMS),请选择加密密钥类型。
- 选择要用于文件夹加密的 AWS KMS 密钥。
**注意:**名为 aws/s3 的密钥是 AWS KMS 管理的默认密钥。您可以使用默认密钥或自定义密钥加密文件夹。
- 选择保存更改。
使用 AWS CLI
您无法通过 AWS 命令行界面(AWS CLI)命令更改现有文件夹的加密。而是在开启 AWS KMS 加密的情况下,运行命令将文件夹覆盖自身。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
要使用默认 AWS KMS 密钥(aws/s3)加密文件,请运行以下命令:
aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms
此命令语法使用 AWS KMS 加密将文件夹复制到原处。
要使用自定义 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
}
}
}
]
}
除非请求包含使用 AWS KMS 进行服务器端加密,否则此桶策略拒绝访问 docexamplebucket/docexamplefolder/* 上的 s3:PutObject。
相关信息
指定具有 AWS KMS 密钥的服务器端加密(SSE-KMS)