12.3. 使用 OpenShift CLI 验证镜像签名
您可以使用 oc adm verify-image-signature
命令验证导入到 OpenShift Container Registry 的镜像的签名。此命令通过利用公共 GPG 密钥验证签名本身,验证镜像签名中包含的镜像身份是否可以被信任,然后将所提供的预期身份与给定镜像的身份( pull spec)匹配。
默认情况下,该命令使用位于 $GNUPGHOME/pubring.gpg 中的公共 GPG 密钥环,通常位于路径 ~/.gnupg 中。默认情况下,这个命令不会将验证结果保存到镜像对象。要做到这一点,您必须指定 --save
标志,如下所示。
要验证镜像的签名,用户必须具有 image-auditor
集群角色。集群管理员可使用以下方法添加此项:
$ oc adm policy add-cluster-role-to-user system:image-auditor <user_name>
在已验证的镜像上使用 --save
标志以及无效的 GPG 密钥或无效的预期身份,会导致保存的验证状态并移除所有签名,并且镜像将不再验证。
为了避免错误地删除所有签名,您可以先运行不带 --save
标志的命令,并检查日志中是否有潜在的问题。
要验证镜像签名,请使用以下格式:
$ oc adm verify-image-signature <image> --expected-identity=<pull_spec> [--save] [options]
<pull_spec>
可以通过描述镜像流来找到。<image>
可以通过描述镜像流标签来找到。请参见以下示例命令输出。
镜像签名验证示例
$ oc describe is nodejs -n openshift Name: nodejs Namespace: openshift Created: 2 weeks ago Labels: <none> Annotations: openshift.io/display-name=Node.js openshift.io/image.dockerRepositoryCheck=2017-07-05T18:24:01Z Docker Pull Spec: 172.30.1.1:5000/openshift/nodejs ... $ oc describe istag nodejs:latest -n openshift Image Name: sha256:2bba968aedb7dd2aafe5fa8c7453f5ac36a0b9639f1bf5b03f95de325238b288 ... $ oc adm verify-image-signature \ sha256:2bba968aedb7dd2aafe5fa8c7453f5ac36a0b9639f1bf5b03f95de325238b288 \ --expected-identity 172.30.1.1:5000/openshift/nodejs:latest \ --public-key /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release \ --save
如果 oc adm verify-image-signature
命令返回 x509: certificate signed by unknown authority
错误,您可能需要将 registry 的证书颁发机构(CA)添加到系统中信任的 CA 列表中。您可以执行以下步骤来实现:
将 CA 证书从集群传输到客户端机器。
例如,要为 docker-registry.default.svc 添加 CA,传输位于 /etc/docker/certs.d/docker-registry.default.svc\:5000/node-client-ca.crt 的文件。
将 CA 证书复制到 /etc/pki/ca-trust/source/anchors/ 目录中。例如:
# cp </path_to_file>/node-client-ca.crt \ /etc/pki/ca-trust/source/anchors/
执行
update-ca-trust
以更新可信 CA 列表:# update-ca-trust