1.3. 验证 Trusted Artifact Signer 安装


作为系统管理员,您可以验证在 Red Hat OpenShift Container Platform 上运行的 Red Hat Trusted Artifact Signer (RHTAS)的部署是否成功。

您可以签署测试容器镜像,并验证该签名的真实性,以验证您环境中的 RHTAS 部署。

可以通过两种方式从代码管道验证构建工件。您可以使用 cosigngitsign 签署和验证,但只能使用企业合同进行验证。

通过 cosign 工具,您可以使用红帽的Trusted Artifact Signer (RHTAS)服务签名和验证开放容器项目(OCI)容器镜像以及其他构建工件。

重要

对于 RHTAS,您必须使用 cosign 版本 2.2 或更高版本。

先决条件

  • 在 Red Hat OpenShift Container Platform 4.15 或更高版本上安装 RHTAS。
  • 访问 OpenShift Web 控制台。
  • 安装了 ocpodman 二进制文件的工作站。

流程

  1. cosign 二进制文件从 OpenShift 集群下载到您的工作站。

    1. 登录到 OpenShift Web 控制台。在主页中,单击 ? 图标,单击 Command line tools,前往 cosign download 部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip cosign-amd64.gz
      chmod +x cosign-amd64
      Copy to Clipboard Toggle word wrap

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv cosign-amd64 /usr/local/bin/cosign
      Copy to Clipboard Toggle word wrap

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard Toggle word wrap

    Example

    oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
    Copy to Clipboard Toggle word wrap

    注意

    您可以从 OpenShift Web 控制台查找要在命令行中使用的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard Toggle word wrap

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard Toggle word wrap

    注意

    使用 RHTAS 安装的项目名称。

  4. 配置 shell 环境,以执行容器镜像签名和验证。

    Example

    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
    export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to Clipboard Toggle word wrap

  5. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to Clipboard Toggle word wrap

  6. 为测试容器镜像签名。

    1. 创建一个空容器镜像:

      Example

      echo "FROM scratch" > ./tmp.Dockerfile
      podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

    2. 将空容器镜像推送到 ttl.sh 临时 registry:

      Example

      podman push ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard Toggle word wrap

      Example

      cosign sign -y ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

      此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard Toggle word wrap

  7. 使用证书身份和签发者验证签名的容器镜像:

    语法

    cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
    Copy to Clipboard Toggle word wrap

    Example

    cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
    Copy to Clipboard Toggle word wrap

    注意

    您还可以使用 cosign 命令 --certificate-identity-regexp--certificate-oidc-issuer-regexp 的以下选项对证书身份和签发者使用正则表达式。

  8. 将 OpenShift 集群中的 rekor-cli 二进制文件下载到您的工作站。

    1. 登录到 OpenShift Web 控制台。在主页中,单击 ? 图标,单击 Command line tools,转至 rekor-cli 下载部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip rekor-cli-amd64.gz
      chmod +x rekor-cli-amd64
      Copy to Clipboard Toggle word wrap

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
      Copy to Clipboard Toggle word wrap

  9. 使用 Rekor 命令行界面查询透明日志。

    1. 根据日志索引进行搜索:

      Example

      rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to Clipboard Toggle word wrap

    2. 搜索电子邮件地址以获取通用唯一标识符(UUID):

      语法

      rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to Clipboard Toggle word wrap

      Example

      rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to Clipboard Toggle word wrap

      此命令返回用于下一步的 UUID。

    3. 使用 UUID 获取事务详情:

      语法

      rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to Clipboard Toggle word wrap

      Example

      rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to Clipboard Toggle word wrap

gitsign 工具可让您使用红帽的 Trusted Artifact Signer (RHTAS)服务签名和验证 Git 存储库提交。

先决条件

  • 在 Red Hat OpenShift Container Platform 4.15 或更高版本上安装 RHTAS。
  • 访问 OpenShift Web 控制台。
  • 安装了 ocgitcosign 二进制文件的工作站。

    • 您必须使用 cosign 版本 2.2 或更高版本。

流程

  1. gitsign 二进制文件从 OpenShift 集群下载到您的工作站。

    1. 登录到 OpenShift Web 控制台。在主页中,单击 ? 图标,单击 Command line tools,前往 gitsign 下载部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩 .gz 文件,并设置执行位:

      Example

      gunzip gitsign-amd64.gz
      chmod +x gitsign-amd64
      Copy to Clipboard Toggle word wrap

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv gitsign-amd64 /usr/local/bin/gitsign
      Copy to Clipboard Toggle word wrap

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard Toggle word wrap

    Example

    oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
    Copy to Clipboard Toggle word wrap

    注意

    您可以从 OpenShift Web 控制台查找要在命令行中使用的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard Toggle word wrap

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard Toggle word wrap

    注意

    使用 RHTAS 安装的项目名称。

  4. 配置 shell 环境以进行提交签名和验证:

    Example

    export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
    export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to Clipboard Toggle word wrap

  5. 使用 RHTAS 服务配置本地存储库配置以签署您的提交:

    Example

    git config --local commit.gpgsign true
    git config --local tag.gpgsign true
    git config --local gpg.x509.program gitsign
    git config --local gpg.format x509
    git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL
    git config --local gitsign.rekor $SIGSTORE_REKOR_URL
    git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER
    git config --local gitsign.clientID trusted-artifact-signer
    Copy to Clipboard Toggle word wrap

  6. 将提交提交到本地存储库:

    Example

    git commit --allow-empty -S -m “Test of a signed commit”
    Copy to Clipboard Toggle word wrap

    此时会打开一个 Web 浏览器,允许您使用电子邮件地址为提交签名。

  7. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to Clipboard Toggle word wrap

  8. 验证提交:

    语法

    gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
    Copy to Clipboard Toggle word wrap

    Example

    gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
    Copy to Clipboard Toggle word wrap

1.3.3. 使用企业合同验证容器镜像上的签名

企业合同(EC)是维护软件供应链安全性的工具,您可以使用它来定义和执行容器镜像的策略。您可以使用 ec 二进制文件来验证使用红帽的 Trusted Artifact Signer (RHTAS)签名框架的容器镜像的待测试和签名。

先决条件

  • 在 Red Hat OpenShift Container Platform 4.15 或更高版本上安装 RHTAS。
  • 访问 OpenShift Web 控制台。
  • 安装了 occosignpodman 二进制文件的工作站。

    • 您必须使用 cosign 版本 2.2 或更高版本。

流程

  1. 从 OpenShift 集群下载 ec 二进制文件。

    1. 登录 OpenShift Web 控制台。在主页中,单击 ? 图标,单击 Command line tools,前往 ec download 部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip ec-amd64.gz
      chmod +x ec-amd64
      Copy to Clipboard Toggle word wrap

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv ec-amd64 /usr/local/bin/ec
      Copy to Clipboard Toggle word wrap

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard Toggle word wrap

    示例

    oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
    Copy to Clipboard Toggle word wrap

    注意

    您可以从 OpenShift Web 控制台查找要在命令行中使用的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard Toggle word wrap

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard Toggle word wrap

    注意

    使用 RHTAS 安装的项目名称。

  4. 配置 shell 环境,以执行容器镜像签名和验证。

    Example

    export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
    export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to Clipboard Toggle word wrap

  5. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to Clipboard Toggle word wrap

  6. 为测试容器镜像签名。

    1. 创建一个空容器镜像:

      Example

      echo "FROM scratch" > ./tmp.Dockerfile
      podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

    2. 将空容器镜像推送到 ttl.sh 临时 registry:

      Example

      podman push ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard Toggle word wrap

      Example

      cosign sign -y ttl.sh/rhtas/test-image:1h
      Copy to Clipboard Toggle word wrap

      此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard Toggle word wrap

  7. 创建 predicate.json 文件:

    Example

    {
      "builder": {
        "id": "https://localhost/dummy-id"
      },
      "buildType": "https://example.com/tekton-pipeline",
      "invocation": {},
      "buildConfig": {},
      "metadata": {
        "completeness": {
          "parameters": false,
          "environment": false,
          "materials": false
        },
        "reproducible": false
      },
      "materials": []
    }
    Copy to Clipboard Toggle word wrap

    如需有关 schema 布局的更多信息,请参阅 SLSA provenance predicate 规格

  8. predicate.json 文件与容器镜像关联:

    语法

    cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
    Copy to Clipboard Toggle word wrap

    Example

    cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
    Copy to Clipboard Toggle word wrap

  9. 验证容器镜像是否至少有一个测试和签名:

    语法

    cosign tree IMAGE_NAME:TAG
    Copy to Clipboard Toggle word wrap

    Example

    cosign tree ttl.sh/rhtas/test-image:1h
    
    📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35
    └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att
       └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e
    └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig
       └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
    Copy to Clipboard Toggle word wrap

  10. 使用企业联系人验证容器镜像:

    语法

    ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
    Copy to Clipboard Toggle word wrap

    Example

    ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
    
    success: true
    successes:
      - metadata:
          code: builtin.attestation.signature_check
        msg: Pass
      - metadata:
          code: builtin.attestation.syntax_check
        msg: Pass
      - metadata:
          code: builtin.image.signature_check
        msg: Pass
    ec-version: v0.1.2427-499ef12
    effective-time: "2024-01-21T19:57:51.338191Z"
    key: ""
    policy: {}
    success: true
    Copy to Clipboard Toggle word wrap

    企业合同生成 pass-fail 报告,其中包含有关任何安全违反情况的详细信息。添加 --info 标志时,报告包括所有找到违反情况的详情和可能的解决方案。

其它资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat