当我将文件上传到使用 AWS KMS 默认加密的 Amazon S3 存储桶时,为什么会收到“访问被拒绝”错误消息?

上次更新时间:2020 年 10 月 19 日

我的 Amazon Simple Storage Service (Amazon S3) 存储桶具有 AWS Key Management Service (AWS KMS) 默认加密。我的 AWS Identity and Access Management (IAM) 用户或角色对存储桶拥有 s3:PutObject 权限。我正在尝试将文件上传到存储桶,但 Amazon S3 返回“访问被拒绝”错误消息。如何修复此问题?

解决方法

根据您收到的错误消息更新 IAM 用户或角色的 AWS KMS 权限。

重要提示:如果 AWS KMS 密钥以及 IAM 用户或角色属于不同的 AWS 账户,则必须在 IAM 策略和 KMS 密钥策略上添加 KMS 权限。

“调用 PutObject 操作时发生错误 (AccessDenied):访问被拒绝”

此错误消息表示您的 IAM 用户或角色需要执行 kms:GenerateDataKey 操作的权限。对于将默认加密与自定义 AWS KMS 密钥一起使用的存储桶,此权限是必需的。按照以下步骤为 kms:GenerateDataKey 添加权限:

  1. 打开 IAM 控制台
  2. 在控制台中,打开用于将文件上传到 Amazon S3 存储桶的 IAM 用户或角色。
  3. 在您的 IAM 用户或角色的权限选项卡中,展开每个策略以查看其 JSON 策略文档。
  4. 在 JSON 策略文档中,寻找与 AWS KMS 访问相关的策略。查看包含 "Effect": "Allow" 的语句,以检查用户或角色是否具有对存储桶的 AWS KMS 密钥执行 kms:GenerateDataKey 操作的权限。如果缺少此权限,则将权限添加到相应的策略中。有关说明,请参阅向用户添加权限(控制台)修改角色权限策略(控制台)
  5. 在 JSON 策略文档中,查找包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKey 操作。

“调用 CreateMultipartUpload 操作时发生错误 (AccessDenied):访问被拒绝”

此错误消息表示您的 IAM 用户或角色需要执行 kms:GenerateDataKeykms:Decrypt 操作的权限。使用 AWS KMS 默认加密分段上传到存储桶时需要这些权限。按照以下步骤为 kms:GenerateDataKeykms:Decrypt 添加权限:

  1. 打开 IAM 控制台
  2. 在控制台中,打开用于将文件上传到 Amazon S3 存储桶的 IAM 用户或角色。
  3. 在您的 IAM 用户或角色的权限选项卡中,展开每个策略以查看其 JSON 策略文档。
  4. 在 JSON 策略文档中,寻找与 AWS KMS 访问相关的策略。查看包含 "Effect": "Allow" 的语句,以检查用户或角色是否具有对存储桶的 AWS KMS 密钥执行 kms:GenerateDataKeykms:Decrypt 操作的权限。如果缺少这些权限,则将权限添加到相应的策略中。有关说明,请参阅向用户添加权限(控制台)修改角色权限策略(控制台)
  5. 在 JSON 策略文档中,查找包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKeykms:Decrypt 操作。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?