

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

# 中的合规性扫描 AWS OpsWorks for Chef Automate
<a name="opscm-chefcompliance"></a>

**重要**  
AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用，新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问，可以通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

合规性扫描可让您根据预定义的策略（也称为*规则*）跟踪您的基础设施中托管节点的合规性。合规性视图使您可以定期审核您的应用程序是否存在漏洞和不合规的配置。Chef 提供了超过 100 个预定义的合规性*配置文件* - 适用于特定节点配置的规则集 - 您可以在合规性扫描中使用它们。您也可以使用 [Chef InSpec 语言](https://www.inspec.io/docs/)创建自己的自定义配置文件。

如果您的服务器尚未运行 Chef Automate 2.0，您可以通过安装 Audit 说明书手动设置 [Chef Compliance](https://www.chef.io/solutions/compliance/)。

**注意**  
与 AWS OpsWorks for Chef Automate 服务器关联的节点上支持的 Chef Infra 客户端代理软件 (`chef-client`) 的最低版本为 13。 *x*。我们建议运行最新、最稳定的`chef-client`版本，或至少 14.10.9。

**Topics**
+ [Chef Automate 2.0 中的合规性](#opscm-compliance-ca20)
+ [Chef Automate 1.*x* 中的合规性](#opscm-compliance-ca1x)
+ [更新合规性](#opscm-chefcompliance-updates)
+ [社区和自定义合规性配置文件](#opscm-compliance-custom)
+ [另请参阅](#opscm-compliance-seealso)

## Chef Automate 2.0 中的合规性
<a name="opscm-compliance-ca20"></a>

如果你的 AWS OpsWorks for Chef Automate 服务器运行的是 Chef Automate 2.0，请使用本节中的过程设置 Chef 合规性。

### 使用 Chef Automate 2.0 运行合规性扫描作业
<a name="opscm-compliance-scanjob"></a>

Chef Automate 2.0 包括 Chef InSpec 合规性扫描功能，以前需要手动设置和配置食谱。你可以在运行 Chef Automate 2.0 的 AWS OpsWorks for Chef Automate 服务器上运行*扫描作业*。作业可以立即运行（一次），也可以安排在以后运行，或者安排以特定的时间间隔运行（如每天或每隔两小时）。扫描作业的结果发送到合规性报告。您可以在 Chef Automate 控制面板中查看合规性扫描结果并对其执行操作。要打开 **Compliance (合规性)** 选项卡并查看报告，请在 Chef Automate 控制面板中的 **Scan Jobs (扫描作业)** 选项卡上，选择位于托管节点行右侧的 **Report (报告)**。

要在托管节点上运行扫描任务，您必须具有以下内容。
+ 至少有一个合规性配置文件安装在您的命名空间中。
+ [至少一个目标节点，可以是手动添加的，也可以是自动添加的 EC2 实例。](opscm-unattend-assoc.md)

在中 AWS OpsWorks for Chef Automate，以下目标支持扫描作业。
+ 手动添加的节点
+ `aws-ec2` 实例
+ 亚马逊云科技 区域

有关如何运行扫描作业的详细说明，请参阅 Chef 文档中的 [Chef Automate 扫描作业](https://automate.chef.io/docs/scan-jobs/)。

### （可选，Chef Automate 2.0）使用 Audit 说明书设置合规性
<a name="opscm-chefcompliance-setup"></a>

您可以在任何 AWS OpsWorks for Chef Automate 服务器上配置合规性。启动 AWS OpsWorks for Chef Automate 服务器后，您可以从 Chef Automate 控制面板安装配置文件，或者在 `Policyfile.rb` 策略文件中向 Audit 说明书属性添加所需的配置文件。初学者工具包中包含一个预填充的 `Policyfile.rb` 文件。

在将配置文件作为 Audit 说明书的属性编辑 `Policyfile.rb` 之后，运行 `chef push` 命令以将[ Audit 说明书](https://supermarket.chef.io/cookbooks/audit)以及在 `Policyfile.rb` 中指定的其他说明书上传到您的 Chef Automate 服务器。安装 Audit cookbook 还会为 [Chef](https://www.inspec.io/) 安装 gem InSpec，这是一款由 Chef 制作的开源测试和审计框架。对于 Chef Automate [2.0](https://discourse.chef.io/t/automate-2-version-20190410001346-released/14930)，选择 Audit 说明书的版本 7.1.0 或更高版本。该 InSpec 宝石必须是 2.2.102 或更高版本。

本部分的说明向您展示如何实施 `opsworks-audit` 说明书。审计食谱从 Chef Automate 服务器下载指定的配置文件，根据 **DevSec SSH 基准**配置文件评估节点，并在每次`chef-client`运行时报告合规性扫描的结果。<a name="compliance-installprof"></a>

**安装合规性配置文件**

1. 如果您尚未[登录到 Chef Automate 基于 Web 的控制面板](opscm-chef-dashboard.md)，请先登录。使用在创建 AWS OpsWorks for Chef Automate 服务器的过程中下载初学者工具包时收到的凭证。

1. 在 Chef Automate 控制面板中，选择 **Asset Store (资产存储)** 选项卡。  
![\[合规性配置文件\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_profiles.png)

1. 选择 **Available (可用)** 选项卡以查看预定义的配置文件。

1. 浏览配置文件列表。选择一个与至少一个受管节点的操作系统和配置相匹配的配置文件。要查看有关配置文件的详细信息，包括配置文件的目标违规和基本规则代码的说明，请选择配置文件条目右侧的 **>**。您可以选择多个配置文件。如果您要在入门套件中设置示例，请选择 **DevSec SSH 基准**。  
![\[Chef Compliance 配置文件详细信息视图\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_rule.png)

1. 要在您的 Chef Automate 服务器上安装所选配置文件，请选择 **Get**。

1. 安装配置文件后，它们会显示在 Chef Automate 控制面板的 **Profiles (配置文件)** 选项卡中。<a name="opscm-compliance-setup-policyfile"></a>

**使用 `Policyfile.rb` 安装说明书**

1. 查看初学者工具包中的 `Policyfile.rb`，可以看到 Audit 说明书的属性在 `['profiles']` 中指定 `ssh-baseline` 配置文件。

   ```
   # Define audit cookbook attributes
   default["opsworks-demo"]["audit"]["reporter"] = "chef-server-automate"
   default["opsworks-demo"]["audit"]["profiles"] = [
     {
       "name": "DevSec SSH Baseline",
       "compliance": "admin/ssh-baseline"
     }
   ]
   ```

1. 下载并安装 `Policyfile.rb` 中定义的说明书。

   ```
   chef install
   ```

   所有说明书的版本均记录在说明书的 `metadata.rb` 文件中。每次更改说明书后，必须在 `metadata.rb` 中提高该说明书的版本。

1. 将策略 `opsworks-demo`（在 `Policyfile.rb` 中定义）推送到服务器。

   ```
   chef push opsworks-demo
   ```

1. 验证策略的安装。运行如下命令。

   ```
   chef show-policy
   ```

   结果应与以下内容类似：

   ```
   opsworks-demo-webserver 
   ======================= 
   * opsworks-demo:  ec0fe46314
   ```

1. 如果您还没有将节点添加到服务器进行管理，请添加。要将您的第一个节点连接到 AWS OpsWorks for Chef Automate 服务器，请使用此入门套件中包含的`userdata.sh`脚本。它使用 OpsWorks `AssociateNode` API 将节点连接到您的服务器。

   您可以按照 [在中自动添加节点 AWS OpsWorks for Chef Automate](opscm-unattend-assoc.md) 中的步骤自动关联节点，或按照 [单独添加节点](opscm-addnodes-individually.md) 中的步骤，每次添加一个节点。

1. 您为节点更新运行列表后，`chef-client` 代理会在下次运行时运行您指定的配方。默认情况下每 1800 秒 (30 分钟) 发生一次。运行后，您可以从 Chef Automate 控制面板的 **Compliance** 选项卡中查看合规性结果并对其执行操作。  
![\[Chef Compliance 扫描结果\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_scan.png)

### 运行合规性扫描
<a name="opscm-chefcompliance-scan"></a>

在配置节点运行列表并首次运行代理之后，应该很快会在 Chef Automate 控制面板中看到合规性扫描结果。

![\[Chef Compliance 报告页面视图\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_reporting.png)


在 Chef Automate 控制面板中，选择 **Compliance** 选项卡。在左侧导航窗格中，选择 **Reporting**。选择 **Profiles** 选项卡，选择 **Scan Results**，然后选择扫描失败的节点，以详细了解导致节点失败的规则。

![\[Compliance 不合规结果列表\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_results.png)


通常，您会看到不合规的扫描结果，因为新节点尚未满足 **DevSec SSH 基准**配置文件中的所有规则。[DevSec Hardening](https://github.com/dev-sec) Framework 是一个基于社区的项目，它提供了一些食谱来修复违反 **DevSec SSH 基准**配置文件中规则的问题。

### （可选）解决不合规结果
<a name="opscm-chefcompliance-resolve"></a>

入门套件包括一本开源食谱`ssh-hardening`，你可以运行它来修复针对 **DevSec SSH Bas** eline 配置文件运行的不合规结果。

**注意**  
该`ssh-hardening`食谱会对您的节点进行更改以符合 **DevSec SSH 基准**规则。在任何生产节点上运行本食谱之前，请在Chef Automate控制台中查看有关 **DevSec SSH基准**配置文件的详细信息，以了解该食谱针对的规则违规行为。在任何生产节点上运行开源 [https://github.com/dev-sec/chef-ssh-hardening](https://github.com/dev-sec/chef-ssh-hardening) 说明书之前，请查看此说明书的信息。

**运行 `ssh-hardening` 说明书**

1. 在文本编辑器中，将 `ssh-hardening` 说明书追加到 `Policyfile.rb` 的运行列表之后。`Policyfile.rb` 运行列表应与以下内容匹配。

   ```
   run_list  'chef-client', 'opsworks-webserver', 'audit', 'ssh-hardening'
   ```

1. 更新 `Policyfile.rb` 并将其推送至您的 AWS OpsWorks for Chef Automate 服务器。

   ```
   chef update Policyfile.rb
      chef push opsworks-demo
   ```

1. 与 `opsworks-demo` 策略关联的节点将自动更新运行列表，并在下次运行 `chef-client` 时应用 `ssh-hardening` 说明书。

   由于您在使用 `chef-client` 说明书，将以固定间隔检查节点 (默认情况下为 30 分钟)。下次签入时，该`ssh-hardening`食谱将运行，它有助于提高节点安全性，以满足 **DevSec SSH Baseline** 配置文件的规则。

1. 在首次运行 `ssh-hardening` 说明书之后，请等待 30 分钟，以便合规性扫描再次运行。在 Chef Automate 控制面板中查看结果。应解决在首次运行 **DevSec SSH 基准**扫描时出现的不合规结果。

## Chef Automate 1.*x* 中的合规性
<a name="opscm-compliance-ca1x"></a>

如果你的 AWS OpsWorks for Chef Automate 服务器正在运行 Chef Automate 1. *x*，使用本节中的过程设置 Chef 合规性。

### （可选，Chef Automate 1.*x*）设置 Chef Compliance
<a name="opscm-chefcompliance-setup"></a>

你可以在任何 AWS OpsWorks for Chef Automate 服务器上配置 Chef 合规性。启动 AWS OpsWorks for Chef Automate 服务器后，在 Chef Automate 控制面板的配置文件中选择要运行的配置文件。安装配置文件后，请运行 `berks` 命令以将 [Audit 说明书](https://supermarket.chef.io/cookbooks/audit)上传到您的 Chef Automate 服务器。安装 Audit cookbook 还会安装 gem [InSpec](https://www.inspec.io/)，这是一款由 Chef 制作的开源测试框架，可让您将自动化测试集成到部署管道的任何阶段。对于 Chef Automate 1.*x*，选择 Audit 说明书的版本 5.0.1 或更高版本。 InSpec Gem 必须是 1.24.0 或更高版本。

入 AWS OpsWorks for Chef Automate 门套件包括一本包装食谱`opsworks-audit`，它可以为你下载并安装正确版本的 Chef's Audit 食谱。`opsworks-audit`本食谱还指示`chef-client`代理根据你在本主题后面从 Chef 的合规性控制台安装的 **DevSecSSH 基准**配置文件来评估节点。您可以使用任一说明书设置合规性，以满足您的偏好。本部分的说明向您展示如何实施 `opsworks-audit` 说明书。<a name="compliance-installprof"></a>

**安装合规性配置文件**

1. 如果您尚未[登录到 Chef Automate 基于 Web 的控制面板](opscm-chef-dashboard.md)，请先登录。使用您在创建 AWS OpsWorks for Chef Automate 服务器时下载入门套件时收到的凭据。

1. 在 Chef Automate 控制面板中，选择 **Compliance** 选项卡。  
![\[Chef Compliance 配置文件\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_profiles_ca1.png)

1. 在左侧导航栏中，选择 **Profile Store**，然后选择 **Available** 选项卡以查看预定义的配置文件。

1. 浏览配置文件列表。选择一个与至少一个受管节点的操作系统和配置相匹配的配置文件。要查看有关配置文件的详细信息，包括配置文件的目标违规和基本规则代码的说明，请选择配置文件条目右侧的 **>**。您可以选择多个配置文件。  
![\[Chef Compliance 配置文件详细信息视图\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_rule_ca1.png)

1. 要在您的 Chef Automate 服务器上安装所选配置文件，请选择 **Get**。

1. 下载完成后，请转到下一过程。<a name="opscm-compliance-setup-cookbook"></a>

**安装并设置 `opsworks-audit` 说明书**

1. 此步骤是可选的，但它可以节省步骤 6 中将配方添加到节点运行列表的时间。编辑 `roles/opsworks-example-role.rb` 文件，该文件包含在创建 AWS OpsWorks for Chef Automate 服务器时下载的初学者工具包中。添加以下行。最后一行有注释，因为添加 `ssh-hardening` 说明书和配方，在合规性扫描运行之后来解析不合规节点是可选的。

   ```
   run_list(
        "recipe[chef-client]",
        "recipe[apache2]",
        "recipe[opsworks-audit]"
        # "recipe[ssh-hardening]"
          )
   ```

1. 使用文本编辑器在 Berksfile 中指定所需的说明书。初学者工具包中提供了示例 Berksfile。在此示例中，我们会安装 Chef Infra 客户端 (`chef-client`) 说明书、`apache2` 说明书和 `opsworks-audit` 说明书。您的 Berksfile 应类似于以下内容。

   ```
   source 'https://supermarket.chef.io
        cookbook 'chef-client'
        cookbook 'apache2', '~> 5.0.1'
        cookbook 'opsworks-audit', path: 'cookbooks/opsworks-audit', '~> 1.0.0'
   ```

   所有说明书的版本均记录在说明书的 `metadata.rb` 文件中。每次更改说明书后，必须在 `metadata.rb` 中提高该说明书的版本。

1. 运行以下命令，在本地或工作计算机上的 `cookbooks` 文件夹中下载并安装说明书。

   ```
   berks vendor cookbooks
   ```

1. 运行以下命令，将分发的说明书上传到您的 AWS OpsWorks for Chef Automate 服务器。

   ```
   knife upload .
   ```

1. 运行以下命令，显示服务器上当前可用的说明书列表，验证是否安装了 `opsworks-audit` 说明书。

   ```
   knife cookbook list
   ```

1. 如果您还没有将节点添加到服务器进行管理，请添加。您可以按照 [在中自动添加节点 AWS OpsWorks for Chef Automate](opscm-unattend-assoc.md) 中的步骤自动关联节点，或按照 [单独添加节点](opscm-addnodes-individually.md) 中的步骤，每次添加一个节点。编辑节点的运行列表，添加您在步骤 1 中指定的角色 `opsworks-example-role`。在本示例中，我们编辑 `RUN_LIST` 脚本中的 `userdata` 属性，用于自动关联节点。

   ```
   RUN_LIST="role[opsworks-example-role]"
   ```

   如果您跳过步骤 1，也没有设置角色，请将单个配方的名称添加到运行列表中。保存您的更改，然后按照中的[第 3 步：使用自动化关联脚本创建实例](opscm-unattend-assoc.md#opscm-unattend-script)步骤将您的用户数据脚本应用于 Amazon EC2 实例。

   ```
   RUN_LIST="recipe[chef-client],recipe[apache2],recipe[opworks-audit]"
   ```

1. 您为节点更新运行列表后，`chef-client` 代理会在下次运行时运行您指定的配方。默认情况下每 1800 秒 (30 分钟) 发生一次。运行后，合规性结果将显示在 Chef Automate 控制面板中。

### 运行合规性扫描
<a name="opscm-chefcompliance-scan"></a>

在配置节点运行列表并首次运行代理守护程序之后，应该很快会在 Chef Automate 控制面板中看到合规性扫描结果。

![\[Chef Compliance 报告页面视图\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_reporting_ca1.png)


在 Chef Automate 控制面板中，选择 **Compliance** 选项卡。在左侧导航窗格中，选择 **Reporting**。选择 **Profiles** 选项卡，选择 **Scan Results**，然后选择扫描失败的节点，以详细了解导致节点失败的规则。

![\[Chef Compliance 不合规结果列表\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_compliance_results_ca1.png)


通常，您会看到不合规的扫描结果，因为新节点尚未满足 **DevSec SSH 基准**配置文件中的所有规则。[DevSec Hardening](https://github.com/dev-sec) Framework 是一个基于社区的项目，它提供了一些食谱来修复违反 **DevSec SSH 基准**配置文件中规则的问题。

### （可选）解决不合规结果
<a name="opscm-chefcompliance-resolve"></a>

入门套件包括一本开源食谱`ssh-hardening`，你可以运行它来修复针对 **DevSec SSH Bas** eline 配置文件运行的不合规结果。

**注意**  
该`ssh-hardening`食谱会对您的节点进行更改以符合 **DevSec SSH 基准**规则。在任何生产节点上运行本食谱之前，请在Chef Automate控制台中查看有关 **DevSec SSH基准**配置文件的详细信息，以了解该食谱针对的规则违规行为。在任何生产节点上运行开源 [https://github.com/dev-sec/chef-ssh-hardening](https://github.com/dev-sec/chef-ssh-hardening) 说明书之前，请查看此说明书的信息。

**运行 `ssh-hardening` 说明书**

1. 在文本编辑器中，将 `ssh-hardening` 说明书附加到您的 Berksfile。您的 Berksfile 应类似于以下内容。

   ```
   source 'https://supermarket.chef.io'
        cookbook 'chef-client'
        cookbook 'apache2', '~> 5.0.1'
        cookbook 'opsworks-audit', path: 'cookbooks/opsworks-audit', '~> 1.0.0' # optional
        cookbook 'ssh-hardening'
   ```

1. 运行以下命令，将 `ssh-hardening` 说明书下载到本地说明书文件夹，然后再将它上传到 AWS OpsWorks for Chef Automate 服务器。

   ```
   berks vendor cookbooks
   knife upload .
   ```

1. 根据 [安装并设置 `opsworks-audit` 说明书](#opscm-compliance-setup-cookbook) 步骤 1 和 6 的介绍，将 `ssh-hardening` 配方添加到您的节点运行列表中。

   如果您更新 `opsworks-example-role.rb` 文件，请运行以下命令，将改动上传到您的服务器。

   ```
   knife upload .
   ```

   如果您直接更新运行列表，请运行以下命令上传改动。节点名称通常为实例 ID。

   ```
   knife node run_list add <node name> 'recipe[ssh-hardening]'
   ```

1. 由于您在使用 `chef-client` 说明书，将以固定间隔检查节点 (默认情况下为 30 分钟)。下次签入时，该`ssh-hardening`食谱将运行，它有助于提高节点安全性，以满足 **DevSec SSH Baseline** 配置文件的规则。

1. 在首次运行 `ssh-hardening` 说明书之后，请等待 30 分钟，以便合规性扫描再次运行。在 Chef Automate 控制面板中查看结果。应解决在首次运行 **DevSec SSH 基准**扫描时出现的不合规结果。

## 更新合规性
<a name="opscm-chefcompliance-updates"></a>

在 AWS OpsWorks for Chef Automate 服务器上，合规性功能由您的定期[系统维护](opscm-maintenance.md)自动更新。随着 Chef Automate、Chef Infra Server 和 Chef InSpec 的更新版本可用于您的 AWS OpsWorks for Chef Automate 服务器，您可能需要检查和更新服务器上运行的 Audit cookbook 和 Chef InSpec gem 的支持版本。您已经安装在 AWS OpsWorks for Chef Automate 服务器上的配置文件不会作为维护的一部分进行更新。

## 社区和自定义合规性配置文件
<a name="opscm-compliance-custom"></a>

Chef 目前包括超过 100 个合规性扫描配置文件。您可以将社区和自定义配置文件添加到列表中，然后根据这些配置文件下载和运行合规性扫描，就像对程序附带的配置文件一样。[Chef Supermarket](https://supermarket.chef.io/tools?q=&type=compliance_profile) 提供了基于社区的合规性配置文件。自定义配置文件是基于 Ruby 的程序，其中包含用于指定扫描规则的控件文件夹。

## 另请参阅
<a name="opscm-compliance-seealso"></a>
+ [Chef Compliance 公告博客文章](https://blog.chef.io/2017/07/05/chef-automate-release-july-2017/)
+ [Chef Automate 合规性在线培训](https://training.chef.io/instructor-led-training/chef-automate-compliance)
+ [厨师 InSpec](https://www.inspec.io/)网站
+ [厨师 InSpec 教程](https://www.inspec.io/tutorials/)