3.6. 使用签名的容器
自动化执行环境是 Ansible 自动化控制器用来运行作业的容器镜像。您可以将此内容下载到私有自动化中心,并在您的机构内发布它。
3.6.1. 为容器签名部署您的系统 复制链接链接已复制到粘贴板!
自动化中心实施镜像签名,以便为执行环境容器镜像提供更好的安全性。
要部署您的系统,使其准备好进行容器签名,请创建一个签名脚本。
安装程序会在安装程序所在的同一服务器上查找脚本和密钥。
流程
在终端中,创建一个签名脚本,并将脚本路径作为安装程序参数传递。
示例 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 Ansible Automation Platform 安装程序清单文件,了解以
automationhub-4.4 开头的容器签名选项。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 安装完成后,进入您的自动化中心。
- 在导航面板中,选择 。
- 确保有一个名为 container-default 或 container-anyname 的密钥。
container-default 服务由 Ansible Automation Platform 安装程序创建的。
3.6.2. 在自动化中心远程添加容器 复制链接链接已复制到粘贴板!
您可以使用以下两种方式之一将容器远程添加到自动化中心:
- 创建远程
- 执行环境
流程
- 登录到自动化中心。
-
在导航面板中,选择
。 点 。
- 在 Name 字段中输入容器所在的 registry 的名称。
- 在 URL 字段中输入容器所在的 registry 的 URL。
- 如果需要,在 Username 字段中输入用户名。
- 在 Password 字段中,根据需要输入密码。
- 点击 。
3.6.3. 添加执行环境 复制链接链接已复制到粘贴板!
自动化执行环境是容器镜像,可以纳入系统级别的依赖项和基于集合的内容。每个执行环境都允许您有一个自定义镜像来运行作业,每个镜像只包含运行作业时所需的内容。
流程
-
在导航面板中,选择
。 - 点 。
- 输入执行环境的名称。
- 可选:输入上游名称。
- 在 Registry 下,从下拉菜单中选择 registry 的名称。
- 在 Add tag(s) to include 字段中输入标签。如果字段为空,则将传递所有标签。您必须指定要传递的存储库特定标签。
剩余的字段是可选的:
- 当前包括的标签
- 添加要排除的标签
- 当前排除的标签
- 描述
- 点击 。
- 同步镜像。
3.6.4. 从本地环境推送容器镜像 复制链接链接已复制到粘贴板!
使用以下步骤为本地系统中的镜像签名,并将这些签名的镜像推送到自动化中心 registry。
流程
在终端中,登录到 Podman 或当前使用的任何容器客户端:
> podman pull <container-name>
> podman pull <container-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拉取镜像后,添加标签(例如: latest、rc、beta 或版本号,如 1.0、2.3 等):
> podman tag <container-name> <server-address>/<container-name>:<tag name>
> podman tag <container-name> <server-address>/<container-name>:<tag name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在进行了更改后为镜像签名,并将其推送到自动化中心 registry:
> podman push <server-address>/<container-name>:<tag name> --tls-verify=false --sign-by <reference to the gpg key on your local>
> podman push <server-address>/<container-name>:<tag name> --tls-verify=false --sign-by <reference to the gpg key on your local>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果镜像未签名,则只能使用嵌入的任何当前签名推送。另外,您可以使用以下脚本推送镜像而不签名镜像:
> podman push <server-address>/<container-name>:<tag name> --tls-verify=false
> podman push <server-address>/<container-name>:<tag name> --tls-verify=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 推送镜像后,进入您的自动化中心。
-
在导航面板中,选择
。 - 要显示新执行环境,点 Refresh 图标。
- 点镜像的名称查看您的推送的镜像。
故障排除
Automation Hub 中的详情页面指示镜像是否已签名。如果详情页面表示镜像为 Unsigned,您可以按照以下步骤从自动化中心签名镜像:
- 点镜像名称导航到详情页面。
点 图标 ⋮。有三个选项可用:
- 在 Controller 中使用
- 删除
- 签发
- 从下拉菜单中选择 Sign。
签名服务为镜像签名。在镜像签名后,状态将变为"签名"。
3.6.5. 带有签名镜像的策略 复制链接链接已复制到粘贴板!
podman 或其他镜像客户端可以使用策略来确保镜像的有效性,方法是将特定策略分配给该签名。
3.6.6. 使用 podman 确保镜像由特定的签名签名 复制链接链接已复制到粘贴板!
当确保签名由特定的签名进行签名时,签名必须位于您的本地。
流程
- 在导航面板中,选择 。
- 点您使用的签名旁边的 图标 ⋮。
- 从下拉菜单中选择 Download key。此时会打开一个新窗口。
- 在 Name 字段中输入密钥的名称。
- 点击 。
3.6.7. 配置客户端以验证签名 复制链接链接已复制到粘贴板!
为确保从远程 registry 拉取的容器镜像被正确签名,您必须首先在策略文件中使用正确的公钥配置镜像。
前提条件
- 客户端必须配置 sudo 权限才能验证签名。
流程
打开终端并使用以下命令:
> sudo <name of editor> /etc/containers/policy.json
> sudo <name of editor> /etc/containers/policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示的文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此文件显示
quay.io或docker.io都不执行验证,因为类型是insecureAcceptAnything,它会覆盖默认的reject类型。但是<server-address>将执行验证,因为参数type被设置为"signedBy"。注意目前唯一支持的
keyType是 GPG 密钥。在
<server-address>条目下,修改keyPath<1> 使其包含您的密钥文件的名称。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并关闭该文件。
验证
- 使用 Podman 或您选择的客户端拉取文件:
> podman pull <server-address>/<container-name>:<tag name> --tls-verify=false
> podman pull <server-address>/<container-name>:<tag name> --tls-verify=false
此响应验证镜像是否已签名,且无错误。如果镜像没有签名,命令会失败。
其他资源
- 如需有关 policy.json 的更多信息,请参阅 containers-policy.json 的文档。