

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# validate
<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>
```

## Parameters
<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\"" ]}
```

對於「規則」，指定規則檔案的字串版本清單。針對「資料」，指定資料檔案的字串版本清單。

`--payload` 指定 `--rules`且`--data`無法指定 時。

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

以 JSON 格式列印輸出。

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

顯示子句失敗，包括摘要。

`-V`, `--version`

列印版本資訊。

`-v`, `--verbose`

增加輸出詳細程度。可以多次指定。

`-z`, `--structured`

列印結構化和有效的 JSON/YAML 清單。此引數與下列引數衝突：verbose， print-json， show-summary： all/fail/pass/skip， output-format： 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、.jsn、.template

如果您指定 `--payload`旗標，請勿指定 `--data`選項。

`-i`、 `--input-parameters`（字串）

提供 JSON 或 YAML 中參數檔案的參數檔案或目錄，指定要與要用作合併內容的資料檔案搭配使用的任何其他參數。做為輸入傳遞的所有參數檔案都會合併，而此合併內容會再次與做為 引數傳遞的每個檔案合併`data`。因此，每個檔案都應該包含互斥屬性，而不會有任何重疊。重複使用此選項，支援傳遞多個值。

對於目錄引數，僅支援掃描具有下列副檔名的檔案：.yaml、.yml、.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` (string)

控制是否需要顯示摘要資料表。`--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>
+ [根據 Guard 規則驗證輸入資料](validating-rules.md)
+ [搭配 Guard 規則使用輸入參數](using-input-parameters.md)