当我尝试创建或更新 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) 角色的内联策略中的错误,请完成以下步骤:
- 打开 AWS CloudTrail 控制台。
- 在导航窗格中,选择Event history(事件历史记录)。
- 在 Filter(筛选条件)搜索框中,选择 Event name(事件名称)作为查找属性,然后在相应的文本框中输入 PutRolePolicy。
- 对于 Time range(时间范围),按照 AWS CloudFormation 事件中显示错误消息的时间来设置 CloudTrail 事件的时间。
- 在 Event name(事件名称)列中,选择您的事件。
- 从 Event record(事件记录)中,检查 errorMessage 属性的值以获得详细消息。
验证 CloudTrail 事件中传递的策略
对导致该错误的资源实施 API 级操作的 CloudTrail 事件通常包含解析格式的策略文档。您可以复制此解析格式的策略文档,然后直接在 AWS 管理控制台中为该特定资源创建新策略。
例如,如果“MalformedPolicyDocument”源自已挂载到 IAM 角色的内联策略中的错误,请完成以下步骤:
- 打开 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(审核策略)。
- 检查页面开始部分的红色对话框中显示的错误消息的内容。该错误消息提供对策略验证失败的更详细的解释。
相关信息
IAM JSON 策略语言的语法
IAM JSON 策略元素参考