

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用对服务控制策略 (SCPs) 进行故障排除 AWS Organizations
<a name="org_troubleshoot_policies"></a>

使用此处的信息来帮助您诊断和修复在服务控制策略中发现的常见错误（SCPs）。

中的服务控制策略 (SCPs) AWS Organizations 与 IAM 策略类似，语法相同。此语法从[JavaScript 对象表示](http://www.json.org)法 (JSON) 的规则开始。JSON 描述*对象* 以及组成对象的名称和值对。[IAM 策略语法](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-grammar.html)通过定义名称和值的含义，并让使用策略授予权限的 AWS 服务 可以理解这些名称和值来进行构建。

AWS Organizations 使用 IAM 语法和语法的子集。有关更多信息，请参阅 [SCP 语法](orgs_manage_policies_scps_syntax.md)。

**Topics**
+ [多个策略对象](#morethanonepolicyblock)
+ [多个 Statement 元素](#morethanonestatement)
+ [策略文档超出最大大小](#scptoolong)

## 多个策略对象
<a name="morethanonepolicyblock"></a>

一个 SCP 必须包含一个并且只能包含一个 JSON 对象。可通过在两旁放置 \$1 \$1 括号来表示对象。虽然您可以通过在外部对中嵌入额外 \$1 \$1 括号在 JSON 对象中嵌套其他对象，但是一个策略只能包含一个最外层的 \$1 \$1 括号对。以下示例***不正确***，因为它在顶层包含两个对象（在中调用*red*）：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:Describe*",
      "Resource": "*"
    },
    {
      "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` 中，因为两个元素具有不同的作用。通常，您只能在每个语句中的 `Effect` 和 `Resource` 元素相同时组合语句。

## 多个 Statement 元素
<a name="morethanonestatement"></a>

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

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

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

------

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

## 策略文档超出最大大小
<a name="scptoolong"></a>

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

**注意**  
如果您使用保存策略 AWS 管理控制台，则 JSON 元素之间和引号之外的多余空格将被移除且不计算在内。如果您使用 SDK 操作或保存策略 AWS CLI，则策略将完全按照您提供的方式保存，并且不会自动删除字符。