验证 - AWS CloudFormation Guard

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

验证

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

语法

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

参数

-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

选项

-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 | yaml | single-line-summary | junit | 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 | all | pass | fail | skip

-t--type(字符串)

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

允许的值CFNTemplate

示例

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

输出

如果 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".]

另请参阅