如何解决 AWS CloudFormation 中的“MalformedPolicyDocument”错误?

上次更新时间:2020 年 10 月 15 日

当我尝试创建或更新 AWS CloudFormation 堆栈时,收到了“MalformedPolicyDocument”错误消息。即使在验证了模板后,仍会收到该错误。

简短描述

AWS CloudFormation 中的 ValidateTemplate(验证模板)API 仅可验证模板的语法。该 API 无法验证您为资源指定的属性值。由于策略文档配置为属性值的一部分,因此不验证策略的有效性。

如果按照策略语言的语法,策略文档的语法或语义不正确,您将会收到“MalformedPolicyDocument”错误。

要解决此错误,您必须确认策略文档对它不属于的特定资源类型有效。

解决方法

查找堆栈事件中的错误消息详细信息

  1. 打开 AWS CloudFormation 控制台
  2. 在导航窗格中,选择 Stacks(堆栈)。
  3. 选择返回该错误的堆栈,然后选择 Events(事件)选项卡。
  4. 搜索 Status reason(状态原因)列以找到解释该错误原因的消息。

如果您仍然无法找到错误的原因,请完成获取关于导致该错误的 AWS CloudTrail 事件的更多信息部分中的步骤。

获取关于导致该错误的 AWS CloudTrail 事件的更多信息

您可以通过检查作用于导致该错误的资源类型的 CloudTrail 事件的 errorMessage 属性,获得更多信息。

例如,如果“MalformedPolicyDocument”源自已挂载到 AWS Identity and Access Management (IAM) 角色的内联策略中的错误,请完成以下步骤:

  1. 打开 CloudTrail 控制台
  2. 在导航窗格中,选择 Event history(事件历史记录)。
  3. Filter(筛选条件)搜索框中,选择 Event name(事件名称)作为查找属性,然后在相应的文本框中输入 PutRolePolicy
  4. 对于 Time range(时间范围),按照 AWS CloudFormation 事件中显示错误消息的时间来设置 CloudTrail 事件的时间。
  5. Event name(事件名称)列中,选择您的事件。
  6. Event record(事件记录)中,检查 errorMessage 属性的值以获得详细消息。

验证 CloudTrail 事件中传递的策略

对导致该错误的资源实施 API 级操作的 CloudTrail 事件通常包含解析格式的策略文档。您可以复制此解析格式的策略文档,然后直接在 AWS 管理控制台中为该特定资源创建新策略。

例如,如果“MalformedPolicyDocument”源自已挂载到 IAM 角色的内联策略中的错误,请完成以下步骤:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择 Event history(事件历史记录)。
  3. Filter(筛选条件)搜索框中,选择 Event name(事件名称)作为查找属性,然后在相应的文本框中输入 PutRolePolicy
  4. 对于 Time range(时间范围),按照 AWS CloudFormation 事件中显示错误消息的时间来设置 CloudTrail 事件的时间。
  5. Event name(事件名称)列中,选择您的事件。
  6. Event record(事件记录)中,复制 requestParameters 下的 policyDocument 属性的值。
  7. 在文本编辑器中,删除策略文档中的任何“\”转义字符。
  8. 打开 IAM 控制台
  9. 从导航窗格中,选择 Policies(策略)。
  10. 选择 Create policy(创建策略),然后选择 JSON 选项卡。
  11. 输入从第 6 步复制的策略文档,然后选择 Review policy(审核策略)。
  12. 检查页面开始部分的红色对话框中显示的错误消息的内容。该错误消息提供对策略验证失败的更详细的解释。

这篇文章对您有帮助吗?


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