

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

# 宣告政策語法和範例
<a name="orgs_manage_policies_declarative_syntax"></a>

此頁面說明宣告式政策語法並提供範例。

## 考量事項
<a name="declarative-policy-syntax-considerations"></a>
+ 當您使用宣告性政策設定服務屬性時，可能會影響多個 APIs。任何不合規動作都將失敗。
+ 帳戶管理員將無法修改個別帳戶層級的服務屬性值。

## 宣告式政策的語法
<a name="declarative-policy-syntax-reference"></a>

宣告政策是根據 [JSON](http://json.org) 規則建構的純文字檔案。宣告政策的語法遵循所有管理政策類型的語法。如需該語法的完整討論，請參閱[管理政策類型的政策語法和繼承](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_inheritance_mgmt.html)。本主題著重於將該一般語法套用至宣告政策類型的特定需求。

下列範例顯示基本宣告政策語法：

```
{
  "ec2_attributes": {
    "exception_message": {
      "@@assign": "Your custom error message.https://myURL"
    }
  }
}
```
+ `ec2_attributes` 欄索引鍵名稱。宣告政策一律以指定 的固定金鑰名稱開頭 AWS 服務。這是上面範例政策的第一行。目前宣告政策僅支援 Amazon EC2 相關服務。
+ 在 下`ec2_attributes`，您可以使用 `exception_message`來設定自訂錯誤訊息。如需詳細資訊，請參閱[宣告政策的自訂錯誤訊息](orgs_manage_policies_declarative.md#orgs_manage_policies_declarative-custom-message)。
+ 在 下`ec2_attributes`，您可以插入一或多個支援的宣告政策。如需這些結構描述，請參閱 [支援的宣告政策](#declarative-policy-examples)。

## 支援的宣告政策
<a name="declarative-policy-examples"></a>

以下是宣告政策支援的 AWS 服務 和 屬性。在下列某些範例中，可能會壓縮 JSON 空白格式以節省空間。
+ VPC 封鎖公開存取
+ 序列主控台存取
+ 映像區塊公開存取
+ 允許的影像設定
+ 執行個體中繼資料
+ 快照區塊公開存取

------
#### [ VPC Block Public Access ]

**政策效果**

控制 Amazon VPCs和子網路中的資源是否可以透過網際網路閘道 (IGWs) 連線到網際網路。如需詳細資訊，請參閱《*Amazon Virtual Private Cloud 使用者指南*》中的[網際網路存取組態](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-igw-internet-access.html)。

**政策內容**

```
{
  "ec2_attributes": {
    "vpc_block_public_access": {
      "internet_gateway_block": {
        "mode": {
          "@@assign": "block_ingress"
        },
        "exclusions_allowed": {
          "@@assign": "enabled"
        }
      }
    }
  }
}
```

以下是此屬性的可用欄位：
+ `"internet_gateway"`:
  + `"mode"`:
    + `"off"`：未啟用 VPC BPA。
    + `"block_ingress"`：所有至 VPCs網際網路流量 （排除VPCs 或子網路除外） 都會遭到封鎖。僅允許進出 NAT 閘道和僅輸出網際網路閘道的流量，因為這些閘道僅允許建立傳出連線。
    + `"block_bidirectional"`：往返網際網路閘道和輸出限定網際網路閘道 （排除 VPCs和子網路除外） 的所有流量都會遭到封鎖。
+ `"exclusions_allowed"`：排除是一種模式，可套用至單一 VPC 或子網路，其會將其從帳戶的 VPC BPA 模式排除，並允許雙向或僅輸出存取。
  + `"enabled"`： 排除可由帳戶建立。
  + `"disabled"`： 帳戶無法建立排除項目。
**注意**  
您可以使用 屬性來設定是否允許排除，但無法使用此屬性本身建立排除。若要建立排除項目，您必須在擁有 VPC 的帳戶中建立排除項目。如需建立 VPC BPA 排除的詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[建立和刪除排除](https://docs.aws.amazon.com//vpc/latest/userguide/security-vpc-bpa.html#security-vpc-bpa-exclusions)。

**考量**

如果您在宣告式政策中使用此屬性，則無法使用下列操作來修改範圍內帳戶的強制執行組態。此清單並不詳盡：
+ `ModifyVpcBlockPublicAccessOptions`
+ `CreateVpcBlockPublicAccessExclusion`
+ `ModifyVpcBlockPublicAccessExclusion`

------
#### [ Serial Console Access ]

**政策效果**

控制 EC2 序列主控台是否可存取。如需 EC2 序列主控台的詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的 [EC2 序列主控台](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-serial-console.html)。

**政策內容**

```
{
  "ec2_attributes": {
    "serial_console_access": {
      "status": {
        "@@assign": "enabled"
      }
    }
  }
}
```

以下是此屬性的可用欄位：
+ `"status"`:
  + `"enabled"`：允許 EC2 序列主控台存取。
  + `"disabled"`：EC2 序列主控台存取遭到封鎖。

**考量**

如果您在宣告式政策中使用此屬性，則無法使用下列操作來修改範圍內帳戶的強制執行組態。此清單並不詳盡：
+ `EnableSerialConsoleAccess`
+ `DisableSerialConsoleAccess`

------
#### [ Image Block Public Access ]

**政策效果**

控制 Amazon Machine Image (AMIs) 是否可公開共享。如需 AMIs 的詳細資訊，請參閱《[Amazon Elastic Compute Cloud 使用者指南》中的 Amazon Machine Image (AMIs)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)。 **

**政策內容**

```
{
  "ec2_attributes": {
    "image_block_public_access": {
      "state": {
        "@@assign": "block_new_sharing"
      }
    }
  }
}
```

以下是此屬性的可用欄位：
+ `"state"`:
  + `"unblocked"`：AMIs的公開共用沒有限制。
  + `"block_new_sharing"`：封鎖 AMIs的新公開共用。已公開共用AMIs 仍可公開使用。

**考量**

如果您在宣告式政策中使用此屬性，則無法使用下列操作來修改範圍內帳戶的強制執行組態。此清單並不詳盡：
+ `EnableImageBlockPublicAccess`
+ `DisableImageBlockPublicAccess`

------
#### [ Allowed Images Settings ]

**政策效果**

使用允許的 AMI 控制 Amazon EC2 中 Amazon Machine Image (AMIs探索和使用。如需 AMIs的詳細資訊，請參閱《[Amazon Elastic Compute Cloud AMIs 使用者指南》中的使用允許 AMI 控制 Amazon EC2 中的 AMIs 探索和使用Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html)。 **

**政策內容**

以下是此屬性的可用欄位：

```
{
  "ec2_attributes": {
    "allowed_images_settings": {
      "state": {
        "@@assign": "enabled"
      },
      "image_criteria": {
        "criteria_1": {
          "allowed_image_providers": {
            "@@append": [
              "amazon"
            ]
          }
        }
      }
    }
  }
}
```
+ `"state"`:
  + `"enabled"`： 屬性為作用中且強制執行。
  + `"disabled"`： 屬性為非作用中且未強制執行。
  + `"audit_mode"`： 屬性處於稽核模式。這表示它會識別不合規的映像，但不會封鎖其使用。
+ `"image_criteria"`：條件清單。最多支援 10 個條件，其名稱為 criteria\_1 到 criteria\_10
  + `"allowed_image_providers"`：以逗號分隔的 12 位數帳戶 IDs 清單或 amazon、aws\_marketplace、aws\_backup\_vault 的擁有者別名。
  + `"image_names"`：允許的映像名稱。名稱可以包含萬用字元 (？ 和 \*)。長度：1–128 個字元。使用 ？，最少為 3 個字元。
  + `"marketplace_product_codes"`：允許映像的 AWS Marketplace 產品代碼。長度：1-25 個字元 有效字元：字母 (A–Z、a–z) 和數字 (0–9)
  + `"creation_date_condition"`：允許影像的最長存留期。
    + `"maximum_days_since_created"`：自建立映像以來已經過的天數上限。有效範圍：最小值為 0。最大值為 2147483647。
  + `"deprecation_time_condition"`：自允許的映像棄用以來的最長期間。
    + `"maximum_days_since_deprecated"`：自影像棄用以來已經過的天數上限。有效範圍：最小值為 0。最大值為 2147483647。

**考量**

如果您在宣告式政策中使用此屬性，則無法使用下列操作來修改範圍內帳戶的強制執行組態。此清單並不詳盡：
+ `EnableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`
+ `DisableAllowedImagesSettings`

------
#### [ Instance Metadata ]

**政策效果**

控制所有新 EC2 執行個體啟動的 IMDS 預設值和 IMDSv2 強制執行。 EC2 如需 IMDS 預設值和 IMDSv2 強制執行的詳細資訊，請參閱《Amazon [ EC2 使用者指南》中的使用執行個體中繼資料來管理 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)。 *Amazon EC2 *

**政策內容**

以下是此屬性的可用欄位：

```
{
  "ec2_attributes": {
    "instance_metadata_defaults": {
      "http_tokens": {
        "@@assign": "required"
      },
      "http_put_response_hop_limit": {
        "@@assign": "4"
      },
      "http_endpoint": {
        "@@assign": "enabled"
      },
      "instance_metadata_tags": {
        "@@assign": "enabled"
      },
      "http_tokens_enforced": {
        "@@assign": "enabled"
      }
    }
  }
}
```
+ `"http_tokens"`:
  + `"no_preference"`：其他預設值適用。例如，如果適用，AMI 會預設為 。
  + `"required"`：必須使用 IMDSv2。不允許 IMDSv1。
  + `"optional"`：允許 IMDSv1 和 IMDSv2。
**注意**  
**中繼資料版本**  
`http_tokens` 將 設定為 `required`（必須使用 IMDSv2) 之前，請確定您的所有執行個體都不會進行 IMDSv1 呼叫。如需詳細資訊，請參閱《*Amazon EC2*[2 使用者指南》中的步驟 1：識別具有 IMDSv2=選用和稽核 IMDSv1 使用情況的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-transition-to-version-2.html#path-step-1)。
+ `"http_put_response_hop_limit"`:
  + `"{{Integer}}"`：從 -1 到 64 的整數值，代表中繼資料字符可以移動的躍點數目上限。若要表示沒有偏好設定，請指定 -1。
**注意**  
**跳轉限制**  
如果 `http_tokens` 設為 `required`，建議將 `http_put_response_hop_limit`設為最少 2。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的[執行個體中繼資料存取考量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#imds-considerations)事項。
+ `"http_endpoint"`:
  + `"no_preference"`：其他預設值適用。例如，如果適用，AMI 會預設為 。
  + `"enabled"`：可存取執行個體中繼資料服務端點。
  + `"disabled"`：無法存取執行個體中繼資料服務端點。
+ `"instance_metadata_tags"`:
  + `"no_preference"`：其他預設值適用。例如，如果適用，AMI 會預設為 。
  + `"enabled"`：可從執行個體中繼資料存取執行個體標籤。
  + `"disabled"`：無法從執行個體中繼資料存取執行個體標籤。
+ `"http_tokens_enforced":`
  + `"no_preference"`：其他預設值適用。例如，如果適用，AMI 會預設為 。
  + `"enabled"`：必須使用 IMDSv2。嘗試啟動 IMDSv1 執行個體或在現有執行個體上啟用 IMDSv1 將會失敗。
  + `"disabled"`：允許 IMDSv1 和 IMDSv2。
**警告**  
**IMDSv2 強制執行**  
在允許 IMDSv1 和 IMDSv2 （金鑰選用） 時啟用 IMDSv2 強制執行會導致啟動失敗，除非透過啟動參數或 AMI 預設值明確停用 IMDSv1。 IMDSv1 如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[啟動IMDSv1-enabled執行個體失敗](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-launch.html#launching-an-imdsv1-enabled-instance-fails)。

------
#### [ Snapshot Block Public Access ]

**政策效果**

控制 Amazon EBS 快照是否可公開存取。如需 EBS 快照的詳細資訊，請參閱《[Amazon Elastic Block Store 使用者指南》中的 Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)。 **

**政策內容**

```
{
  "ec2_attributes": {
    "snapshot_block_public_access": {
      "state": {
        "@@assign": "block_new_sharing"
      }
    }
  }
}
```

以下是此屬性的可用欄位：
+ `"state"`:
  + `"block_all_sharing"`：封鎖快照的所有公開共用。已公開共用的快照會被視為私有，不再公開。
  + `"block_new_sharing"`：封鎖快照的新公開共用。已公開共用的快照仍可公開使用。
  + `"unblocked"`：不限制公開共用快照。

**考量**

如果您在宣告式政策中使用此屬性，則無法使用下列操作來修改範圍內帳戶的強制執行組態。此清單並不詳盡：
+ `EnableSnapshotBlockPublicAccess`
+ `DisableSnapshotBlockPublicAccess`

------