

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

# 新增 AWS Config 規則
<a name="evaluate-config_add-rules"></a>

您可以使用 AWS Config 主控台或 AWS SDKs來新增規則。

**Topics**
+ [使用主控台](#evaluate-config_add-rules-console)
+ [使用 AWS SDKs](#evaluate-config_add-rules-cli)

## 新增規則 （主控台）
<a name="evaluate-config_add-rules-console"></a>

**規則** 頁面會在表格中顯示您的規則和其目前的合規結果。每個規則的結果都是**評估...**，直到 AWS Config 完成針對規則評估您的資源為止。您可以使用重新整理按鈕來更新結果。評估 AWS Config 完成後，您可以看到合規或不合規的規則和資源類型。如需詳細資訊，請參閱[使用 檢視 AWS 資源的合規資訊和評估結果 AWS Config](evaluate-config_view-compliance.md)。

**注意**  
當您新增規則時， 會 AWS Config 評估資源庫存中的適用資源，包括先前記錄的資源。例如，如果您記錄`AWS::IoT::Policy`資源，但之後將其排除在記錄之外， 會在您的庫存中 AWS Config 保留初始組態項目 CIs)。雖然當相關聯的資源類型從記錄中排除時， AWS Config 不會再更新這些 CIs，但它會保留其上次記錄的狀態，並在您新增適用的規則時對其進行評估。  
AWS Config 不會評估不在資源庫存中的資源。例如，如果您新增[amplify-branch-tagged](amplify-branch-tagged.md)規則但未記錄 且從未記錄 `AWS::Amplify::Branch` 資源， AWS Config 就無法評估您帳戶中的 AWS Amplify 分支是否合規。  
如需詳細資訊，請參閱[使用 錄製 AWS 資源 AWS Config考量事項](select-resources.md)。

### 新增規則
<a name="add-rules-console"></a>

**新增規則**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/config/home](https://console.aws.amazon.com/config/home) 開啟 AWS Config 主控台。

1. 在 AWS 管理主控台 選單中，確認區域選擇器已設定為支援 AWS Config 規則的區域。如需支援區域的清單，請參閱《*Amazon Web Services 一般參考*》中的 [AWS Config 區域與端點](https://docs.aws.amazon.com/general/latest/gr/awsconfig.html)。

1. 在左側導覽中，選擇 **規則**。

1. 在 **Rules (規則)** 頁面，選擇 **Add rule (新增規則)**。

1. 在 **指定規則類型** 頁面上，透過完成下列步驟來指定規則類型：

   1. 在搜尋欄位中輸入，以透過規則名稱、描述和標籤篩選受管規則清單。例如，輸入 **EC2** 來傳回評估 EC2 資源類型的規則，或是輸入**定期**來傳回定期觸發的規則。

   1. 您也可以建立自己的自訂規則。選擇**使用 Lambda 建立自訂規則**或使用 **Guard 建立自訂規則**，然後遵循[建立 AWS Config 自訂 Lambda 規則](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_lambda-functions.html)或[建立 AWS Config 自訂政策規則](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html)中的程序。

1. 在 **配置規則** 頁面中，完成下列步驟以設定規則：

   1. 在 **Name (名稱)** 欄位中，輸入規則的專屬名稱。

   1. 針對 **描述**，請輸入規則的描述。

   1. 針對**評估模式**，選擇您要在資源建立和管理程序中 AWS Config 評估資源的時間。根據規則， AWS Config 可以在部署資源之前、部署資源之後或兩者都評估您的資源組態。

      1. 選擇 **開啟主動評估**，可讓您在部署資源之前，對資源的組態設定執行評估。

         開啟主動評估後，您可以使用 [StartResourceEvaluation](https://docs.aws.amazon.com/config/latest/APIReference/API_StartResourceEvaluation.html) API 和 [GetResourceEvaluationSummary](https://docs.aws.amazon.com/config/latest/APIReference/API_GetResourceEvaluationSummary.html) API 來檢查您在這些命令中指定的資源是否會被您區域中帳戶中的主動規則標記為「NON\$1COMPLIANT」。

          如需使用此命令的詳細資訊，請參閱[使用 AWS Config 規則評估您的 資源](https://docs.aws.amazon.com/config/latest/developerguide/evaluating-your-resources.html#evaluating-your-resources-proactive)。如需支援主動評估的受管規則清單，請參閱[依評估模式的 AWS Config 受管規則清單](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-evaluation-mode.html)。

      1. 選擇 **開啟偵測評估** 以評估現有資源的組態設定。

         偵測評估有兩種類型的觸發程序：**組態有所變更時** 和 **定期**。

         1.  如果規則的觸發類型包含**組態變更**，請為 AWS Config 叫用 Lambda 函數**的變更範圍**指定下列其中一個選項：
            +  **資源** – 建立、變更或刪除符合指定資源類型或加上識別符類型的資源時。
            +  **標籤** – 建立、變更或刪除含指定標籤的資源時。
            +  **所有變更** – AWS Config 建立、變更或刪除 記錄的資源時。

            AWS Config 當偵測到符合規則範圍的資源變更時， 會執行評估。您可以使用範圍來定義要進行評估的資源。

         1. 如果規則的觸發類型包含**定期**，請指定 AWS Config 叫用 Lambda 函數**的頻率**。

   1. 針對 **參數**，如果您的規則包含參數，則您可以自訂所提供金鑰的值。您的資源必須依循參數這項屬性，才會被視為符合規則。

1. 在**檢閱和建立**頁面上，檢閱所有選取項目，再將規則新增至您的 AWS 帳戶。如果規則或函數未如預期般正常運作，則 **合規** 可能會顯示下列其中一個項目：
   +  **未報告任何結果** 已針對規則 AWS Config 評估您的資源。此規則不適用於其範圍內 AWS 的資源、已刪除指定的資源，或已刪除評估結果。若要取得評估結果，請更新規則、變更其範圍，或選擇 **Re-evaluate (重新評估)**。

     如果規則未回報評估結果，也會顯示此訊息。
   +  **範圍內沒有資源 ** - AWS Config 無法針對此規則評估您記錄 AWS 的資源，因為您的資源都不在規則範圍內。若要取得評估結果，請編輯規則並變更其範圍，或使用**設定**頁面為 新增 AWS Config 要記錄的資源。
   +  **Evaluations failed (評估失敗)** - 如需有助於判斷問題的資訊，請選擇規則名稱以開啟它的詳細資訊頁面，並參閱錯誤訊息。

## 新增規則AWS SDKs)
<a name="evaluate-config_add-rules-cli"></a>

### 新增規則
<a name="add-rules-cli"></a>

下列程式碼範例示範如何使用 `PutConfigRule`。

------
#### [ CLI ]

**AWS CLI**  
**新增 AWS 受管 Config 規則**  
下列命令提供 JSON 程式碼來新增 AWS 受管 Config 規則：  

```
aws configservice put-config-rule --config-rule file://RequiredTagsForEC2Instances.json
```
`RequiredTagsForEC2Instances.json` 是包含規則組態的 JSON 檔案：  

```
{
  "ConfigRuleName": "RequiredTagsForEC2Instances",
  "Description": "Checks whether the CostCenter and Owner tags are applied to EC2 instances.",
  "Scope": {
    "ComplianceResourceTypes": [
      "AWS::EC2::Instance"
    ]
  },
  "Source": {
    "Owner": "AWS",
    "SourceIdentifier": "REQUIRED_TAGS"
  },
  "InputParameters": "{\"tag1Key\":\"CostCenter\",\"tag2Key\":\"Owner\"}"
}
```
對於 `ComplianceResourceTypes` 屬性，此 JSON 程式碼會將範圍限制為 `AWS::EC2::Instance`類型的資源，因此 AWS Config 只會針對規則評估 EC2 執行個體。由於規則是受管規則，`Owner` 屬性會設為 `AWS`，而 `SourceIdentifier` 屬性則設為規則識別碼 `REQUIRED_TAGS`。針對 `InputParameters` 屬性，會指定規則需要的標籤索引鍵 `CostCenter` 和 `Owner`。  
如果命令成功， AWS Config 不會傳回任何輸出。若要驗證規則組態，請執行 describe-config-rules 命令，並指定規則名稱。  
**新增客戶管理的 Config 規則**  
下列命令提供 JSON 程式碼，以新增客戶管理的 Config 規則：  

```
aws configservice put-config-rule --config-rule file://InstanceTypesAreT2micro.json
```
`InstanceTypesAreT2micro.json` 是包含規則組態的 JSON 檔案：  

```
{
  "ConfigRuleName": "InstanceTypesAreT2micro",
  "Description": "Evaluates whether EC2 instances are the t2.micro type.",
  "Scope": {
    "ComplianceResourceTypes": [
      "AWS::EC2::Instance"
    ]
  },
  "Source": {
    "Owner": "CUSTOM_LAMBDA",
    "SourceIdentifier": "arn:aws:lambda:us-east-1:123456789012:function:InstanceTypeCheck",
    "SourceDetails": [
      {
        "EventSource": "aws.config",
        "MessageType": "ConfigurationItemChangeNotification"
      }
    ]
  },
  "InputParameters": "{\"desiredInstanceType\":\"t2.micro\"}"
}
```
對於 `ComplianceResourceTypes` 屬性，此 JSON 程式碼會將範圍限制為 `AWS::EC2::Instance`類型的資源，因此 AWS Config 只會針對規則評估 EC2 執行個體。由於此規則是客戶受管規則，`Owner`屬性設定為 `CUSTOM_LAMBDA`，而`SourceIdentifier`屬性設定為 AWS Lambda 函數的 ARN。`SourceDetails` 物件為必要項目。當 Config 調用屬性來根據規則評估資源時，為 `InputParameters` 屬性指定的參數會傳遞至 AWS Lambda AWS 函數。  
如果命令成功， AWS Config 不會傳回任何輸出。若要驗證規則組態，請執行 describe-config-rules 命令，並指定規則名稱。  
+  如需 API 詳細資訊，請參閱《AWS CLI 命令參考》**中的 [PutConfigRule](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/configservice/put-config-rule.html)。

------
#### [ Python ]

**適用於 Python 的 SDK (Boto3)**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/config#code-examples)中設定和執行。

```
class ConfigWrapper:
    """
    Encapsulates AWS Config functions.
    """

    def __init__(self, config_client):
        """
        :param config_client: A Boto3 AWS Config client.
        """
        self.config_client = config_client


    def put_config_rule(self, rule_name):
        """
        Sets a configuration rule that prohibits making Amazon S3 buckets publicly
        readable.

        :param rule_name: The name to give the rule.
        """
        try:
            self.config_client.put_config_rule(
                ConfigRule={
                    "ConfigRuleName": rule_name,
                    "Description": "S3 Public Read Prohibited Bucket Rule",
                    "Scope": {
                        "ComplianceResourceTypes": [
                            "AWS::S3::Bucket",
                        ],
                    },
                    "Source": {
                        "Owner": "AWS",
                        "SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED",
                    },
                    "InputParameters": "{}",
                    "ConfigRuleState": "ACTIVE",
                }
            )
            logger.info("Created configuration rule %s.", rule_name)
        except ClientError:
            logger.exception("Couldn't create configuration rule %s.", rule_name)
            raise
```
+  如需 API 詳細資訊，請參閱《*適用於 Python (Boto3) 的AWS 開發套件 API 參考*》中的 [PutConfigRule](https://docs.aws.amazon.com/goto/boto3/config-2014-11-12/PutConfigRule)。

------
#### [ SAP ABAP ]

**適用於 SAP ABAP 的開發套件**  
 GitHub 上提供更多範例。尋找完整範例，並了解如何在 [AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/cfs#code-examples)中設定和執行。

```
    " Create a config rule for S3 bucket public read prohibition
    lo_cfs->putconfigrule(
      io_configrule = NEW /aws1/cl_cfsconfigrule(
        iv_configrulename = iv_rule_name
        iv_description = |S3 Public Read Prohibited Bucket Rule|
        io_scope = NEW /aws1/cl_cfsscope(
          it_complianceresourcetypes = VALUE /aws1/cl_cfscplncresrctypes_w=>tt_complianceresourcetypes(
            ( NEW /aws1/cl_cfscplncresrctypes_w( |AWS::S3::Bucket| ) )
          )
        )
        io_source = NEW /aws1/cl_cfssource(
          iv_owner = |AWS|
          iv_sourceidentifier = |S3_BUCKET_PUBLIC_READ_PROHIBITED|
        )
        iv_inputparameters = '{}'
        iv_configrulestate = |ACTIVE|
      )
    ).
    MESSAGE 'Created AWS Config rule.' TYPE 'I'.
```
+  如需 API 詳細資訊，請參閱《適用於 *AWS SAP ABAP 的 SDK API 參考*》中的 [PutConfigRule](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)。

------