

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

# 设置 AWS CloudFormation Guard
<a name="setting-up"></a>

AWS CloudFormation Guard 是一个开源命令行界面 (CLI)。它为您提供了一种简单的、特定于域的语言，用于编写策略规则并根据这些规则验证其结构化分层 JSON 和 YAML 数据。这些规则可以代表与安全、合规性等相关的公司政策指导方针。结构化分层数据可以表示描述为代码的云基础架构。例如，您可以创建规则来确保他们始终在其模板中对加密的亚马逊简单存储服务 (Amazon S3) 存储桶进行建模。 CloudFormation 

以下主题提供有关如何使用所选操作系统或作为 AWS Lambda 功能安装 Guard 的信息。

**Topics**
+ [安装适用于 Linux 和 macOS 的 Guard](setting-up-linux.md)
+ [安装适用于 Windows 的防护](setting-up-windows.md)
+ [将 Guard 作为 AWS Lambda 功能安装](setting-up-lambda.md)

# 安装适用于 Linux 和 macOS 的 Guard
<a name="setting-up-linux"></a>

你可以使用预先构建 AWS CloudFormation Guard 的发行版二进制文件 Cargo 或 Homebrew 在 Linux 和 macOS 上安装。

## 从预先构建的发行版二进制文件安装 Guard
<a name="install-pre-built-binaries"></a>

使用以下步骤从预先构建的二进制文件安装 Guard。

1. 打开终端，然后运行以下命令。

   ```
   curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/aws-cloudformation/cloudformation-guard/main/install-guard.sh | sh
   ```

1. 运行以下命令来设置您的`PATH`变量。

   ```
   export PATH=~/.guard/bin:$PATH
   ```

   *结果：*您已成功安装了 Guard 并设置了`PATH`变量。

   1. （可选）要确认 Guard 的安装，请运行以下命令。

     ```
     cfn-guard --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard 3.1.2
     ```

## 安装货物防护
<a name="install-guard-from-cargo"></a>

Cargo 是 Rust 包管理器。完成以下步骤来安装 Rust，其中包括 Cargo。然后，安装 Guard from Cargo。

1. 从终端运行以下命令，然后按照屏幕上的说明安装 Rust。

   ```
   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
   ```

   1. （可选）对于 Ubuntu 环境，请运行以下命令。

     ```
     sudo apt-get update; sudo apt install build-essential
     ```

1. 配置您的`PATH`环境变量，然后运行以下命令。

   ```
   source $HOME/.cargo/env
   ```

1. 安装了 Cargo 后，运行以下命令来安装 Guard。

   ```
   cargo install cfn-guard
   ```

   *结果*：你已经成功安装了 Guard。

   1. （可选）要确认 Guard 的安装，请运行以下命令。

     ```
     cfn-guard --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard 3.1.2
     ```

## 从 Homebrew 安装 Guard
<a name="install-guard-from-homebrew"></a>

Homebrew 是一款适用于 macOS 和 Linux 的软件包管理器。完成以下步骤来安装 Homebrew。然后，从 Homebrew 中安装 Guard。

1. 从终端运行以下命令，然后按照屏幕上的说明安装 Homebrew。

   ```
   /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
   ```

1. 安装了 Homebrew 后，运行以下命令来安装 Guard。

   ```
   brew install cloudformation-guard
   ```

   *结果*：你已经成功安装了 Guard。

   1. （可选）要确认 Guard 的安装，请运行以下命令。

     ```
     cfn-guard --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard 3.1.2
     ```

# 安装适用于 Windows 的防护
<a name="setting-up-windows"></a>

你可以通过 Cargo 或 Ch AWS CloudFormation Guard ocolatey 在 Windows 上安装。

## 先决条件
<a name="w2aab8c16b5"></a>

要通过命令行界面构建 Guard，必须安装适用于 Visual Studio 2019 的构建工具。

1. 从 Visual [Studio 2019 版构建工具网站上下载微软 Visual](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019) C\$1\$1 构建工具。

1. 运行安装程序，然后选择默认值。

## 安装货物防护
<a name="install-guard-from-cargo"></a>

Cargo 是 Rust 包管理器。完成以下步骤来安装 Rust，其中包括 Cargo。然后，安装 Guard from Cargo。

1. [下载 Rust](https://forge.rust-lang.org/infra/other-installation-methods.html#other-ways-to-install-rustup) 然后运行 **rustup-init.exe**。

1. 在命令提示符下，选择 **1**，这是默认选项。

   该命令将返回以下输出。

   ```
   Rust is installed now. Great!
       
       To get started you may need to restart your current shell.
       This would reload its PATH environment variable to include
       Cargo's bin directory (%USERPROFILE%\.cargo\bin).
       
       Press the Enter key to continue.
   ```

1. 要完成安装，请按 E **nter** 键。

1. 安装了 Cargo 后，运行以下命令来安装 Guard。

   ```
   cargo install cfn-guard
   ```

   *结果*：你已经成功安装了 Guard。

   1. （可选）要确认 Guard 的安装，请运行以下命令。

     ```
     cfn-guard --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard 3.1.2
     ```

## 安装来自 Chocolatey 的守卫
<a name="install-guard-from-chocolatey"></a>

Chocolatey 是一款适用于 Windows 的软件包管理器。完成以下步骤安装 Chocolatey。然后，安装来自 Chocolatey 的 Guard。

1. 按照本指南[安装 Chocolat](https://chocolatey.org/install) ey

1. 安装了 Chocolatey 后，运行以下命令来安装 Guard。

   ```
   choco install cloudformation-guard
   ```

   *结果*：你已经成功安装了 Guard。

   1. （可选）要确认 Guard 的安装，请运行以下命令。

     ```
     cfn-guard --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard 3.1.2
     ```

# 将 Guard 作为 AWS Lambda 功能安装
<a name="setting-up-lambda"></a>

你可以 AWS CloudFormation Guard 通过 Rust 软件包管理器 Cargo 进行安装。*Guard as* a function (`cfn-guard-lambda`) 是围绕 Guard (`cfn-guard`) 的轻量级封装器，可用作 Lambda AWS Lambda函数。

## 先决条件
<a name="guard-as-lambda-prerequisites"></a>

在将 Guard 作为 Lambda 函数安装之前，必须满足以下先决条件：
+ AWS Command Line Interface (AWS CLI) 配置了部署和调用 Lambda 函数的权限。有关更多信息，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
+  AWS Identity and Access Management (IAM) 中的 AWS Lambda 执行角色。有关更多信息，请参阅[AWS Lambda 执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。
+ 在 CentOS/RHEL 环境中，将`musl-libc`软件包存储库添加到你的 yum 配置中。欲了解更多信息，请参阅 [ngompa](https://copr.fedorainfracloud.org/coprs/ngompa/musl-libc/) /musl-libc。

## 安装 Rust 软件包管理器
<a name="install-rust-and-cargo"></a>

Cargo 是 Rust 包管理器。完成以下步骤来安装 Rust，其中包括 Cargo。

1. 从终端运行以下命令，然后按照屏幕上的说明安装 Rust。

   ```
   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
   ```

   1. （可选）对于 Ubuntu 环境，请运行以下命令。

     ```
     sudo apt-get update; sudo apt install build-essential
     ```

1. 配置您的`PATH`环境变量，然后运行以下命令。

   ```
   source $HOME/.cargo/env
   ```

## 将 Guard 安装为 Lambda 函数（Linux、macOS 或 Unix）
<a name="to-isntall-guard-as-a-lambda"></a>

要将 Guard 安装为 Lambda 函数，请完成以下步骤。

1. 在您的命令终端上运行以下命令。

   ```
   cargo install cfn-guard-lambda
   ```

   1. （可选）要确认将 Guard 安装为 Lambda 函数，请运行以下命令。

     ```
     cfn-guard-lambda --version
     ```

     该命令将返回以下输出。

     ```
     cfn-guard-lambda 3.1.2
     ```

1. 要安装`musl`支持，请运行以下命令。

   ```
   rustup target add x86_64-unknown-linux-musl
   ```

1. 使用构建`musl`，然后在终端中运行以下命令。

   ```
   cargo build --release --target x86_64-unknown-linux-musl
   ```

   对于[自定义运行时](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)， AWS Lambda 需要一个名称为部署包.zip 文件`bootstrap`中的可执行文件。将生成的`cfn-lambda`可执行文件重命名为，`bootstrap`然后将其添加到.zip 存档中。

   1. 对于 macOS 环境，请在 Rust 项目的根目录或中创建您的货物配置文件。`~/.cargo/config`

     ```
     [target.x86_64-unknown-linux-musl]
     linker = "x86_64-linux-musl-gcc"
     ```

1. 切换到`cfn-guard-lambda`根目录。

   ```
   cd ~/.cargo/bin/cfn-guard-lambda
   ```

1. 在终端中运行以下命令。

   ```
   cp ./../target/x86_64-unknown-linux-musl/release/cfn-guard-lambda ./bootstrap && zip lambda.zip bootstrap && rm bootstrap
   ```

1. 运行以下命令以`cfn-guard`作为 Lambda 函数提交到您的账户。

   ```
   aws lambda create-function --function-name cfnGuard \
    --handler guard.handler \
    --zip-file fileb://./lambda.zip \
    --runtime provided \
    --role arn:aws:iam::444455556666:role/your_lambda_execution_role \
    --environment Variables={RUST_BACKTRACE=1} \
    --tracing-config Mode=Active
   ```

## 构建 Guard 并将其作为 Lambda 函数运行
<a name="build-and-run-lambda"></a>

要调用作`cfn-guard-lambda`为 Lambda 函数提交的，请运行以下命令。

```
aws lambda invoke --function-name cfnGuard \
  --payload '{"data":"input data","rules":["rule1","rule2"]}' \
  output.json
```

## 调用 Lambda 函数请求结构
<a name="calling-the-lambda-function"></a>

`cfn-guard-lambda`要求填写以下字段：
+ `data`— YAML 或 JSON 模板的字符串版本
+ `rules`— 规则集文件的字符串版本