本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用初学者工具包配置 Chef Server
重要
AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用,新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问,可以通过 re AWS : Post 或通过 Pre
当 Chef Server 创建仍在进行中时,在 AWS OpsWorks for Chef Automate 控制台中打开其“Properties”页面。在您首次使用新 Chef Server 时,“Properties”页面提示您下载两个必需项。应在 Chef Server 联机之前下载这些项,新服务器联机之后,下载按钮将不可用。
-
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
先决条件
-
当服务器创建仍在进行时,下载 Chef Server 的登录凭证并将其保存到安全而方便的位置。
-
下载初学者工具包,将初学者工具包 .zip 文件解压缩到您的工作区目录中。请不要共享初学者工具包私有密钥。如果其他用户将管理 Chef Server,以后可以在 Chef Automate 控制面板中将其作为管理员添加。
-
在要用于管理 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.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 存储库
Chef 存储库包含多个目录。初学者工具包中的每个目录包含一个 README 文件,其中介绍了目录的用途,以及如何使用它通过 Chef 来管理系统。有两种方法可以在 Chef 服务器上安装说明书:运行 knife
命令,或者运行 Chef 命令将策略文件 (Policyfile.rb
) 上传到服务器,下载并安装指定说明书。此演练使用 Chef 命令和 Policyfile.rb
在服务器上安装说明书。
-
在本地计算机上创建目录来存储说明书,例如
chef-repo
。将食谱、角色和其他文件添加到此存储库后,我们建议您将其上传或存储在安全的版本控制系统(例如 CodeCommit Git 或 Amazon S3)中。 -
在
chef-repo
目录中,创建以下目录:-
cookbooks/
-存放说明书。 -
roles/
- 以.rb
或.json
格式存储角色。 -
environments/
- 以.rb
或.json
格式存储环境。
-
使用 Policyfile.rb 从远程源获取说明书
在本节中,编辑 Policyfile.rb
以指定说明书,然后运行 Chef 命令将文件上传到服务器并安装说明书。
-
在您的初学者工具包中查看
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
进行了更改,请务必保存该文件。 -
下载并安装
Policyfile.rb
中定义的说明书。chef install
所有说明书的版本均记录在说明书的
metadata.rb
文件中。每次更改说明书后,必须在metadata.rb
中提高该说明书的版本。 -
如果您选择配置合规性扫描,并将
audit
说明书信息保留在策略文件中,请推送策略opsworks-demo
到您的服务器。chef push opsworks-demo
-
如果您完成了步骤 3,请验证您的策略是否已安装。运行以下命令。
chef show-policy
结果应与以下内容类似:
opsworks-demo-webserver ======================= * opsworks-demo: ec0fe46314
-
现在,您可以向您的 Chef Automate 服务器添加或引导节点了。您可以按照 在中自动添加节点 AWS OpsWorks for Chef Automate 中的步骤自动关联节点,或按照 单独添加节点 中的步骤,每次添加一个节点。
(替代)使用 Berkshelf 从远程源获取说明书
Berkshelf 是一个用于管理说明书及其依赖项的工具。相较于 Policyfile.rb
,如果您更喜欢使用 Berkshelf 将说明书安装到本地存储中,请使用本节中的步骤而不是上一节的步骤。您可以指定要将哪些说明书和版本用于您的 Chef Server 并上传这些说明书和版本。初学者工具包中包含一个名为 Berksfile
的文件,其中您可以使用它列出您的说明书。
-
要开始使用,请将
chef-client
说明书添加到随附的 Berksfile 中。chef-client
说明书配置连接到 Chef Automate 服务器的每个节点上的 Chef Infra 客户端代理软件。要了解有关此说明书的更多信息,请参阅 Chef 超市中的 Chef Client 说明书。 -
使用文本编辑器,将其他说明书附加到在其中安装 Web 服务器应用程序的 Berksfile;例如,
apache2
说明书,该说明书安装 Apache Web 服务器应用程序。您的 Berksfile 应类似于以下内容。source 'https://supermarket.chef.io' cookbook 'chef-client' cookbook 'apache2'
-
在本地计算机上下载并安装说明书。
berks install
-
将说明书上传到 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
-
通过显示当前在 Chef Automate 服务器上可用的说明书列表,验证说明书的安装。您可以使用以下
knife
命令进行这项操作:您已准备好添加要使用 AWS OpsWorks for Chef Automate 服务器管理的节点。
knife cookbook list
(可选)配置 knife
使用自定义域
如果 Chef Automate 服务器使用自定义域,则可能需要添加用于签署服务器证书链的根 CA 的 PEM 证书,或者添加服务器 PEM 证书(如果证书是自签名的)。ca_certs
是 chef/
中包含由 Chef knife
实用程序信任的证书颁发机构 (CA) 的子目录。
如果您未使用自定义域,或者您的自定义证书由操作系统信任的根 CA 签名,则可以跳过此部分。否则,配置 knife
以信任您的 Chef Automate 服务器 SSL 证书,如以下步骤所述。
-
运行以下命令。
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. ...
-
运行
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
-
再次运行
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 服务器结合使用。