

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

# 验证
<a name="cfn-guard-validate"></a>

根据 AWS CloudFormation Guard 规则验证数据以确定成功或失败。

## 语法
<a name="cfn-guard-validate-synopsis"></a>

```
cfn-guard validate
--data <value>
--output-format <value>
--rules <value>
--show-summary <value>
--type <value>
```

## 参数
<a name="cfn-guard-validate-flags"></a>

`-a`, `--alphabetical`

验证按字母顺序排列的目录中的文件。

`-h`, `--help`

打印帮助信息。

`-m`, `--last-modified`

验证按上次修改时间排序的目录中的文件。

`-P`, `--payload`

通过以下方式提供以下 JSON 格式的规则和数据`stdin`：

```
{"rules":["<rules 1>", "<rules 2>", ...], "data":["<data 1>", "<data 2>", ...]}
```

例如：

```
{"data": ["{\"Resources\":{\"NewVolume\":{\"Type\":\"AWS::EC2::Volume\",\"Properties\":{\"Size\":500,\"Encrypted\":false,\"AvailabilityZone\":\"us-west-2b\"}},\"NewVolume2\":{\"Type\":\"AWS::EC2::Volume\",\"Properties\":{\"Size\":50,\"Encrypted\":false,\"AvailabilityZone\":\"us-west-2c\"}}},\"Parameters\":{\"InstanceName\":\"TestInstance\"}}","{\"Resources\":{\"NewVolume\":{\"Type\":\"AWS::EC2::Volume\",\"Properties\":{\"Size\":500,\"Encrypted\":false,\"AvailabilityZone\":\"us-west-2b\"}},\"NewVolume2\":{\"Type\":\"AWS::EC2::Volume\",\"Properties\":{\"Size\":50,\"Encrypted\":false,\"AvailabilityZone\":\"us-west-2c\"}}},\"Parameters\":{\"InstanceName\":\"TestInstance\"}}"], "rules" : [ "Parameters.InstanceName == \"TestInstance\"","Parameters.InstanceName == \"TestInstance\"" ]}
```

对于 “规则”，指定规则文件的字符串版本列表。在 “data” 中，指定数据文件的字符串版本列表。

何时`--payload`已指定`--rules`，`--data`无法指定。

`-p`, `--print-json`

以 JSON 格式打印输出。

`-s`, `--show-clause-failures`

显示条款失败，包括摘要。

`-V`, `--version`

打印版本信息。

`-v`, `--verbose`

增加输出详细程度。可以多次指定。

`-z`, `--structured`

打印出结构化且有效的输出JSON/YAML. This argument conflicts with the following arguments: verbose, print-json, show-summary: all/fail/pass/skip格式列表： single-line-summary

## 选项
<a name="cfn-guard-validate-options"></a>

`-d`，`--data`（字符串）

以 JSON 或 YAML 格式提供数据文件或数据文件目录。支持通过重复使用此选项传递多个值。

示例：`--data template1.yaml --data ./data-dir1 --data template2.yaml`

对于`data-dir1`上述目录参数，仅支持对具有以下扩展名的文件进行扫描：.yaml、.yml、.json、.json、.jsn、.template

如果您指定了标`--payload`志，请不要指定该`--data`选项。

`-i`，`--input-parameters`（字符串）

提供 JSON 或 YAML 格式的参数文件或参数文件目录，用于指定要使用的任何其他参数以及用作组合上下文的数据文件。所有作为输入传递的参数文件都会被合并，这个组合的上下文再次与作为参数传递的每个文件合并`data`。因此，每个文件都应包含互斥的属性，没有任何重叠。支持通过重复使用此选项传递多个值。

对于目录参数，仅支持对具有以下扩展名的文件进行扫描：.yaml、.yml、.json、.json、.jsn、.template

`-o`，`--output-format`（字符串）

指定输出的格式。

*默认值*：`single-line-summary`

*允许的值*：`json` \$1 `yaml` \$1 `single-line-summary` \$1 `junit` \$1 `sarif`

`-r`，`--rules`（字符串）

提供规则文件或规则文件目录。支持通过重复使用此选项传递多个值。

示例：`--rules rule1.guard --rules ./rules-dir1 --rules rule2.guard`

对于`rules-dir1`上述目录参数，仅支持对具有以下扩展名的文件进行扫描：.guard、.ruleset

如果您指定了标`--payload`志，请不要指定该`--rules`选项。

`--show-summary`（字符串）

控制是否需要显示汇总表。 `--show-summary fail`（默认）或`--show-summary pass,fail`（仅显示通过/失败的规则）或`--show-summary none`（将其关闭）或`--show-summary all`（显示所有通过、失败或跳过的规则）。

*默认值*：`fail`

*允许的值*：`none` \$1 `all` \$1 `pass` \$1 `fail` \$1 `skip`

`-t`，`--type`（字符串）

提供输入数据的格式。当您指定输入数据类型时，Guard 会在输出中显示 CloudFormation 模板资源的逻辑名称。默认情况下，Guard 会显示属性路径和值，例如`Property [/Resources/vol2/Properties/Encrypted`。

*允许的值*：`CFNTemplate`

## 示例
<a name="cfn-guard-validate-examples"></a>

```
cfn-guard validate --data example.json --rules rules.guard
```

## Output
<a name="cfn-guard-validate-output"></a>

如果 Guard 成功验证了模板，则该`validate`命令将返回退出状态`0`（`$?`在 bash 中）。如果 Guard 发现了违反规则的情况，则该`validate`命令将返回失败规则的状态报告。

```
example.json Status = FAIL
FAILED rules
rules.guard/policy_effect_is_deny    FAIL
---
Evaluation of rules rules.guard against data example.json 
--
Property [/path/to/Effect] in data [example.json] is not compliant with [policy_effect_is_deny] because provided value ["Allow"] did not match expected value ["Deny"]. Error Message [ Policy statement "Effect" must be "Deny".]
```

## 另请参阅
<a name="cfn-guard-validate-see-also"></a>
+ [根据防护规则验证输入数据](validating-rules.md)
+ [将输入参数与防护规则配合使用](using-input-parameters.md)