

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

# 为 AWS Config 自定义合规包创建模板
<a name="custom-conformance-pack"></a>

自定义合规包是 AWS Config 规则和修正措施的唯一集合，可以一起部署在账户和 AWS 区域中，也可以在 AWS Organizations 中跨组织部署。

要创建自定义合规包，请按照以下**自定义模板**部分中的步骤创建一个 YAML 文件，其中包含要使用的 [AWS Config 托管规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html)或 [AWS Config 自定义规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html)列表。

**Topics**
+ [术语](#custom-conformance-pack-terminology)
+ [自定义模板](#create-yaml-file.title)

## 术语
<a name="custom-conformance-pack-terminology"></a>

*AWS Config 托管规则*是 AWS Config 拥有的预定义规则。

*AWS Config 自定义规则*是您从头开始创建的规则。

有两种创建 AWS Config 自定义规则的方法：使用 Lambda 函数（[AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-function)）以及使用策略即代码语言 Guard（[Guard GitHub 存储库](https://github.com/aws-cloudformation/cloudformation-guard)）。使用 AWS Lambda 创建的 AWS Config 自定义规则称为 *AWS Config 自定义 Lambda 规则*，使用 Guard 创建的 AWS Config 自定义规则称为 *AWS Config 自定义策略规则*。

## 自定义模板
<a name="create-yaml-file.title"></a>

 **创建 YAML 文件** 

要创建 YAML 文件，请打开文本编辑器并将该文件另存为 *.yaml*。

**注意**  
您的文件将包含**参数**和**资源**部分。

**参数**

YAML 文件中的 `Parameters` 部分用于您稍后将在 `Resources` 部分中添加的一组 AWS Config 规则的规则参数。通过将以下代码块复制并粘贴到您的 YAML 文件中，根据需要对其进行自定义，然后对每个规则参数重复此操作来创建 `Parameters` 部分。

```
Parameters:    
    NameOfRuleParamNameOfRuleParameter: 
        Default: Parameter value
        Type: Type    
    ...
```

例如：

```
Parameters:
    IamPasswordPolicyParamMinimumPasswordLength:
        Default: '14'
        Type: String
```

**注意**  
在选择 AWS Config 规则来构建您的自定义合规包时，请检查您的账户中是否预置了将根据 AWS Config 规则进行评估的资源。

1. 参数部分中 `Parameters:` 后面的第一行是连接字符串 *NameOfRule* \$1 Param \$1 *NameOfRuleParameter*。

   1. 用您为该规则创建的一致名称替换。`NameOfRule`例如，这可能是 **iam-password-policy** 规则的 **IamPasswordPolicy**。

   1. 键入。`Param`

   1. 然后，将 `NameOfRuleParameter` 替换为特定规则的规则参数名称。对于 AWS Config 托管规则，规则参数的名称位于 [AWS Config 托管规则列表](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)中（例如，**MinimumPasswordLength** 是 **iam-password-policy** 规则的规则参数名称）。对于 AWS Config 自定义规则，规则参数名称是您在创建该规则时选择的名称。

1. 如果您使用的是 AWS Config 托管规则，请在托管规则列表中找到相应的 AWS Config 规则，这样您就可以知道特定规则的可接受 `Default` 和 `Type` 值。对于 AWS Config 自定义规则，请使用您在创建规则时选择的值。
**注意**  
对于每个参数，必须指定。`Type``Type` 可以是“String”、“int”、“double”、“CSV”、“boolean”和“StringMap”其中之一。

**资源**。

`Resources` 部分列出了要添加到您的自定义合规包中的规则。在 `Parameters` 部分正下方添加以下 `Resources` 块，根据需要对其进行自定义，然后对每条规则重复此操作。有关规格的更多信息，请参阅 [AWS::Config::ConfigRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#aws-resource-config-configrule-syntax)。

```
Resources:
     NameOfRule:
        Properties:
            ConfigRuleName: ActualConfigRuleName  
            InputParameters:
                NameOfRuleParameter: !Ref NameOfRuleParamNameOfRuleParameter
            Source:
                Owner: Owner
                SourceIdentifier: SOURCE_IDENTIFIER
        Type: AWS::Config::ConfigRule
     ...
```

例如：

```
Resources:
    IamPasswordPolicy:
        Properties:
            ConfigRuleName: iam-password-policy
            InputParameters:
                MinimumPasswordLength: !Ref IamPasswordPolicyParamMinimumPasswordLength
            Source:
                Owner: AWS
                SourceIdentifier: IAM_PASSWORD_POLICY
        Type: AWS::Config::ConfigRule
```

**注意**  
在选择 AWS Config 规则来构建您的自定义合规包时，请检查您的账户中是否预置了将根据 AWS Config 规则进行评估的资源。有关更多信息，请参阅[支持的资源类型](https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html)。

1. 将 `NameOfRule` 替换为您在 `Parameters` 部分中创建的相同名称。

1. 对于 AWS Config 托管规则，请将 `ActualConfigRuleName` 替换为 [AWS Config 托管规则列表](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)中相应规则页面的标题。对于 AWS Config 自定义规则，请使用您在创建规则时选择的配置规则名称。

1. 将 `NameOfRuleParameter` 替换为您在 `Parameters` 部分中使用的相同名称。在冒号后面，复制并粘贴您在 `Parameters` 部分中创建的连接字符串 `!Ref` \$1 *NameOfRule* \$1 Param \$1 *NameOfRuleParameter*。

1. 将 `Owner` 更改为相应的值。
**注意**  
**AWS Config 托管规则**  
对于 AWS Config 托管规则，`Owner` 的值将为。`AWS`  
**AWS Config 自定义规则**  
对于使用 Guard 创建的 AWS Config 自定义规则，`Owner` 的值将为。`CUSTOM_POLICY`对于使用 Lambda 创建的 AWS Config 自定义规则，`Owner` 的值将为。`CUSTOM_LAMBDA`

1. 将 `SOURCE_IDENTIFIER` 更改为相应的值。
**注意**  
**AWS Config 托管规则**  
对于 AWS Config 托管规则，按照从 [AWS Config 托管规则列表](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)中选择的规则中的链接复制标识符（例如，**access-keys-rotated** 规则的源标识符是 **ACCESS\$1KEYS\$1ROTATED**）。   
**AWS Config 自定义规则**  
对于使用 Lambda 创建的 AWS Config 自定义规则，`SourceIdentifier` 为规则的 AWS Lambda 函数的 Amazon 资源名称（ARN），例如。`arn:aws:lambda:us-east-2:123456789012:function:ActualConfigRuleName`对于使用 Guard 创建的 AWS Config 自定义规则，不需要此字段。

总而言之，填写的自定义合规包开始时应看起来与以下内容类似，这是一个使用以下 AWS Config 托管规则的示例：**iam-password-policy**、**access-keys-rotated** 和 **iam-user-unused-credentials-check**。

```
Parameters:
    IamPasswordPolicyParamMinimumPasswordLength:
        Default: '14'
        Type: String
    AccessKeysRotatedParamMaxAccessKeyAge:
        Default: '90'
        Type: String
    IamUserUnusedCredentialsCheckParamMaxCredentialUsageAge:
        Default: '45'
        Type: String
Resources:
    IamPasswordPolicy:
        Properties:
            ConfigRuleName: iam-password-policy
            InputParameters:
                MinimumPasswordLength: !Ref IamPasswordPolicyParamMinimumPasswordLength
            Source:
                Owner: AWS
                SourceIdentifier: IAM_PASSWORD_POLICY
        Type: AWS::Config::ConfigRule    
    AccessKeysRotated:
        Properties:
            ConfigRuleName: access-keys-rotated
            InputParameters:
                maxAccessKeyAge: !Ref AccessKeysRotatedParamMaxAccessKeyAge
            Source:
                Owner: AWS
                SourceIdentifier: ACCESS_KEYS_ROTATED
        Type: AWS::Config::ConfigRule
    IamUserUnusedCredentialsCheck:
        Properties:
            ConfigRuleName: iam-user-unused-credentials-check
            InputParameters:
                maxCredentialUsageAge: !Ref IamUserUnusedCredentialsCheckParamMaxCredentialUsageAge
            Source:
                Owner: AWS
                SourceIdentifier: IAM_USER_UNUSED_CREDENTIALS_CHECK
        Type: AWS::Config::ConfigRule
```