我嘗試修改 AWS Key Management Service (AWS KMS) 金鑰政策。不過,我在 AWS 管理主控台中收到類似於「PutKeyPolicy 請求失敗 MalformedPolicyDocumentException - 政策包含具備一或多個無效主體的陳述式」的錯誤訊息。
簡短描述
當特定金鑰政策在文法上或語意上不正確時,PutKeyPolicy AWS KMS API 呼叫請求就會失敗。AWS KMS 金鑰政策不包含 ARN。該金鑰政策包含主體具備與 AIDACKCEVSQ6C2EXAMPLE 類似的唯一 ID。
解決方法
JSON 語法
確認 JSON 政策文件資源類型有效。如要疑難排解 JSON 語法錯誤,請將 JSON 政策文件貼入至 JSON 格式工具,例如 JSON Beautifier 網站的 JSON Beautifier。刪除任何不必要的字元,並新增任何缺少的字元。移除重複的 JSON 政策元素和 SID 值。
主體元素
在 JSON 政策的主體元素中,確認 AWS Identity and Access Management (IAM) 身分存在,並具備有效 ARN。
注意: 您無法在指定資源類型的 ARN 部分中使用萬用字元。
建立 IAM 身分時,會使用易記名稱,例如 Bob 或開發人員。基於安全考量,這些 IAM 身分也會受指派唯一識別碼,例如 AIDACKCEVSQ6C2EXAMPLE。從金鑰政策中移除孤立的唯一 ID。如需詳細資訊,請參閱 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 服務必須具備主體元素中的服務主體。
如需詳細資訊,請參閱支援 kms:ViaService 條件金鑰的服務。
選擇加入 AWS 區域
您共用 AWS KMS 金鑰的帳戶必須選擇加入收件者帳戶中的 AWS 區域。否則,KMS 金鑰在該區域為無效。
確認收件者帳戶已啟用「區域」。您也可以在 AWS 帳戶和收件者帳戶中啟用的區域中共用另一個 AWS KMS 金鑰。如需詳細資訊,請參閱指定您的帳戶可以使用哪些 AWS 區域。
相關資訊
變更金鑰政策