

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

# 使用初学者工具包配置 Chef Server
<a name="opscm-starterkit"></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 Server 创建仍在进行中时，在 AWS OpsWorks for Chef Automate 控制台中打开其“Properties”页面。在您首次使用新 Chef Server 时，“Properties”页面提示您下载两个必需项。应在 Chef Server 联机之前下载这些项，新服务器联机之后，下载按钮将不可用。

![\[AWS OpsWorks for Chef Automate 新的服务器属性页面\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/opscm_serverpropsdownload.png)

+ **Chef 服务器的登录凭证。**您将使用这些凭据登录 Chef Automate 仪表板，在那里您可以使用 Chef Automate 高级功能，例如工作流程和合规性扫描。 OpsWorks 不会保存这些凭据；这是它们最后一次可供查看和下载。如果需要，您可以在登录之后更改随这些凭证提供的密码。
+ **初学者工具包。**初学者工具包包括 README 文件，带有示例、`knife.rb` 配置文件以及面向主用户或关键用户的私有密钥。每次下载初学者工具包时，将生成新密钥对，旧密钥对将会重置。

除了仅适用于新服务器的凭据外，Starter Kit .zip 文件还包括一个适用于任何 AWS OpsWorks for Chef Automate 服务器的 Chef 存储库的简单示例。在 Chef 存储库中，您可以存储用于通过 Chef 管理节点的说明书、角色、配置文件和其他项目。我们建议您将此存储库存储到版本控制系统中，例如 Git，并将其作为源代码处理。有关如何设置在 Git 中跟踪的 Chef 存储库的信息和演示示例，请参阅 Chef 文档中的[关于 chef-repo](https://docs.chef.io/chef_repo.html)。

## 先决条件
<a name="finish-server-prereqs"></a>

1. 当服务器创建仍在进行时，下载 Chef Server 的登录凭证并将其保存到安全而方便的位置。

1. 下载初学者工具包，将初学者工具包 .zip 文件解压缩到您的工作区目录中。请不要共享初学者工具包私有密钥。如果其他用户将管理 Chef Server，以后可以在 Chef Automate 控制面板中将其作为管理员添加。

1. 在要用于管理 Chef Server 和节点的计算机上下载并安装[Chef Workstation](https://downloads.chef.io/products/workstation) （之前称为 Chef 开发工具包 或 Chef DK)。该[https://docs.chef.io/knife.html](https://docs.chef.io/knife.html)实用程序是 Chef 工作站的一部分。有关说明，请参阅 Chef 网站上的[安装 Chef Workstation](https://docs.chef.io/workstation/install_workstation/)。

## 浏览初学者工具包内容
<a name="w2ab1b9c28c15c15"></a>

此初学者工具包具有以下内容。
+ `cookbooks/`-您创建的说明书目录。该 `cookbooks/` 文件夹包含 `opsworks-webserver` 说明书，这是一本包装程序说明书，依赖于 [Chef Supermarket](https://supermarket.chef.io/cookbooks/nginx) 网站上的 `nginx` 说明书。 如果 `cookbooks/` 目录中没有说明书依赖项，则`Policyfile.rb`默认为 Chef supermarket 作为辅助来源。
+ `Policyfile.rb`-基于 Ruby 的策略文件，定义成为您节点策略的说明书、依赖项和属性。
+ `userdata.sh` 和 `userdata.ps1`-在启动 Chef Automate 服务器后，您可以使用用户数据文件自动关联节点。 `userdata.sh` 用于引导基于 Linux 的节点，`userdata.ps1` 用于基于 Windows 的节点。
+ `Berksfile`-如果您更喜欢使用 Berkshelf 和 `berks` 命令上传说明书及其依赖项，则可以使用此文件。在本演练中，我们使用 `Policyfile.rb` 和 Chef 命令上传说明书、依赖项和属性。
+ `README.md`，一个基于 Markdown 的文件，它描述了如何使用初学者工具包首次设置 Chef Automate 服务器。
+ `.chef` 是一个隐藏目录，其中包含 knife 配置文件 (`knife.rb`) 和秘密身份验证密钥文件 (.pem)。
  + `.chef/knife.rb` - knife 配置文件 (`knife.rb`)。该[https://docs.chef.io/config_rb_knife.html](https://docs.chef.io/config_rb_knife.html)文件的配置使 Chef 的[https://docs.chef.io/knife.html](https://docs.chef.io/knife.html)工具操作能够在 AWS OpsWorks for Chef Automate 服务器上运行。
  + `.chef/ca_certs/opsworks-cm-ca-2020-root.pem` – 由 OpsWorks提供的证书颁发机构 (CA) 签名的 SSL 私有密钥。此密钥允许服务器向您的服务器管理的节点上的 Chef Infra client 代理表明自己的身份。

## 设置 Chef 存储库
<a name="w2ab1b9c28c15c17"></a>

Chef 存储库包含多个目录。初学者工具包中的每个目录包含一个 README 文件，其中介绍了目录的用途，以及如何使用它通过 Chef 来管理系统。有两种方法可以在 Chef 服务器上安装说明书：运行 `knife` 命令，或者运行 Chef 命令将策略文件 (`Policyfile.rb`) 上传到服务器，下载并安装指定说明书。此演练使用 Chef 命令和 `Policyfile.rb` 在服务器上安装说明书。

1. 在本地计算机上创建目录来存储说明书，例如 `chef-repo`。将食谱、角色和其他文件添加到此存储库后，我们建议您将其上传或存储在安全的版本控制系统（例如 CodeCommit Git 或 Amazon S3）中。

1. 在 `chef-repo` 目录中，创建以下目录：
   + `cookbooks/`-存放说明书。
   + `roles/` - 以 `.rb` 或 `.json` 格式存储角色。
   + `environments/` - 以 `.rb` 或 `.json` 格式存储环境。

## 使用 Policyfile.rb 从远程源获取说明书
<a name="install-cookbooks-policyfile"></a>

在本节中，编辑 `Policyfile.rb` 以指定说明书，然后运行 Chef 命令将文件上传到服务器并安装说明书。

1. 在您的初学者工具包中查看 `Policyfile.rb`。默认情况下，`Policyfile.rb` 包括 `opsworks-webserver` 包装程序说明书，该说明书依赖于 Chef Supermarket 网站上提供的[https://supermarket.chef.io/cookbooks/nginx](https://supermarket.chef.io/cookbooks/nginx)说明书。`nginx` 说明书在托管节点上安装和配置 Web 服务器。还指定了所需的 `chef-client` 说明书，该说明书在托管节点上安装 Chef Infra 客户端代理。

   `Policyfile.rb` 还指向可选 Chef Audit 说明书，您可以用它来在节点上设置合规性扫描。有关为托管节点设置合规性扫描和获取合规性结果的更多信息，请参阅：[中的合规性扫描 AWS OpsWorks for Chef Automate](opscm-chefcompliance.md)。如果您不想立即配置合规性扫描和审计，请从 `run_list` 部分中删除 `'audit'`，并且不要在文件末尾指定 `audit` 说明书属性。

   ```
   # Policyfile.rb - Describe how you want Chef to build your system.
   #                 
   # For more information about the Policyfile feature, visit                                             
   # https://docs.chef.io/policyfile.html                                                                 
   
   # A name that describes what the system you're building with Chef does.                                
   name 'opsworks-demo-webserver'
   
   # The cookbooks directory is the preferred source for external cookbooks                               
   default_source :chef_repo, "cookbooks/" do |s|                                                         
     s.preferred_for "nginx", "windows", "chef-client", "yum-epel", "seven_zip",  
                     "build-essential", "mingw", "ohai", "audit", "logrotate", "cron"                     
   end
   # Alternative source 
   default_source :supermarket                                                                            
   
   # run_list: chef-client runs these recipes in the order specified.                                 
   run_list  'chef-client',
             'opsworks-webserver',
             'audit'
   # add 'ssh-hardening' to your runlist to fix compliance issues detected by the ssh-baseline profile    
   
   # Specify a custom source for a single cookbook:                                                       
   cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver'                               
   
   # Policyfile defined attributes
   
   # 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"
     }
   ]
   ```

   如果您现在只想配置 `nginx` Web 服务器，以下为一个没有 `audit` 说明书和属性的 `Policyfile.rb` 示例。

   ```
   # Policyfile.rb - Describe how you want Chef to build your system.
   #
   # For more information on the Policyfile feature, visit
   # https://docs.chef.io/policyfile.html
   
   # A name that describes what the system you're building with Chef does.
   name 'opsworks-demo-webserver'
   
   # Where to find external cookbooks:
   default_source :supermarket
   
   # run_list: chef-client will run these recipes in the order specified.
   run_list  'chef-client',
             'opsworks-webserver'
   
   # Specify a custom source for a single cookbook:
   cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver'
   ```

   如果您对 `Policyfile.rb` 进行了更改，请务必保存该文件。

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

   ```
   chef install
   ```

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

1. 如果您选择配置合规性扫描，并将 `audit` 说明书信息保留在策略文件中，请推送策略 `opsworks-demo` 到您的服务器。

   ```
   chef push opsworks-demo
   ```

1. 如果您完成了步骤 3，请验证您的策略是否已安装。运行如下命令。

   ```
   chef show-policy
   ```

   结果应与以下内容类似：

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

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

## （替代）使用 Berkshelf 从远程源获取说明书
<a name="opscm-berkshelf"></a>

Berkshelf 是一个用于管理说明书及其依赖项的工具。相较于 `Policyfile.rb`，如果您更喜欢使用 Berkshelf 将说明书安装到本地存储中，请使用本节中的步骤而不是上一节的步骤。您可以指定要将哪些说明书和版本用于您的 Chef Server 并上传这些说明书和版本。初学者工具包中包含一个名为 `Berksfile` 的文件，其中您可以使用它列出您的说明书。

1. 要开始使用，请将 `chef-client` 说明书添加到随附的 Berksfile 中。`chef-client` 说明书配置连接到 Chef Automate 服务器的每个节点上的 Chef Infra 客户端代理软件。要了解有关此说明书的更多信息，请参阅 Chef 超市中的 [Chef Client 说明书](https://supermarket.chef.io/cookbooks/chef-client)。

1. 使用文本编辑器，将其他说明书附加到在其中安装 Web 服务器应用程序的 Berksfile；例如，`apache2` 说明书，该说明书安装 Apache Web 服务器应用程序。您的 Berksfile 应类似于以下内容。

   ```
   source 'https://supermarket.chef.io'
   cookbook 'chef-client'
   cookbook 'apache2'
   ```

1. 在本地计算机上下载并安装说明书。

   ```
   berks install
   ```

1. 将说明书上传到 Chef Server。

   在 Linux 上，运行以下命令。

   ```
   SSL_CERT_FILE='.chef/ca_certs/opsworks-cm-ca-2020-root.pem' berks upload
   ```

   在 Windows 上，在 PowerShell 会话中运行以下 Chef Workstation 命令。在运行命令之前，请务必将执行策略设置 PowerShell 为`RemoteSigned`。添加`chef shell-init`以使 Chef Workstation 实用程序命令可供使用 PowerShell。

   ```
   $env:SSL_CERT_FILE="ca_certs\opsworks-cm-ca-2020-root.pem"
   chef shell-init berks upload
   Remove-Item Env:\SSL_CERT_FILE
   ```

1. 通过显示当前在 Chef Automate 服务器上可用的说明书列表，验证说明书的安装。您可以使用以下 `knife` 命令进行这项操作：

   您已准备好添加要使用 AWS OpsWorks for Chef Automate 服务器管理的节点。

   ```
   knife cookbook list
   ```

## （可选）配置 `knife` 使用自定义域
<a name="opscm-starterkit-customdomain"></a>

如果您的 Chef Automate 服务器使用自定义域，则可能需要添加签署服务器证书链的根 CA 的 PEM 证书，或者如果证书是自签名的，则需要添加服务器 PEM 证书。 `ca_certs`是中的一个子目录`chef/`，其中包含 Chef `knife` 实用程序信任的证书颁发机构 (CAs)。

如果您未使用自定义域，或者您的自定义证书由操作系统信任的根 CA 签名，则可以跳过此部分。否则，配置 `knife` 以信任您的 Chef Automate 服务器 SSL 证书，如以下步骤所述。

1. 运行如下命令。

   ```
   knife ssl check
   ```

   如果结果类似于以下内容，请跳过此过程的其余部分，然后继续 [为 Chef 服务器添加节点以进行管理](opscm-addnodes.md)。

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             Successfully verified certificates from 'my-chef-automate-server.my-corp.com'
   ```

   如果您收到类似于以下内容的错误消息，请继续执行下一步。

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             ERROR: The SSL certificate of my-chef-automate-server.my-corp.com could not be verified.
             ...
   ```

1. 运行 `knife ssl fetch` 以信任 AWS OpsWorks for Chef Automate 服务器的证书。或者，您可以手动将服务器的根 CA PEM 格式的证书复制到作为 `knife ssl check` 输出中 `trusted_certs_dir` 的值的目录。默认情况下，此目录位于初学者工具包的 `.chef/ca_certs/` 中。输出应与以下内容类似：

   ```
   WARNING: Certificates from my-chef-automate-server.my-corp.com will be fetched and placed in your trusted_cert
             directory (/Users/username/starterkit/.chef/../.chef/ca_certs).
          
             Knife has no means to verify these are the correct certificates. You should
             verify the authenticity of these certificates after downloading.
          
             Adding certificate for my-chef-automate-server in /Users/users/starterkit/.chef/../.chef/ca_certs/servv-aqtswxu20swzkjgz.crt
             Adding certificate for MyCorp_Root_CA in /Users/users/starterkit/.chef/../.chef/ca_certs/MyCorp_Root_CA.crt
   ```

1. 再次运行 `knife ssl check`。输出应与以下内容类似：

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             Successfully verified certificates from 'my-chef-automate-server.my-corp.com'
   ```

   您已准备好 `knife` 与您的 Chef Automate 服务器结合使用。