使用初学者工具包配置 Chef Server - AWS OpsWorks

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

使用初学者工具包配置 Chef Server

重要

AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用,新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问,可以通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

当 Chef Server 创建仍在进行中时,在 AWS OpsWorks for Chef Automate 控制台中打开其“Properties”页面。在您首次使用新 Chef Server 时,“Properties”页面提示您下载两个必需项。应在 Chef Server 联机之前下载这些项,新服务器联机之后,下载按钮将不可用。

AWS OpsWorks for Chef Automate 新的服务器属性页面
  • Chef 服务器的登录凭证。您将使用这些凭据登录 Chef Automate 仪表板,在那里您可以使用 Chef Automate 高级功能,例如工作流程和合规性扫描。 AWS OpsWorks 不会保存这些凭据;这是它们最后一次可供查看和下载。如果需要,您可以在登录之后更改随这些凭证提供的密码。

  • 初学者工具包。初学者工具包包括 README 文件,带有示例、knife.rb 配置文件以及面向主用户或关键用户的私有密钥。每次下载初学者工具包时,将生成新密钥对,旧密钥对将会重置。

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

先决条件

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

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

  3. 在要用于管理 Chef Server 和节点的计算机上下载并安装Chef Workstation (之前称为 Chef 开发工具包 或 Chef DK)。该knife实用程序是 Chef 工作站的一部分。有关说明,请参阅 Chef 网站上的安装 Chef Workstation

浏览初学者工具包内容

此初学者工具包具有以下内容。

  • cookbooks/-您创建的说明书目录。该 cookbooks/ 文件夹包含 opsworks-webserver 说明书,这是一本包装程序说明书,依赖于 Chef Supermarket 网站上的 nginx 说明书。 如果 cookbooks/ 目录中没有说明书依赖项,则Policyfile.rb默认为 Chef supermarket 作为辅助来源。

  • Policyfile.rb-基于 Ruby 的策略文件,定义成为您节点策略的说明书、依赖项和属性。

  • userdata.shuserdata.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)。该knife.rb文件的配置使 Chef 的knife工具操作能够在 AWS OpsWorks for Chef Automate 服务器上运行。

    • .chef/ca_certs/opsworks-cm-ca-2020-root.pem – 由 AWS OpsWorks提供的证书颁发机构 (CA) 签名的 SSL 私有密钥。此密钥允许服务器向您的服务器管理的节点上的 Chef Infra client 代理表明自己的身份。

设置 Chef 存储库

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

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

  2. chef-repo 目录中,创建以下目录:

    • cookbooks/-存放说明书。

    • roles/ - 以 .rb.json 格式存储角色。

    • environments/ - 以 .rb.json 格式存储环境。

使用 Policyfile.rb 从远程源获取说明书

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

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

    Policyfile.rb 还指向可选 Chef Audit 说明书,您可以用它来在节点上设置合规性扫描。有关为托管节点设置合规性扫描和获取合规性结果的更多信息,请参阅:中的合规性扫描 AWS OpsWorks for Chef Automate。如果您不想立即配置合规性扫描和审计,请从 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 进行了更改,请务必保存该文件。

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

    chef install

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

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

    chef push opsworks-demo
  4. 如果您完成了步骤 3,请验证您的策略是否已安装。运行以下命令。

    chef show-policy

    结果应与以下内容类似:

    opsworks-demo-webserver ======================= * opsworks-demo: ec0fe46314
  5. 现在,您可以向您的 Chef Automate 服务器添加或引导节点了。您可以按照 在中自动添加节点 AWS OpsWorks for Chef Automate 中的步骤自动关联节点,或按照 单独添加节点 中的步骤,每次添加一个节点。

(替代)使用 Berkshelf 从远程源获取说明书

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

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

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

    source 'https://supermarket.chef.io' cookbook 'chef-client' cookbook 'apache2'
  3. 在本地计算机上下载并安装说明书。

    berks install
  4. 将说明书上传到 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
  5. 通过显示当前在 Chef Automate 服务器上可用的说明书列表,验证说明书的安装。您可以使用以下 knife 命令进行这项操作:

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

    knife cookbook list

(可选)配置 knife 使用自定义域

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

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

  1. 运行以下命令。

    knife ssl check

    如果结果类似于以下内容,请跳过此过程的其余部分,然后继续 为 Chef 服务器添加节点以进行管理

    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. ...
  2. 运行 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
  3. 再次运行 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 服务器结合使用。