

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

# 添加 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) 保留在清单中。尽管 CIs 当它们的关联资源类型被排除在记录之外时 AWS Config 不再更新它们，但它会保留其上次录制的状态，并在您添加适用的规则时对其进行评估。  
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://console.aws.amazon.com/config/主 AWS Config](https://console.aws.amazon.com/config/home)机。

1. 在 AWS 管理控制台 菜单中，确认区域选择器设置为支持 AWS Config 规则的区域。有关支持的区域的列表，请参阅《Amazon Web Services 一般参考》**中的 [AWS Config 区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/awsconfig.html)。

1. 在左侧导航窗格中，选择 **Rules**。

1. 在 **Rules** 页面，选择 **Add rule**。

1. 在**指定规则类型**页面上，通过完成以下步骤指定规则类型：

   1. 在搜索字段中键入内容，以便按规则名称、描述和标签筛选托管规则列表。例如，键入 **EC2** 可返回评估 EC2 资源类型的规则，或者键入 **periodic** 可返回定期触发的规则。

   1. 您还可以创建自己的自定义规则。选择**使用 Lambda 创建自定义规则或使用** **Guard 创建自定义规则**，然后按照创建自定义 [AWS Config Lambda 规则或[创建 AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html)自定义策略规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_lambda-functions.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 来检查您在这些命令中指定的资源是否会被您所在地区的账户中的主动规则标记为 “不合规”。

          有关使用此命令的更多信息，请参阅[使用 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 规则**  
以下命令提供用于添加 AWS 托管 Config 规则的 JSON 代码：  

```
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 规则**  
以下命令提供用于添加客户托管 Config 规则的 JSON 代码：  

```
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`属性设置为 Lambda 函数 AWS 的 ARN。`SourceDetails` 对象为必填项。当 Confi AWS g 调用 AWS Lambda 函数来根据规则评估资源时，为该`InputParameters`属性指定的参数将传递给 Lambda 函数。  
如果命令成功， 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 的详细信息，请参阅适用[PutConfigRule](https://docs.aws.amazon.com/goto/boto3/config-2014-11-12/PutConfigRule)于 *Python 的AWS SDK (Boto3) API 参考*。

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

**适用于 SAP ABAP 的 SDK**  
 还有更多相关信息 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 的详细信息，请参阅适用[PutConfigRule](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)于 S *AP 的AWS SDK ABAP API 参考*。

------