当我尝试在 Amazon Simple Storage Service(Amazon S3)桶中下载或复制对象时,出现以下错误: 加密文字指的是不存在、此区域不存在或者您无权访问的客户主密钥。
解决方法
当以下两个条件都成立时,就会出现此错误:
- 存储在您向其发出请求的桶中的对象使用 AWS Key Management Service(AWS KMS)密钥加密。
- 发出请求的 AWS Identity and Access Management(IAM)角色或用户没有足够的权限访问用于加密对象的 AWS KMS 密钥。
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
您可以使用 AWS CLI 命令 head-object 检查对象的加密情况:
aws s3api head-object --bucket my-bucket --key my-object
请务必在前面的命令中执行以下操作:
- 将 my-bucket 替换为您的桶的名称。
- 将 my-object 替换为您的对象的名称。
此命令的输出如下所示:
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "null",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"ServerSideEncryption": "aws:kms",
"Metadata": {},
"SSEKMSKeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"BucketKeyEnabled": true
}
输出中的 SSEKMSKeyId 字段指定了用于加密对象的 AWS KMS 密钥。
要解决此错误,请执行以下任一操作:
- 确保附加到 IAM 用户或角色的策略具有所需的权限。示例:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
]
}
}
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AWS-account-ID:user/user-name-1"
},
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
}
如果 IAM 用户或角色和 AWS KMS 密钥来自不同的 AWS 账户,请确保满足以下条件:
- 附加到 IAM 实体的策略具有所需的 AWS KMS 权限。
- AWS KMS 密钥策略向 IAM 实体授予所需的权限。
**重要事项:**因为 AWS 托管式密钥策略无法修改,您不能在跨账户用例中使用 AWS 托管式密钥。
要获取有关 AWS KMS 密钥的详细信息,请运行 describe-key 命令:
aws kms describe-key --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
您还可以使用 AWS KMS 控制台查看有关 AWS KMS 密钥的详细信息。
**注意:**确保启用了用于加密对象的 AWS KMS 密钥。
相关信息
我的 Amazon S3 桶使用自定义 AWS KMS 密钥进行默认加密。如何允许用户在桶中上传和下载内容?
当我从 Amazon S3 下载 KMS 加密的对象时,我是否需要指定 AWS KMS 密钥?