上次更新时间:2020 年 11 月 10 日
我希望下载存储在 Amazon Simple Storage Service (Amazon S3) 上的对象并使用 AWS Key Management Service 托管密钥 (SSE-KMS) 进行服务器端加密。我是否需要指定 AWS KMS 密钥以从存储桶下载这些对象?
解决方案从 S3 存储桶下载使用 SSE-KMS 加密的对象时,您不需要指定 AWS KMS 密钥 ID。但您需要拥有解密 AWS KMS 密钥的权限。
当用户发出 GET 请求时,Amazon S3 将检查发送请求的 AWS Identity and Access Management (IAM) 用户或角色是否已获得解密对象所关联密钥的权限。如果 IAM 用户或角色与密钥属于同一 AWS 账户,则必须在 AWS KMS 密钥策略中授予解密权限。
注意:如果 IAM 用户或角色和 KMS 密钥在同一账户中,则您还可以使用 IAM 策略控制对密钥的访问。但是,您必须修改密钥策略才能明确启用 IAM 策略以允许访问密钥。有关更多信息,请参阅在 AWS KMS 中使用 IAM 策略。
如果 IAM 用户或角色与密钥分属于不同的账户,则必须在 IAM 用户策略和密钥策略中都属于解密权限。
以下示例 IAM 策略允许用户解密 AWS KMS 密钥并从 S3 存储桶下载:
{
"Version": "2012-10-17",
"Statement": ,
"Resource":
}
]
}
以下示例密钥策略语句允许用户对密钥解密:
{
"Sid": "Allow decryption of the key",
"Effect": "Allow",
"Principal": {
"AWS":
},
"Action": ,
"Resource": "*"
}
重要提示:如果 IAM 用户或角色与存储桶分属于不同的账户,请务必确保存储桶策略也向用户授予了对象的访问权限。例如,如果用户需要从存储桶下载,则存储桶策略必须授予用户执行 s3:GetObject 操作的权限。
在您获得对密钥进行解密的权限后,您可以使用与以下类似的 AWS 命令行界面 (AWS CLI) 命令,下载已使用密钥加密的 S3 对象:
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key dir/example-object-name example-object-name
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。