

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

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

**重要**  
AWS OpsWorks for Chef Automate 已於 2024 年 5 月 5 日結束生命週期，並已針對新客戶和現有客戶停用。我們建議現有客戶遷移至 Chef SaaS 或替代解決方案。如果您有任何問題，可以在 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

合規掃描可讓您根據預先定義的政策 (也稱為*規則*)，追蹤基礎設施中受管節點的合規狀況。合規檢視可讓您定期稽核應用程式是否有漏洞與不合規的組態。Chef 提供百種以上的預先定義合規*描述檔*，其為適用於特定節點組態的規則集合，可讓您用於合規掃描。您也可以使用 [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 Compliance。

### 使用 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 2.0 儀表板中檢視合規掃描結果，並採取因應動作。若要開啟 **Compliance (合規)** 標籤和檢視報告，請在 Chef Automate 儀表板上的 **Scan Jobs (掃描任務)** 標籤中，在受管節點列的右邊選擇 **Report (報告)**。

若要在受管節點上執行掃描任務，您必須具備下列條件。
+ 您的命名空間至少已安裝一個合規描述檔。
+ 至少一個目標節點，可透過手動新增或 EC2 執行個體[自動新增](opscm-unattend-assoc.md)。

在 中 AWS OpsWorks for Chef Automate，下列目標支援掃描任務。
+ 手動新增的節點
+ `aws-ec2` 執行個體
+ AWS 區域

如需如何執行掃描任務的相關詳細資訊，請參閱 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` 檔案。

在您透過描述檔編輯 `Policyfile.rb` 做為 Audit 技術指南屬性之後，請執行 `chef push` 命令，將 [Audit 技術指南](https://supermarket.chef.io/cookbooks/audit)和 `Policyfile.rb` 中所指定的其他技術指南，上傳至您的 Chef Automate 伺服器。安裝 Audit 技術指南時，也會安裝 [Chef InSpec](https://www.inspec.io/) 的 Gem，這是由 Chef 產生的開放原始碼測試和稽核架構。用於 Chef Automate [2.0](https://discourse.chef.io/t/automate-2-version-20190410001346-released/14930) 時，選擇 Audit 技術指南的 7.1.0 或更新版本。InSpec Gem 套件必須為 2.2.102 或更新版本。

本節中的指示會說明如何實作 `opsworks-audit` 技術指南。Audit 技術指南會從 Chef Automate 伺服器下載指定的描述檔，針對 **DevSec SSH Baseline (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_tw/opsworks/latest/userguide/images/opscm_compliance_profiles.png)

1. 選擇 **Available (可用)** 標籤以查看預先定義的描述檔。

1. 瀏覽描述檔清單。選擇至少符合其中一個受管節點之作業系統和組態的描述檔。若要查看描述檔的詳細資訊，包括描述檔的目標違反情況描述和基本規則程式碼，請選擇描述檔項目右側的 **>**。您可以選擇多個描述檔。如果您正在設定入門套件中的範例，請選擇 **DevSec SSH Baseline (DevSec SSH 基準)**。  
![\[Chef 合規描述檔詳細資訊檢視\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_rule.png)

1. 若要在您的 Chef Automate 伺服器上安裝選取的描述檔，請選擇 **Get (取得)**。

1. 安裝描述檔後，他們會顯示在 **Profiles (描述檔)** 標籤的 Chef Automate 儀表板。<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. 將 `Policyfile.rb` 中所定義的政策 `opsworks-demo` 推送到您的伺服器。

   ```
   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 合規掃描結果\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_scan.png)

### 執行合規掃描
<a name="opscm-chefcompliance-scan"></a>

在您設定好節點執行清單，並執行第一次代理程式之後，應該很快就會在 Chef Automate 儀表板中看到合規掃描結果。

![\[Chef Compliance 報告頁面檢視\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_reporting.png)


在 Chef Automate 儀表板上，選擇 **Compliance (合規)** 標籤。在左側導覽窗格中，選擇 **Reporting (報告)**。選擇 **Profiles (描述檔)** 標籤，選擇 **Scan Results (掃描結果)**，然後選擇含掃描錯誤的節點，以進一步了解導致節點發生錯誤的規則。

![\[Chef Compliance 的錯誤結果清單\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_results.png)


一般來說，當新節點尚未滿足 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔中的所有規則時，您就會看到未合規的掃描結果。[DevSec 強化框架](https://github.com/dev-sec)是一種以社群為基礎的專案，其中提供的技術指南可修復違反 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔規則的問題。

### (選用) 解決未合規的結果
<a name="opscm-chefcompliance-resolve"></a>

入門套件包含開放原始碼技術指南 `ssh-hardening`；您可以執行此技術指南來修正依據 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔執行時發生的未合規結果。

**注意**  
`ssh-hardening` 技術指南會變更您的節點以符合 **DevSec SSH Baseline (DevSec SSH 基準)** 規則。在任何生產節點上執行此技術指南之前，請先檢閱 Chef Automate 主控台中 **DevSec SSH Baseline (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` 政策相關聯的節點會自動更新執行清單，並將 `ssh-hardening` 技術指南套用到下一次的 `chef-client` 執行。

   由於您使用的是 `chef-client` 技術指南，因此節點會定期 (預設為每隔 30 分鐘一次) 進行狀態檢查。在下一次狀態檢查時，會執行 `ssh-hardening` 技術指南並協助提升節點安全性，以符合 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔的規則。

1. 在第一次執行 `ssh-hardening` 技術指南之後，請等待 30 分鐘再次執行 Compliance (合規) 掃描。在 Chef Automate 儀表板中查看結果。第一次執行 **DevSec SSH Baseline (DevSec SSH 基準)** 掃描時發生的未合規結果應該已經解決。

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

如果您的 AWS OpsWorks for Chef Automate 伺服器正在執行 Chef Automate 1.*x*，請使用本節中的程序來設定 Chef Compliance。

### (選用、Chef Automate 1.*x*) 設定 Chef Compliance
<a name="opscm-chefcompliance-setup"></a>

您可以在任何 AWS OpsWorks for Chef Automate 伺服器上設定 Chef Compliance。啟動 AWS OpsWorks for Chef Automate 伺服器之後，請選擇您想要透過 Chef Automate 儀表板中的描述檔來執行的描述檔。安裝描述檔之後，請執行 `berks` 命令，將 [Audit 技術指南](https://supermarket.chef.io/cookbooks/audit)上傳至您的 Chef Automate 伺服器。安裝 Audit 技術指南時，也會一併安裝適用於 [InSpec](https://www.inspec.io/) 的 Gem 套件，這是由 Chef 產生的開放原始碼測試架構，可讓您將自動化測試整合到部署管道中的任何階段。用於 Chef Automate 1.*x* 時，選擇 Audit 技術指南的 5.1.0 或更新版本。InSpec Gem 套件必須為 1.24.0 版或更新版本。

 AWS OpsWorks for Chef Automate 入門套件包含包裝函式技術指南 `opsworks-audit`，可為您下載並安裝正確版本的 Chef 稽核技術指南。`opsworks-audit` 技術指南也會指示 `chef-client` 代理程式依據 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔 (您將透過本主題稍後所述的 Chef Compliance 主控台來安裝) 來評估節點。依據您的偏好設定，您也可以使用技術指南來設定 Compliance (合規)。本節中的指示會說明如何實作 `opsworks-audit` 技術指南。<a name="compliance-installprof"></a>

**安裝 Compliance (合規) 描述檔**

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_tw/opsworks/latest/userguide/images/opscm_compliance_profiles_ca1.png)

1. 在左側導覽列中，選擇 **Profile Store (描述檔存放區)**，然後選擇 **Available (可用)** 標籤，以查看預先定義的描述檔。

1. 瀏覽描述檔清單。選擇至少符合其中一個受管節點之作業系統和組態的描述檔。若要查看描述檔的詳細資訊，包括描述檔的目標違反情況描述和基本規則程式碼，請選擇描述檔項目右側的 **>**。您可以選擇多個描述檔。  
![\[Chef Compliance 描述檔詳細資訊檢視\]](http://docs.aws.amazon.com/zh_tw/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 伺服器期間所下載的入門套件中)。新增下列這幾行。最後一行會標示為註解，因為您可以選擇是否要在執行 Compliance (合規) 掃描之後新增 `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 儀表板中會顯示您的 Compliance (合規) 結果。

### 執行合規掃描
<a name="opscm-chefcompliance-scan"></a>

在您設定好節點執行清單，並執行第一次代理程式協助程式之後，應該很快就會在 Chef Automate 儀表板中看到合規掃描結果。

![\[Chef Compliance 報告頁面檢視\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_reporting_ca1.png)


在 Chef Automate 儀表板上，選擇 **Compliance (合規)** 標籤。在左側導覽窗格中，選擇 **Reporting (報告)**。選擇 **Profiles (描述檔)** 標籤，選擇 **Scan Results (掃描結果)**，然後選擇含掃描錯誤的節點，以進一步了解導致節點發生錯誤的規則。

![\[Chef Compliance 的錯誤結果清單\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/opscm_compliance_results_ca1.png)


一般來說，當新節點尚未滿足 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔中的所有規則時，您就會看到未合規的掃描結果。[DevSec 強化框架](https://github.com/dev-sec)是一種以社群為基礎的專案，其中提供的技術指南可修復違反 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔規則的問題。

### (選用) 解決未合規的結果
<a name="opscm-chefcompliance-resolve"></a>

入門套件包含開放原始碼技術指南 `ssh-hardening`；您可以執行此技術指南來修正依據 **DevSec SSH Baseline (DevSec SSH 基準)** 描述檔執行時發生的未合規結果。

**注意**  
`ssh-hardening` 技術指南會變更您的節點以符合 **DevSec SSH Baseline (DevSec SSH 基準)** 規則。在任何生產節點上執行此技術指南之前，請先檢閱 Chef Automate 主控台中 **DevSec SSH Baseline (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. 將 `ssh-hardening` 配方新增到您的節點執行清單中，如 [安裝和設定 `opsworks-audit` 技術指南](#opscm-compliance-setup-cookbook)中的步驟 1 和 6 所述。

   如果您更新 `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 (DevSec SSH 基準)** 描述檔的規則。

1. 在第一次執行 `ssh-hardening` 技術指南之後，請等待 30 分鐘再次執行 Compliance (合規) 掃描。在 Chef Automate 儀表板中查看結果。第一次執行 **DevSec SSH Baseline (DevSec SSH 基準)** 掃描時發生的未合規結果應該已經解決。

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

在 AWS OpsWorks for Chef Automate 伺服器上，合規功能會由您排定的[系統維護](opscm-maintenance.md)自動更新。當提供 AWS OpsWorks for Chef Automate 伺服器可用的 Chef Automate、Chef Infra 伺服器和 Chef InSpec 的更新版本時，您可能需要檢查並更新正在伺服器上執行的 Audit 技術指南以及 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 Compliance 線上培訓](https://training.chef.io/instructor-led-training/chef-automate-compliance)
+ [Chef InSpec](https://www.inspec.io/) 網站
+ [Chef InSpec 教學課程](https://www.inspec.io/tutorials/)