Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 列表中。您可以执行以下步骤来实现:

  1. 将 CA 证书从集群传输到客户端机器。

    例如,要为 docker-registry.default.svc 添加 CA,传输位于 /etc/docker/certs.d/docker-registry.default.svc\:5000/node-client-ca.crt 的文件。

  2. 将 CA 证书复制到 /etc/pki/ca-trust/source/anchors/ 目录中。例如:

    # cp </path_to_file>/node-client-ca.crt \
        /etc/pki/ca-trust/source/anchors/
  3. 执行 update-ca-trust 以更新可信 CA 列表:

    # update-ca-trust