我尝试上传经过 AWS KMS 密钥加密的大型文件到 Amazon S3。为什么上传失败?

上次更新时间:2020 年 6 月 18 日

我尝试将大型文件上传到我的 Amazon Simple Storage Service(Amazon S3)存储桶。在我的上传请求中,我使用 AWS Key Management Service(AWS KMS)密钥进行加密。但遇到拒绝访问错误。但上传带有加密信息的较小文件时,却上传成功。如何修复此问题?

简短描述

确认您有权对用于加密对象的 AWS KMS 密钥执行 kms:Decrypt 操作。

当文件很大时,AWS CLI(aws s3 命令)、AWS 开发工具包和许多第三方程序会自动执行分段上传。要通过使用 AWS KMS 密钥的加密执行分段上传,请求者必须拥有启动上传的 kms:GenerateDataKey 权限和上传对象分段的 kms:Decrypt 权限。请求者必须拥有 kms:Decrypt 权限,以便使用之前的相同对象的分段所用的相同密钥对新上传的分段进行加密。 

解决方法

如果您的 AWS Identity and Access Management (IAM) 用户或角色与 AWS KMS 密钥位于同一 AWS 账户中,则您的密钥策略中必须有 kms:Decrypt 权限。如果您的 IAM 用户或角色与密钥归属不同的账户,则您的密钥策略和 IAM 权限必须都要有 kms:Decrypt 权限。

密钥策略

使用 AWS 管理控制台策略视图查看 AWS KMS 密钥策略。

在密钥策略中,搜索将您的 IAM 用户或角色的 Amazon 资源名称 (ARN) 列为 AWS 主体的语句。ARN 的格式为:arn:aws:iam::111122223333:user/john

然后,检查与您的 IAM 用户或角色关联的语句所允许的操作列表。允许的操作列表必须包括 kms:Decrypt 才能顺利进行分段上传。

例如,密钥策略中的此语句允许用户 John 执行 kms:Decryptkms:GenerateDataKey 操作:

  {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/john"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "*"
        },

IAM 权限

要查看您的 IAM 权限,请打开 IAM 控制台,然后打开您的 IAM 用户或角色。

查看应用于 IAM 用户或角色的权限策略列表。确保应用的策略允许您对用于加密对象的密钥执行 kms:Decrypt 操作。

例如,此语句授予 IAM 用户访问权限以对密钥执行 kms:Decryptkms:GenerateDataKey (arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd):

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": [
      "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    ]
  }
}

有关如何更新 IAM 权限的说明,请参阅更改 IAM 用户的权限


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?