上次更新时间:2020 年 10 月 15 日
当我尝试创建或更新 AWS CloudFormation 堆栈时,收到了“MalformedPolicyDocument”错误消息。即使在验证了模板后,仍会收到该错误。
简短描述AWS CloudFormation 中的 ValidateTemplate(验证模板)API 仅可验证模板的语法。该 API 无法验证您为资源指定的属性值。由于策略文档配置为属性值的一部分,因此不验证策略的有效性。
如果按照策略语言的语法,策略文档的语法或语义不正确,您将会收到“MalformedPolicyDocument”错误。
要解决此错误,您必须确认策略文档对它不属于的特定资源类型有效。
解决方法 查找堆栈事件中的错误消息详细信息-
打开 AWS CloudFormation 控制台。
在导航窗格中,选择 Stacks(堆栈)。
选择返回该错误的堆栈,然后选择 Events(事件)选项卡。
搜索 Status reason(状态原因)列以找到解释该错误原因的消息。
如果您仍然无法找到错误的原因,请完成获取关于导致该错误的 AWS CloudTrail 事件的更多信息部分中的步骤。
获取关于导致该错误的 AWS CloudTrail 事件的更多信息您可以通过检查作用于导致该错误的资源类型的 CloudTrail 事件的 errorMessage 属性,获得更多信息。
例如,如果“MalformedPolicyDocument”源自已挂载到 AWS Identity and Access Management (IAM) 角色的内联策略中的错误,请完成以下步骤:
-
打开 CloudTrail 控制台。
在导航窗格中,选择 Event history(事件历史记录)。
在 Filter(筛选条件)搜索框中,选择 Event name(事件名称)作为查找属性,然后在相应的文本框中输入 PutRolePolicy。
对于 Time range(时间范围),按照 AWS CloudFormation 事件中显示错误消息的时间来设置 CloudTrail 事件的时间。
在 Event name(事件名称)列中,选择您的事件。
从 Event record(事件记录)中,检查 errorMessage 属性的值以获得详细消息。
对导致该错误的资源实施 API 级操作的 CloudTrail 事件通常包含解析格式的策略文档。您可以复制此解析格式的策略文档,然后直接在 AWS 管理控制台中为该特定资源创建新策略。
例如,如果“MalformedPolicyDocument”源自已挂载到 IAM 角色的内联策略中的错误,请完成以下步骤:
-
打开 AWS CloudTrail 控制台。
在导航窗格中,选择 Event history(事件历史记录)。
在 Filter(筛选条件)搜索框中,选择 Event name(事件名称)作为查找属性,然后在相应的文本框中输入 PutRolePolicy。
对于 Time range(时间范围),按照 AWS CloudFormation 事件中显示错误消息的时间来设置 CloudTrail 事件的时间。
在 Event name(事件名称)列中,选择您的事件。
从 Event record(事件记录)中,复制 requestParameters 下的 policyDocument 属性的值。
在文本编辑器中,删除策略文档中的任何“\”转义字符。
打开 IAM 控制台。
从导航窗格中,选择 Policies(策略)。
选择 Create policy(创建策略),然后选择 JSON 选项卡。
输入从第 6 步复制的策略文档,然后选择 Review policy(审核策略)。
检查页面开始部分的红色对话框中显示的错误消息的内容。该错误消息提供对策略验证失败的更详细的解释。