如何解决 AWS KMS 密钥策略错误“Policy contains a statement with one or more invalid principals”(策略包含具有一个或多个无效主体的语句)?

上次更新日期:2022 年 3 月 22 日

我尝试修改我的 AWS Key Management Service (AWS KMS) 密钥策略,但在 AWS 管理控制台中收到了类似以下内容的错误:

“PutKeyPolicy request failed

MalformedPolicyDocumentException - Policy contains a statement with one or more invalid principals”(PutKeyPolicy 请求失败 MalformedPolicyDocumentException – 策略包含具有一个或多个无效主体的语句)

AWS KMS 密钥策略不包含 Amazon Resource Name (ARN),但包含具有类似于 AIDACKCEVSQ6C2EXAMPLE 的唯一 ID主体

简短描述

请求被拒绝时,AWS KMS API 调用 PutKeyPolicy 请求失败,因为指定的密钥策略在语法或语义上都不正确。

解决方法

JSON 语法

确认 JSON 策略文档资源类型有效。要解决 JSON 语法错误,请将 JSON 策略文档粘贴到 JSON Beautifier 中以检查格式。删除任何不必要的字符,并添加任何缺失的字符。检查重复的 JSON 策略元素和重复的 SID 值并将其删除。

无效的主体

检查 JSON 策略中的主体元素,并确保 AWS Identity and Access Management (IAM) 实体已存在。确保使用有效的 ARN 正确指定 IAM 身份

注意:您不能在指定资源类型的 ARN 部分使用通配符。

在创建 IAM 身份时,您需要向其提供易记名称,例如 Bob 或 Developers。出于安全原因,这些 IAM 实体也分配了唯一 ID,例如 AIDACKCEVSQ6C2EXAMPLE。

例如,如果您在 AWS KMS 密钥策略中指定了名为 Alice 的 IAM 用户。然后,Alice 从公司离职。之后,聘用了另一个名为 Alice 的新用户,并创建了具有相同名称的 IAM 用户。唯一 ID 可确保新 Alice 不会继承授予老 Alice 的权限。

从密钥策略中删除无人使用的唯一 ID。有关更多信息,请参阅使用 AWS KMS 中的密钥策略

注意:如果 AWS KMS 密钥策略对另一个账户或主体有权限,则该密钥策略仅在包含 KMS 密钥的 AWS 区域有效。有关更多信息,请参阅密钥策略概览

AWS 服务无效

如果将 AWS 服务列为主体,则请确保该服务受 AWS KMS 支持。主体应该是 IAM 实体,kms:ViaService 应该用于代表 IAM 实体发出请求的 AWS 服务。

检查 AWS 服务是否直接调用 AWS KMS。并非所有 AWS 服务都直接调用 AWS KMS,例如 Amazon Elastic Compute Cloud (Amazon EC2)。相反,Amazon EC2 之类的 AWS 服务会代表 AWS 账户中的主体进行调用。直接调用 AWS KMS 的 AWS 服务(如 Amazon Simple Notification Service (Amazon SNS))必须在主体元素中具有服务委托人

有关更多信息,请参阅支持 kms:ViaService 条件键的服务

选择加入 AWS 区域

与尚未选择加入密钥所在的 AWS 区域的 AWS 账户共享的 AWS KMS 密钥对该区域无效。

请确保在接收者账户中启用了 AWS 区域,或者在 AWS 账户和接收者账户中启用的区域中共享另一个 AWS KMS 密钥。有关更多信息,请参阅管理 AWS 区域


这篇文章对您有帮助吗?


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