

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 對服務控制政策 (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)
+ [多個陳述式元素](#morethanonestatement)
+ [政策文件大小超過上限](#scptoolong)

## 多個政策物件
<a name="morethanonepolicyblock"></a>

一個 SCP 必須僅包含一個 JSON 物件。可在兩旁放置 \$1 \$1 括弧來表示物件。雖然您可以在外側括弧對中嵌入額外的 \$1 \$1 括弧以在 JSON 物件中巢套其他物件，但是一個政策只能包含一個最外層的 \$1 \$1 括弧對。以下範例***不正確***，因為它在最上層包含兩個物件 (以*紅色*標示)：

------
#### [ 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` 元素完全相同時，您才可以結合陳述式。

## 多個陳述式元素
<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，則政策會完全按照您提供的方式儲存，而不會自動移除字元。