

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

# 将输入参数与 AWS CloudFormation Guard 规则配合使用
<a name="using-input-parameters"></a>

AWS CloudFormation Guard 允许您在验证期间使用输入参数进行动态数据查找。当您需要在规则中引用外部数据时，此功能特别有用。但是，在指定输入参数键时，Guard 要求路径没有冲突。

## 如何使用
<a name="how-to-use-input-parameters"></a>

1. 使用`--input-parameters`或`-i`标志指定包含输入参数的文件。可以指定多个输入参数文件，这些文件将组合起来形成一个共同的上下文。输入参数键不能有冲突的路径。

1. 使用`--data`或`-d`标志指定要验证的实际模板文件。

## 示例用法
<a name="input-parameters-example-usage"></a>

1. 创建输入参数文件（例如，`network.yaml`）：

   ```
   NETWORK:
     allowed_security_groups: ["sg-282850", "sg-292040"]
     allowed_prefix_lists: ["pl-63a5400a", "pl-02cd2c6b"]
   ```

1. 在您的防护规则文件中引用以下参数（例如，`security_groups.guard`）：

   ```
   let groups = Resources.*[ Type == 'AWS::EC2::SecurityGroup' ]
   
   let permitted_sgs = NETWORK.allowed_security_groups
   let permitted_pls = NETWORK.allowed_prefix_lists
   rule check_permitted_security_groups_or_prefix_lists(groups) {
       %groups {
           this in %permitted_sgs or
           this in %permitted_pls
       }
   }
   
   rule CHECK_PERMITTED_GROUPS when %groups !empty {
       check_permitted_security_groups_or_prefix_lists(
          %groups.Properties.GroupName
       )
   }
   ```

1. 创建失败的数据模板（例如，`security_groups_fail.yaml`）：

   ```
   # ---
   # AWSTemplateFormatVersion: 2010-09-09
   # Description: CloudFormation - EC2 Security Group
   
   Resources:
     mySecurityGroup:
       Type: AWS::EC2::SecurityGroup
       Properties:
         GroupName: wrong
   ```

1. 运行验证命令：

   ```
   cfn-guard validate -r security_groups.guard -i network.yaml -d security_groups_fail.yaml
   ```

   在此命令中：
   + `-r`指定规则文件。
   + `-i`指定输入参数文件。
   + `-d`指定要验证的数据文件（模板）。

## 多个输入参数
<a name="multiple-input-parameters"></a>

您可以指定多个输入参数文件：

```
cfn-guard validate -r rules.guard -i params1.yaml -i params2.yaml -d template.yaml
```

用指定的所有文件都`-i`将合并为一个用于参数查找的单一上下文。