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

上次更新时间:2021 年 7 月 16 日

我的 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 权限添加到 IAM 策略和 KMS 密钥策略。

此外,如果跨账户 IAM 委托人正在上载对象,则不能将具有“aws/s3”别名的 AWS KMS 密钥用于原定的存储桶加密设置。任何上载、复制的对象,或配置为使用 SSE-KMS 的 S3 存储桶密钥的存储桶,都必须具有 kms:Decrypt 权限。有关 AWS KMS 密钥和策略管理的更多信息,请参阅 AWS 托管 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" 的语句。然后,确认这些语句未拒绝在存储桶上执行 s3:PutObject 操作。此外,这些语句还不得拒绝您的 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKey 操作。此外,在使用 VPC 终端节点策略、服务控制策略、权限边界或会话策略时,不得限制所需的 KMS 和 S3 权限。

“调用 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" 的语句。然后,确认这些语句未拒绝在存储桶上执行 s3:PutObject 操作。这些语句不得拒绝 IAM 用户或角色对用于加密存储桶的密钥执行 kms:GenerateDataKeykms:Decrypt 操作。此外,在使用 VPC 终端节点策略、服务控制策略、权限边界或会话策略时,不得限制所需的 KMS 和 S3 权限。


这篇文章对您有帮助吗?


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