如何解決 AWS KMS 金鑰政策錯誤「政策包含具有一個或多個無效委託人的語句」?

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

我嘗試修改自己的 AWS Key Management Service (AWS KMS) 密鑰政策,並在 AWS 管理主控台中收到類似於以下內容的錯誤:

「PutKeyPolicy 請求失敗

MalformedPolicyDocumentException - 政策包含具有一個或多個無效委託人的語句」

AWS KMS 金鑰政策不包含 Amazon 資源名稱 (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 或開發人員。出於安全考量,這些 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)。相反,AWS 服務 (如 Amazon EC2) 代表 AWS帳戶中的主體進行呼叫。直接呼叫 AWS KMS 的 AWS 服務 (如 Amazon Simple Notification Service (Amazon SNS)) 必須在主體元素中具有服務主體

有關詳細資訊,請參閲支援 kms:ViaService 條件金鑰的服務

選擇加入 AWS 區域

與未選擇加入 AWS 區域 (其中金鑰位於收件人帳戶內) 的 AWS 帳戶共用的 AWS KMS 金鑰對於該區域無效。

確保在收件人帳戶中啟用了 AWS 區域,或在 AWS 帳戶和收件人帳戶中啟用的區域中共用另一個 AWS KMS 金鑰。如需詳細資訊,請參閱管理 AWS 區域


此文章是否有幫助?


您是否需要帳單或技術支援?