1.2. 验证 Trusted Artifact Signer 安装


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

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

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

1.2.1. 使用命令行界面使用 Cosign 签名和验证容器

通过 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

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

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

      Example

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

  2. 登录到 OpenShift 集群:

    语法

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

    Example

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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    Copy to Clipboard Toggle word wrap
    oc project PROJECT_NAME

    Example

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

    注意

    使用 RHTAS 安装的项目名称。

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

    Example

    Copy to Clipboard Toggle word wrap
    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

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

    Example

    Copy to Clipboard Toggle word wrap
    cosign initialize

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

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

      Example

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

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

      Example

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

    3. 为容器镜像签名:

      语法

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

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

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

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

    语法

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

    Example

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

    注意

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

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

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

      Example

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

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

      Example

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

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

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

      Example

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

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

      语法

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

      Example

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

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

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

      语法

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

      Example

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

1.2.2. 使用命令行界面使用 Gitsign 签名和验证提交

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

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

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

      Example

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

  2. 登录到 OpenShift 集群:

    语法

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

    Example

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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    Copy to Clipboard Toggle word wrap
    oc project PROJECT_NAME

    Example

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

    注意

    使用 RHTAS 安装的项目名称。

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

    Example

    Copy to Clipboard Toggle word wrap
    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

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

    Example

    Copy to Clipboard Toggle word wrap
    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

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

    Example

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

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

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

    Example

    Copy to Clipboard Toggle word wrap
    cosign initialize

  8. 验证提交:

    语法

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

    Example

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

1.2.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 文件,并设置执行位:

      示例

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

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

      示例

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

  2. 登录到 OpenShift 集群:

    语法

    Copy to Clipboard Toggle word wrap
    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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    Copy to Clipboard Toggle word wrap
    oc project PROJECT_NAME

    示例

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

    注意

    使用 RHTAS 安装的项目名称。

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

    示例

    Copy to Clipboard Toggle word wrap
    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

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

    示例

    Copy to Clipboard Toggle word wrap
    cosign initialize

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

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

      示例

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

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

      Example

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

    3. 为容器镜像签名:

      语法

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

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

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

  7. 创建 predicate.json 文件:

    Example

    Copy to Clipboard Toggle word wrap
    {
      "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": []
    }

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

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

    语法

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

    Example

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

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

    语法

    Copy to Clipboard Toggle word wrap
    cosign tree IMAGE_NAME:TAG

    Example

    Copy to Clipboard Toggle word wrap
    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

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

    语法

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

    Example

    Copy to Clipboard Toggle word wrap
    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

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

其他资源

其它资源

  • 如需更多信息,请参阅 Enterprise Contract 网站
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.