如何解决 AWS KMS 密钥政策错误“Policy contains a statement with one or more invalid principals”?

1 分钟阅读
0

我尝试修改我的 AWS Key Management Service(AWS KMS)密钥政策。但是,我在 AWS 管理控制台中收到了以下类似错误:“PutKeyPolicy request failed MalformedPolicyDocumentException - Policy contains a statement with one or more invalid principals”。

简短描述

当指定的密钥政策在语法或语义上不正确时,PutKeyPolicy AWS KMS API 调用请求会失败。AWS KMS 密钥政策不包含 ARN。相反,密钥政策包含一个具有类似于 AIDACKCEVSQ6C2EXAMPLE 的唯一 ID 的主体。

解决方法

JSON 语法

确认 JSON 策略文档资源类型有效。要解决 JSON 语法错误,请将 JSON 策略文档粘贴到 JSON 格式化工具中,例如 JSON Beautifier 网站上的 JSON Beautifier。删除任何不必要的字符,并添加任何遗漏的字符。删除重复的 JSON 策略元素和 SID 值。

Principal 元素

在 JSON 策略的 Principal 元素中,确认 AWS Identity and Access Management(IAM)身份存在且具有有效的 ARN。

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

创建 IAM 身份时,使用友好名称,例如 Bob 或 Developers。出于安全考虑,这些 IAM 身份还被分配了一个唯一标识符,例如 AIDACKCEVSQ6C2EXAMPLE。从密钥政策中删除孤立的唯一 ID。有关详细信息,请参阅 Key policies in AWS KMS

**注意:**如果 AWS KMS 密钥政策拥有其他账户或主体的权限,则该密钥政策可能无效。该密钥政策仅在包含 AWS KMS 密钥的 AWS 区域有效。

AWS 服务

如果 AWS 服务被列为主体,则确保 AWS KMS 支持该服务。主体必须是 IAM 身份。此外,对于提出 IAM 身份请求的 AWS 服务,必须使用 kms:ViaService 条件键。

由于并不是所有 AWS 服务都直接调用 AWS KMS,请检查您使用的 AWS 服务是否直接调用了 AWS KMS。例如,Amazon Elastic Compute Cloud(Amazon EC2)等 AWS 服务会调用账户中的主体。直接调用 AWS KMS 的 AWS 服务必须在 Principal 元素中包含服务主体

有关详细信息,请参阅 Services that support the kms:ViaService condition key

选择加入 AWS 区域

您与其共享 AWS KMS 密钥的账户必须选择加入接收者账户内的 AWS 区域。否则,KMS 密钥在该区域无效。

确保在接收者账户中激活该区域。还可以在某个区域共享在 AWS 账户和接收者账户中激活的另一个 AWS KMS 密钥。有关详细信息,请参阅 Specify which AWS Regions your account can use

相关信息

Changing a key policy