排查 Amazon Organizations 服务控制策略(SCP)问题 - Amazon Organizations
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 Amazon Organizations 服务控制策略(SCP)问题

此处的信息有助您诊断和修复服务控制策略(SCP)中的常见错误。

Amazon Organizations 中的服务控制策略(SCP)与 IAM 策略类似并有共用的语法。此语法以 JavaScript 对象表示法 (JSON) 的规则开头。JSON 描述对象 以及组成对象的名称和值对。IAM 策略语法通过定义名称和值的含义,并让使用策略授予权限的 Amazon Web Services 服务可以理解这些名称和值来进行构建。

Amazon Organizations 使用部分 IAM 句法和语法。有关详细信息,请参阅SCP 语法

多个策略对象

一个 SCP 必须包含一个并且只能包含一个 JSON 对象。可通过在两旁放置 { } 括号来表示对象。虽然您可以通过在外部对中嵌入额外 { } 括号在 JSON 对象中嵌套其他对象,但是一个策略只能包含一个最外层的 { } 括号对。以下示例不正确,因为它在顶层包含两个对象 (以红色标示):

{ "Version": "2012-10-17", "Statement": { "Effect":"Allow", "Action":"ec2:Describe*", "Resource":"*" } } { "Statement": { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } }

不过,您可以使用正确的策略语法来实现上面示例的意图。可以将两个数据块合并到单个 Statement 元素中,而不是包含两个完整的策略对象 (每个都有自己的 Statement 元素)。Statement 元素将两个对象组成的数组作为其值,如以下示例所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":" *" }, { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }

无法将此示例进一步压缩到带一个元素的 Statement 中,因为两个元素具有不同的作用。通常,您只能在每个语句中的 EffectResource 元素相同时组合语句。

多个 Statement 元素

此错误乍一看似乎是由上一部分中的错误变化而来的。但是,它在句法上是不同类型的错误。在以下示例中,顶层只有一个策略对象,由单个 { } 括号对表示。但是,该对象包含两个 Statement 元素。

一个 SCP 策略只能包含一个 Statement 元素,名称 (Statement) 在冒号左侧,它的值在冒号右侧。Statement 元素的值必须是对象,以 { } 括号表示,其中包含一个 Effect 元素、一个 Action 元素和一个 Resource 元素。以下示例不正确,因为它在策略对象中包含两个 Statement 元素:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, "Statement": { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } }

因为值对象可以是多个值对象组成的数组,所以您可以通过将两个 Statement 元素合并为一个对象数组元素来解决此问题,如以下示例所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":"*" }, { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }

Statement 元素的值是对象数组。此示例中的数组包含两个对象,每个对象是 Statement 元素的正确值。数组中的每个对象之间用逗号隔开。

策略文档超出最大大小

SCP 文档的最大大小为 5,120 个字符。此最大大小包括所有字符,含空格。要减小 SCP 的大小,您可以删除引号之外的所有空格字符(如空格和换行符)。

注意

如果您使用 Amazon Web Services Management Console保存策略,JSON 元素之间和引号之外的额外白色空格(如空格和换行符)不计算在内。如果您使用 SDK 操作或 Amazon CLI 保存策略,则策略将完全按照您提供的方式保存,并且不会自动删除字符。