我从 Amazon S3 桶下载或复制对象时,为什么会出现错误“The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access”(加密文字指的是不存在、此区域不存在或者您无权访问的客户主密钥)?

2 分钟阅读
0

当我尝试在 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"
    ]
  }
}
  • 确保 AWS KMS 策略具有所需的权限。示例:
{
  "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 密钥?

AWS 官方
AWS 官方已更新 1 年前
没有评论

相关内容