如果您是 F5 NGINX Plus 的普通用户,则可能会构建容器来试用新特性或新功能。在构建 NGINX Plus 容器时,您往往会将 NGINX 代码库证书和密钥等敏感信息存储在本地文件系统中。虽然您可以直接将敏感文件添加到 .gitignore
代码库文件中,但该流程既不理想也不安全。事实上,工程师经常会不小心将敏感信息提交到某个代码库中。
一种更好的方法是使用密钥管理解决方案。我个人一直是 1Password 的忠实用户,最近我注意到了其 CLI 工具。该工具支持开发人员和平台工程师在日常工作流程中更轻松地与密钥进行交互。
本文概述了如何使用 1Password CLI 安全地构建 NGINX Plus 容器。本例假定您已订阅 NGINX Plus 和已安装 CLI 工具的 1Password,可访问带有 shell(Bash 或 Zsh)的环境,并已安装 Docker。
将密钥存储在 1Password 中
首先,将密钥存储在 1Password 中,后者支持多种密钥类型,例如 API 凭证、文件、备注和密码。在此 NGINX Plus 用例中,我们利用了 1Password 的安全文件功能。
您可以从 MyF5 门户中获取 NGINX 代码库证书和密钥。按照 1Password 文档中的说明,分别为 NGINX 代码库证书和密钥创建安全文件。然后,按照步骤收集 1Password 密钥引用。
注:截至本文撰写时,1Password 不支持同一记录多个文件。
构建 NGINX Plus 容器
现在您需要构建 NGINX Plus 容器,这会用到安全文件及其密钥引用统一资源标识符 (URI)。本步骤使用了《NGINX Plus 管理指南》中的示例 Dockerfile。
准备运行 docker build
进程
在将 Dockerfile 保存到新目录后,准备运行 docker build
进程。 要将 1Password 密钥传递到 docker build
中,首先将每个密钥引用 URI 存储到环境变量中。然后,在保存 Dockerfile 的目录下打开一个新的 Bash 终端。
在 Bash 终端中输入以下命令:
export NGINX_CRT="op://Work/nginx-repo-crt/nginx-repo.crt"export NGINX_KEY="op://Work/nginx-repo-key/nginx-repo.key"
替换密钥引用 URI
op run
命令支持 1Password CLI 将环境变量中的密钥引用替换为密钥的值。您可以使用此命令执行 docker build
命令,从而将 NGINX 代码库证书和密钥传递到 build 容器中。
若要完成容器的构建,请在上一步中使用的同一终端中运行以下命令:
op run -- docker build --no-cache --secret id=nginx-key,env=NGINX_KEY --secret id=nginx-crt,env=NGINX_CRT -t nginxplus --load .
在该命令中,op run
执行 docker build
命令并检测到两个带有 1Password 密钥引用 URI 的环境变量引用(NGINX_CRT
和 NGINX_KEY
)。op
命令将 URI 替换为密钥的实际值。
立即开始
执行上述简单步骤并使用 1Password CLI,即可基于 NGINX Plus 代码库构建 NGINX Plus 容器,而无需将证书和密钥存储在本地文件系统中,从而创建一个更安全的环境。
如果您是 NGINX Plus 新手,请立即下载 30 天免费试用版,或与我们联系以讨论您的用例。
NGINX 企阅版全解析
助力企业用户规避开源治理风险,应对开源使用挑战