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

上次更新日期:2022 年 5 月 12 日

我的 Amazon Simple Storage Service (Amazon S3) 存储桶具有 AWS Key Management Service (AWS KMS) 默认加密。我正在尝试将文件上载到存储桶,但 Amazon S3 返回“访问被拒绝”错误消息。如何解决此问题?

解决方法

首先,请确认:

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

重要提示:

  • 如果 AWS KMS 密钥和 IAM 角色属于不同的 AWS 账户,则必须更新 IAM 策略和 KMS 密钥策略。确保将 KMS 权限添加到 IAM 策略和 KMS 密钥策略。
  • 要使用 IAM 策略控制对 KMS 密钥的访问,KMS 密钥的密钥策略必须向账户授予使用 IAM 策略的权限。

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

此错误消息表示您的 IAM 用户或角色需要执行 kms:GenerateDataKey 操作的权限。

按照以下步骤添加 kms:GenerateDataKey 权限:

1.    打开 IAM console(IAM 控制台)。

2.    选择用于将文件上载到 Amazon S3 存储桶的 IAM 用户或角色。

3.    在 Permissions(权限)选项中,展开每个策略以查看其 JSON 策略文档。

4.    在 JSON 策略文档中,寻找与 AWS KMS 访问相关的策略。查看包含 "Effect": "Allow" 的语句,以检查用户或角色是否具有对存储桶的 AWS KMS 密钥执行 kms:GenerateDataKey 操作的权限。

5.    如果缺少此权限,则将权限添加到相应的策略中。有关说明,请参阅向用户添加权限(控制台)修改角色权限策略(控制台)

6.    在 JSON 策略文档中,查找包含 "Effect": "Deny" 的语句。确认这些语句未拒绝在存储桶上执行 s3:PutObject 操作。这些语句不得拒绝您的 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKey 操作。此外,在使用 VPC 终端节点策略、服务控制策略、权限边界或会话策略时,不得限制所需的 KMS 和 S3 权限。

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

此错误消息表示您的 IAM 用户或角色需要执行 kms:GenerateDataKeykms:Decrypt 操作的权限。

按照以下步骤添加 kms:GenerateDataKeykms:Decrypt 权限:

1.    打开 IAM console(IAM 控制台)。

2.    选择用于将文件上载到 Amazon S3 存储桶的 IAM 用户或角色。

3.    在 Permissions(权限)选项中,展开每个策略以查看其 JSON 策略文档。

4.    在 JSON 策略文档中,寻找与 AWS KMS 访问相关的策略。查看包含 "Effect": "Allow" 的语句,以检查该角色是否具有对存储桶的 AWS KMS 密钥执行 kms:GenerateDataKeykms:Decrypt 操作的权限。

5.    如果缺少这些权限,则将权限添加到相应的策略中。有关说明,请参阅向用户添加权限(控制台)修改角色权限策略(控制台)

6.    在 JSON 策略文档中,查找包含 "Effect": "Deny" 的语句。然后,确认这些语句未拒绝在存储桶上执行 s3:PutObject 操作。这些语句不得拒绝 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKeykms:Decrypt 操作。此外,在使用 VPC 终端节点策略、服务控制策略、权限边界或会话策略时,不得限制所需的 KMS 和 S3 权限。


这篇文章对您有帮助吗?


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