部署指南


Red Hat Trusted Artifact Signer 1

为红帽平台安装和配置 Trusted Artifact Signer 服务

Red Hat Trusted Documentation Team

摘要

此部署指南为您提供了在 Red Hat 平台上安装受信任的 Artifact Signer 服务的信息,并验证安装是否成功。

前言

欢迎使用 Red Hat Trusted Artifact Signer Deployment Guide。

这些步骤可帮助您部署完整的 Trusted Artifact Signer (RHTAS)软件堆栈,并验证部署。安装平台组织的内容:

您可以在此处查看官方 RHTAS 发行注记。https://docs.redhat.com/en/documentation/red_hat_trusted_artifact_signer/1.2.1/html/release_notes/

第 1 章 Red Hat OpenShift Container Platform

1.1. 在 OpenShift 中部署的资源建议

在 Red Hat OpenShift 上部署 Red Hat Trusted Artifact Signer (RHTAS)之前,了解如何调整基础架构资源的大小非常重要。需要考虑的关键基础架构数量是 Trillian 数据库可用的 CPU 数和内存。随着签名和验证请求数量的增加,这会增加对 CPU 的负载,并增加 Trillian 数据库的内存用量。

您有两个选项可用于实现与 RHTAS 一起使用的 Trillian 数据库:专用数据库或受管数据库。红帽建议为生产工作负载创建一个专用的数据库,以及用于非生产工作负载的托管数据库。以下是您可以开始使用的基准 CPU 和内存资源:

Dedicated

  • 2 个 CPU 内核
  • 1 GB RAM
  • 5 GB 存储

受管

  • 4 个 CPU 内核
  • 2 GB RAM
  • 10 GB 存储

1.2. 使用 Operator Lifecycle Manager 安装 Trusted Artifact Signer

您可以安装 Red Hat Trusted Artifact Signer (RHTAS) operator,并使用 OpenShift 的 Operator Lifecycle Manager (OLM)部署 RHTAS 服务。此部署为您提供选择 OpenID Connect (OIDC)供应商的基本签名框架。您必须至少配置以下 OIDC 供应商之一: Red Hat Single Sign-on (SSO)、Google、Amazon Secure Token Service (STS)或 GitHub。如果您不想使用默认值,您还可以选择自定义数据库解决方案。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 oc 二进制文件的工作站。

流程

  1. 使用具有 cluster-admin 角色的用户登录 OpenShift Web 控制台。
  2. Administrator 视角中,展开 Operators 导航菜单,然后点 OperatorHub
  3. 在搜索字段中,键入 trusted,然后单击 Red Hat Trusted Artifact Signer 标题。
  4. 单击 Install 按钮,以显示 Operator 详情。
  5. 接受默认值,点 Install Operator 页面中的 Install,并等待安装完成。

    重要

    安装完成后,会自动为您创建一个新项目。新项目名称是 trusted-artifact-signer

    注意

    Trusted Artifact Signer operator 安装到 openshift-operators 命名空间中,所有依赖项都会被自动安装。

  6. 可选。您可以为 Trusted Artifact Signer 服务使用替代数据库,而不是默认的数据库供应商。如果要使用 Amazon 的关系数据库服务(RDS)OpenShift 上的自我管理的数据库,请在继续安装前按照其中一个流程进行操作。配置其中一个其他数据库提供程序后,您可以继续这个过程的下一步。
  7. 以部署 Trusted Artifact Signer 服务。

    1. 在 OpenShift Web 控制台中,从导航菜单中展开 Operators,点 Installed Operators
    2. 从项目下拉列表中,选择 trusted-artifact-signer
    3. Red Hat Trusted Artifact Signer
    4. 单击 Securesign 选项卡,然后单击 Create Securesign 按钮。
    5. Create Securesign 页面上,选择 YAML 视图
    6. 您可以在部署期间配置不同的 OIDC 供应商,如 Google OAuthAmazon STS红帽 SSOMicrosoft 的 Entra IDGitHub OAuth 作为此部署期间的初始 OIDC 供应商。在 spec.fulcio.config.OIDCIssuers 部分下,使用 OIDC 供应商 URL 编辑以下三行,并相应地设置 ClientID

      Example

      ...
      OIDCIssuers:
        - Issuer: 'OIDC_ISSUER_URL':
          ClientID: CLIENT_ID
          IssuerURL: 'OIDC_ISSUER_URL'
          Type: email
      ...
      Copy to Clipboard

      注意

      如果红帽的 SSO 已作为 OIDC 供应商实施,请运行以下命令查找签发者 URL:

      echo https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
      Copy to Clipboard

      ClientID 设置为 trusted-artifact-signer

      重要

      您可以在同一配置中定义多个不同的 OIDC 供应商。

    7. 可选。如果您选择使用非默认数据库,那么在 spec.trillian 部分下,将 create 设置为 false,并为数据库 secret 对象指定名称。

      Example

      ...
      trillian:
        database:
          create: false
          databaseSecretRef:
            name: trillian-mysql
      ...
      Copy to Clipboard

    8. Create 按钮。
  8. All instances 选项卡观察部署状态,直到 CTlogFulcioRekorTrillianTUF 实例就绪。

    注意

    Securesign 实例不提供状态。

  9. 您可以在 OpenShift 控制台中使用 Prometheus 检查新的 Trusted Artifact Signer 服务的健康状态。在导航菜单中,展开 Observe,然后点 Dashboards
  10. 通过签署容器镜像 或 Git 提交 来验证安装https://docs.redhat.com/en/documentation/red_hat_trusted_artifact_signer/1/html/deployment_guide/verify_the_trusted_artifact_signer_service_installation#signing-and-verifying-containers-by-using-cosign-from-the-command-line-interface_deploy

1.3. 验证 Trusted Artifact Signer 安装

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

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

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

1.3.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

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

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

      Example

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

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard

    注意

    使用 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

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

    Example

    cosign initialize
    Copy to Clipboard

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

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

      Example

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

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

      Example

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

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

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

    语法

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

    Example

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

    注意

    您还可以使用 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

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

      Example

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

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

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

      Example

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

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

      语法

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

      Example

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

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

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

      语法

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

      Example

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

1.3.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

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

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

      Example

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

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard

    注意

    使用 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

  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

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

    Example

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

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

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

    Example

    cosign initialize
    Copy to Clipboard

  8. 验证提交:

    语法

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

    Example

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

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

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

      Example

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

  2. 登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    示例

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

    注意

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

  3. 切换到 RHTAS 项目:

    语法

    oc project PROJECT_NAME
    Copy to Clipboard

    Example

    oc project trusted-artifact-signer
    Copy to Clipboard

    注意

    使用 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

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

    Example

    cosign initialize
    Copy to Clipboard

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

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

      Example

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

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

      Example

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

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

  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

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

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

    语法

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

    Example

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

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

    语法

    cosign tree IMAGE_NAME:TAG
    Copy to Clipboard

    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

  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

    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

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

其它资源
  • 如需更多信息,请参阅企业合同 网站

1.4. 配置额外的 OpenID Connect 供应商

作为系统管理员,您可以配置许多不同的 OpenID Connect (OIDC)供应商,以用于红帽的 Trusted Artifact Signer 服务。您可以配置以下 OIDC 供应商来验证用户:

  • 红帽构建的 Keycloak
  • Red Hat Single Sign-on (SSO)
  • Google
  • Amazon 安全令牌服务(STS)
  • Microsoft Entra ID
  • GitHub

1.4.1. 将 Google 配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

您可以将 Google OAuth 2.0 用作 Red Hat Trusted Artifact Signer (RHTAS)服务的 OpenID Connect (OIDC)供应商。您可以决定在RHAS 部署期间或稍后配置 Google OAuth。

重要

您可以在同一配置中定义多个不同的 OIDC 供应商。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 ocpodman 二进制文件的工作站。
  • Google Cloud Console 中,使用以下设置创建一个 OAuth 客户端 ID:

流程

  1. 在工作站上打开一个终端,并登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    示例

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

    注意

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

  2. 更新 RHTAS 配置。

    1. 打开以编辑 Securesign 资源:

      语法

      oc edit Securesign NAME -n NAMESPACE
      Copy to Clipboard

      Example

      oc edit Securesign securesign-sample -n trusted-artifact-signer
      Copy to Clipboard

      注意

      您必须使用为 RHTAS 安装创建的项目名称作为命名空间。

    2. OIDCIssuers 部分下,使用 Google 客户端标识符、签发者的 URL 添加新子,并将 Type 值设置为 email

      语法

      ...
      OIDCIssuers:
        - Issuer: "https://accounts.google.com"
          IssuerURL: "https://accounts.google.com"
          ClientID: "CLIENT_ID"
          Type: email
      ...
      Copy to Clipboard

      将 Google 客户端标识符添加到 ClientID 字段。

    3. 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
  3. 更改 OIDC 签发者和客户端 id 环境变量以使用 Google:

    示例

    export OIDC_ISSUER_URL=https://accounts.google.com
    export COSIGN_OIDC_CLIENT_ID="314919563931-35zke44ouf2oiztjg7v8o8c2ge9usnd1.apps.googleexample.com"
    Copy to Clipboard

  4. 将您的 secret 从 Google Console 复制并粘贴到纯文本文件中:

    语法

    echo SECRET > my-google-client-secret
    Copy to Clipboard

  5. 如果您已运行 RHTAS 服务,您可以通过签署测试容器镜像来验证更新的配置。

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

      Example

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

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

      Example

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

    3. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

    4. 为容器镜像签名:

      语法

      cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
      Copy to Clipboard

      Example

      cosign sign -y --oidc-client-secret-file=my-google-client-secret ttl.sh/rhtas/test-image:1h
      Copy to Clipboard

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

1.4.2. 将 Red Hat SSO 配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

您可以使用 Red Hat Single Sign-On (SSO)作为红帽的 Trusted Artifact Signer (RHTAS)服务的 OpenID Connect 供应商。这可让您为应用程序和安全服务的 Keycloak 身份验证环境。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 有 1 GB 的容器存储可用于 Keycloak PostgreSQL 数据库。
  • 安装了 oc 二进制文件的工作站。

流程

  1. 使用具有 cluster-admin 角色的用户登录 OpenShift Web 控制台。
  2. 创建一个新项目来部署 Keycloak 服务。

    1. Administrator 视角中,从导航菜单中展开 Home,再单击 Projects
    2. Create Project 按钮。
    3. 新项目名称为 keycloak-system,然后单击 Create 按钮。
  3. 从导航菜单中展开 Operators,然后点 OperatorHub
  4. 在搜索字段中,键入 sso,然后单击 Red Hat Single Sign-on 标题。
  5. 单击 Install 按钮,以显示 Operator 详情。
  6. 如果尚未设置,请从 Installed Namespace 下拉菜单中选择 keycloak-system
  7. Install Operator 页面中点 Install,并等待安装完成。
  8. 安装完成后,点 View Operator
  9. 在 workstation 终端中登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  10. 切换到 Keycloak 项目:

    Example

    oc project keycloak-system
    Copy to Clipboard

  11. 创建 Keycloak 实例:

    Example

    cat <<EOF | oc apply -f -
    apiVersion: keycloak.org/v1alpha1
    kind: Keycloak
    metadata:
      labels:
        app: sso
      name: keycloak
    spec:
      externalAccess:
        enabled: true
      instances: 1
      keycloakDeploymentSpec:
        imagePullPolicy: Always
      postgresDeploymentSpec:
        imagePullPolicy: Always
    EOF
    Copy to Clipboard

  12. 创建 Keycloak 域:

    Example

    cat <<EOF | oc apply -f -
    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakRealm
    metadata:
      labels:
        app: sso
      name: trusted-artifact-signer
    spec:
      instanceSelector:
        matchLabels:
          app: sso
      realm:
        displayName: Red-Hat-Trusted-Artifact-Signer
        enabled: true
        id: trusted-artifact-signer
        realm: trusted-artifact-signer
        sslRequired: none
    EOF
    Copy to Clipboard

  13. 创建 Keycloak 客户端:

    Example

    cat <<EOF | oc apply -f -
    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakClient
    metadata:
      labels:
        app: sso
      name: trusted-artifact-signer
    spec:
      client:
        attributes:
          request.object.signature.alg: RS256
          user.info.response.signature.alg: RS256
        clientAuthenticatorType: client-secret
        clientId: trusted-artifact-signer
        defaultClientScopes:
        - profile
        - email
        description: Client for Red Hat Trusted Artifact Signer authentication
        directAccessGrantsEnabled: true
        implicitFlowEnabled: false
        name: trusted-artifact-signer
        protocol: openid-connect
        protocolMappers:
        - config:
            claim.name: email
            id.token.claim: "true"
            jsonType.label: String
            user.attribute: email
            userinfo.token.claim: "true"
          name: email
          protocol: openid-connect
          protocolMapper: oidc-usermodel-property-mapper
        - config:
            claim.name: email-verified
            id.token.claim: "true"
            user.attribute: emailVerified
            userinfo.token.claim: "true"
          name: email-verified
          protocol: openid-connect
          protocolMapper: oidc-usermodel-property-mapper
        - config:
            claim.name: aud
            claim.value: trusted-artifact-signer
            id.token.claim: "true"
            access.token.claim: "true"
            userinfo.token.claim: "true"
          name: audience
          protocol: openid-connect
          protocolMapper: oidc-hardcoded-claim-mapper
        publicClient: true
        standardFlowEnabled: true
        redirectUris:
        - "*"
      realmSelector:
        matchLabels:
          app: sso
    EOF
    Copy to Clipboard

  14. 创建 Keycloak 用户:

    Example

    cat <<EOF | oc apply -f -
    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakUser
    metadata:
      labels:
        app: sso
      name: jdoe
    spec:
      realmSelector:
        matchLabels:
          app: sso
      user:
        email: jdoe@redhat.com
        enabled: true
        emailVerified: true
        credentials:
          - type: "password"
            value: "secure"
        firstName: Jane
        lastName: Doe
        username: jdoe
    EOF
    Copy to Clipboard

    设置用户名、用户的电子邮件地址以及密码或引用 secret 对象。

  15. 返回到 OpenShift Web 控制台,点 All instances 选项卡监视并等待 Keycloak 系统成功初始化。

1.4.3. 将 Keycloak 的红帽构建配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

您可以将红帽构建的 Keycloak (RHBK)配置为红帽受信任的工件签名程序(RHTAS)服务的 OpenID Connect (OIDC)供应商。此流程指导您将 RHBK 与 RHTAS 集成。

重要

您可以在相同的 SecureSign 配置中为 Fulcio 定义几个不同的 OIDC 供应商。

先决条件

  • OpenShift Container Platform 4.15 或更高版本上的 RHTAS 安装。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 oc 二进制文件的工作站。
  • 有 1 GB 的持久性存储可用于 Keycloak PostgreSQL 数据库
  • TLS 证书和密钥

流程

  1. 使用具有 cluster-admin 角色的用户登录 OpenShift Web 控制台。
  2. 创建一个新项目来部署 Keycloak 服务。

    1. Administrator 视角中,从导航菜单中展开 Home,再单击 Projects
    2. Create Project 按钮。
    3. 新项目名称为 keycloak-system,然后点 Create 按钮。
  3. 部署 PostgreSQL 实例,供 Keycloak 用于存储持久数据。

    重要

    如果 Keycloak 已存在数据库,请替换与您的数据库实例对应的 Secret 资源 的用户名密码和数据库名称 值。您可以跳过 PostgreSQL Service 和 StatefulSet 步骤的创建,并继续下一步。

    1. 创建 Secret 资源以存储数据库信息。

      1. 从导航菜单中展开 Workloads,再单击 Secrets
      2. Project 下拉菜单中选择 keycloak-system
      3. 单击 Create 下拉菜单,再选择 Key/Value secret
      4. Secret name 字段中输入 postgresql-db
      5. Key 字段中输入 username
      6. Value 字段中输入 keycloak。这是用于向 PostgreSQL 数据库实例进行身份验证的用户名 Keycloak。
      7. 单击 Add key/value 链接,以添加另一个键值对。
      8. Key 字段中输入 password
      9. Value 字段中输入您选择的密码。这是用于向 PostgreSQL 数据库实例进行身份验证的密码 Keycloak。
      10. 单击 Add key/value 链接,以添加另一个键值对。
      11. Key 字段中输入 database
      12. Value 字段中输入 keycloak。这是用于将 Keycloak 数据存储在 PostgreSQL 数据库实例中的数据库名称。
      13. Create 按钮。
    2. 创建 PostgreSQL Service 和 StatefulSet。

      1. + 图标。
      2. 复制 Service 和 StatefulSet YAML 配置文本,并在 Import YAML 页面中,将文本粘贴到 文本编辑器框中。
      3. Create 按钮,将 Service 和 StatefulSet 添加到 keycloak-system 项目中。
  4. 从工作站打开一个终端,并登录到 OpenShift 集群:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  5. 创建新的 Secret 资源,使其包含传输层安全(TLS)证书和对应的私钥:

    语法

    oc create secret tls SECRET_NAME -n NAMESPACE --cert CERTIFICATE_FILE_NAME --key PRIVATE_KEY_FILE_NAME
    Copy to Clipboard

    Example

    oc create secret tls keycloak-tls -n keycloak-system --cert certificate.pem --key key.pem
    Copy to Clipboard

    注意

    OpenShift 的服务服务证书可以自动生成和管理用于 Keycloak 的 TLS 证书。如需更多信息 请参阅附录。

  6. 在 OpenShift Web 控制台中,从导航菜单中展开 Operator,然后点 OperatorHub
  7. 在搜索字段中,键入 keycloak,然后单击认证红帽目录中的 Keycloak Operator 标题。
  8. 单击 Install 按钮,以显示 Operator 详情。
  9. Install Operator 页面中,从 Installed Namespace 下拉菜单中选择 keycloak-system,然后点 Install 按钮。等待安装完成。
  10. 安装完成后,点 View Operator 按钮。
  11. 在 Keycloak 标题中点 Create instance
  12. Create Keycloak 页面中,选择 YAML 视图

    1. name 行中,将 example-keycloak 替换为您的自定义名称,如 keycloak
    2. 主机名可以在 hostname 属性中明确指定,或者自动生成与其他路由类似。在 hostname 行中,将 example.org 替换为您的自定义主机名。

      注意

      有关使 OpenShift 为 Keycloak 实例生成主机名所需的步骤,请参阅附录。???

    3. spec 部分,添加您的数据库详情:

      Example

      spec:
      ...
        db:
          vendor: postgres
          host: postgresql-db
          usernameSecret:
            name: postgresql-db
            key: username
          passwordSecret:
            name: postgresql-db
            key: password
      ...
      Copy to Clipboard

    4. 另外,在 http 属性的 spec 部分下,指定包含 TLS 证书的 Secret 资源的名称。

      Example

      spec:
      ...
        http:
          tlsSecret: keycloak-tls
      ...
      Copy to Clipboard

    5. Create 按钮。
  13. 展开 Networking 导航菜单,再单击 Routes
  14. 要打开 Keycloak 管理控制台,请点击与 Keycloak 实例关联的路由的链接。
  15. admin 用户的默认凭据存储在名为 keycloak-initial-admin 的 Secret 中。要查找密码,展开 Workloads 导航菜单,再单击 Secrets
  16. 选择 keycloak-initial-admin Secret。
  17. Data 部分下,找到 password 键,然后点 copy content icon 图标。
  18. 在 Keycloak Administration Console 登录页面中,输入 admin 作为用户名,并粘贴上一步的内容作为密码。
  19. 创建一个名为 trusted-artifact-signer 的新域。

    1. 在导航菜单中,选择 Red Hat Build of Keycloak 下拉菜单。
    2. 选择 Create Realm
    3. 输入 trusted-artifact-signer 作为 资源名称
    4. 单击 Create 以创建新域。
  20. 创建新用户 。新用户可以登录到 Keycloak 管理控制台,也可以使用 RHTAS 为容器和提交签名。

    1. 在导航菜单的 Manage 部分下,然后选择 Clients
    2. Create Client 按钮
    3. Client Id 字段中,输入 trusted-artifact-signer
    4. 另外,您还可以在对应的字段中输入 NameDescription
    5. 点击 Next
    6. 接受新客户端创建过程的 Capability Config 步骤的默认选项。
    7. 点击 Next
    8. Valid redirect URIs 字段中,输入 *
    9. 单击 Save 以创建客户端。
  21. 在导航菜单的 Configure 部分下,选择 Realm Settings 以查找 trusted-artifact-signer 域的 Issuer URL
  22. Endpoints 旁边,单击 OpenID Endpoint Configuration 链接。
  23. issuer 属性复制 URL
  24. 在 RHTAS 的 SecureSign 资源的 .spec.fulcio.config.OIDCIssuers 部分下,将 CLIENT_ID 替换为 trusted-artifact-signer并粘贴 URL 内容来替换 RHBK_REALM_ISSUER_URL

    语法

    spec:
    ...
      fulcio:
        config:
          OIDCIssuers:
            - ClientID: CLIENT_ID
              Issuer: 'RHBK_REALM_ISSUER_URL'
              IssuerURL: 'RHBK_REALM_ISSUER_URL'
              Type: email
    ...
    Copy to Clipboard

    Example

    spec:
    ...
      fulcio:
        config:
          OIDCIssuers:
            - ClientID: trusted-artifact-signer
              Issuer: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer'
              IssuerURL: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer'
              Type: email
    ...
    Copy to Clipboard

1.4.4. 将 Amazon STS 配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

您可以将 Amazon 的安全令牌服务(STS)用作红帽受信任的工件签名程序(RHTAS)服务的 OpenID Connect (OIDC)供应商。您可以决定在RHAS 部署期间或稍后配置 Amazon STS。

重要

您可以在同一配置中定义多个不同的 OIDC 供应商。

先决条件

流程

  1. 在工作站上打开一个终端,并登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  2. 查找 AWS OIDC 供应商 URL:

    Example

    oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}'
    Copy to Clipboard

  3. 更新 RHTAS 配置。

    1. 打开以编辑 Securesign 资源:

      语法

      oc edit Securesign NAME -n NAMESPACE
      Copy to Clipboard

      Example

      oc edit Securesign securesign-sample -n trusted-artifact-signer
      Copy to Clipboard

      注意

      您必须使用为 RHTAS 安装创建的项目名称作为命名空间。

    2. OIDCIssuers 部分下,使用 AWS STS 客户端标识符、签发者的 URL 添加新子,并将 Type 值设置为 kubernetes

      Example

      ...
      OIDCIssuers:
        - Issuer: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c"
          IssuerURL: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c"
          ClientID: "trusted-artifact-signer"
          Type: kubernetes
      ...
      Copy to Clipboard

    3. 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
  4. 输入您的访问密钥、secret 密钥、默认区域和输出格式来配置 AWS 命令行工具:

    Example

    aws configure
    Copy to Clipboard

  5. 设置以下环境变量:

    Example

    export account_id=$(aws sts get-caller-identity --query "Account" --output text)
    export oidc_provider="$(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}' | cut -d '/' -f3-)"
    export role_name=rhtas-sts
    export namespace=rhtas-sts
    export service_account=cosign-sts
    Copy to Clipboard

  6. 创建与新创建的 IAM 角色关联的信任策略:

    Example

    cat >trust-relationship.json <<EOF
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::${account_id}:oidc-provider/${oidc_provider}"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "${oidc_provider}:aud": "trusted-artifact-signer"
            }
          }
        }
      ]
    }
    EOF
    Copy to Clipboard

  7. 使用信任策略为 RHTAS 服务创建一个新的 IAM 角色:

    Example

    aws iam create-role --role-name rhtas-sts --assume-role-policy-document file://trust-relationship.json --description "Red Hat Trusted Artifact Signer STS Role"
    Copy to Clipboard

  8. 在启用了 STS 的 OpenShift 集群中,创建一个新项目命名空间:

    语法

    oc new-project NAMESPACE
    Copy to Clipboard

    Example

    oc new-project rhtas-sts
    Copy to Clipboard

  9. 为假设 IAM 角色创建服务帐户,并在 OpenShift 项目命名空间中运行工作负载。

    1. 创建服务帐户清单:

      Example

      cat >service_account.yaml <<EOF
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: $service_account
        namespace: $namespace
        annotations:
          eks.amazonaws.com/role-arn: "arn:aws:iam::${account_id}:role/${role_name}"
          # optional: Defaults to "sts.amazonaws.com" if not set
          eks.amazonaws.com/audience: "trusted-artifact-signer"
          # optional: When "true", adds AWS_STS_REGIONAL_ENDPOINTS env var to containers
          eks.amazonaws.com/sts-regional-endpoints: "true"
          # optional: Defaults to 86400 for expirationSeconds if not set
          eks.amazonaws.com/token-expiration: "86400"
      EOF
      Copy to Clipboard

    2. 将服务帐户清单应用到 OpenShift:

      Example

      oc apply -f service_account.yaml
      Copy to Clipboard

  10. 创建新的部署工作负载,以便在镜像 registry 中签名容器镜像。

    1. 创建部署清单:

      Example

      cat >deployment.yaml <<EOF
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: cosign-sts
        namespace: ${namespace}
      spec:
        selector:
          matchLabels:
            app: cosign-sts
        template:
          metadata:
            labels:
              app: cosign-sts
          spec:
            securityContext:
              runAsNonRoot: true
            serviceAccountName: cosign-sts
            containers:
            - args:
              - -c
              - env; cosign initialize --mirror=\$COSIGN_MIRROR --root=\$COSIGN_ROOT; while true; do sleep 86400; done
              command:
              - /bin/sh
              name: cosign
              image: registry.redhat.io/rhtas-tech-preview/cosign-rhel9@sha256:f4c2cec3fc1e24bbe094b511f6fe2fe3c6fa972da0edacaf6ac5672f06253a3e
              pullPolicy: IfNotPresent
              env:
              - name: AWS_ROLE_SESSION_NAME
                value: signer-identity-session
              - name: AWS_REGION
                value: us-east-1
              - name: OPENSHIFT_APPS_SUBDOMAIN
                value: $(oc get cm -n openshift-config-managed  console-public -o go-template="{{ .data.consoleURL }}" | sed 's@https://@@; s/^[^.]*\.//')
              - name: OIDC_AUTHENTICATION_REALM
                value: "trusted-artifact-signer"
              - name: COSIGN_FULCIO_URL
                value: $(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
              - name: COSIGN_OIDC_ISSUER
                value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}')
              - name: COSIGN_CERTIFICATE_OIDC_ISSUER
                value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}')
              - name: COSIGN_REKOR_URL
                value: $(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
              - name: COSIGN_MIRROR
                value: $(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
              - name: COSIGN_ROOT
                value: "$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)/root.json"
              - name: COSIGN_YES
                value: "true"
              securityContext:
                allowPrivilegeEscalation: false
                capabilities:
                  drop:
                  - ALL
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext:
              runAsNonRoot: true
            serviceAccount: ${service_account}
            serviceAccountName: ${service_account}
            terminationGracePeriodSeconds: 30
      EOF
      Copy to Clipboard

    2. 将部署清单应用到 OpenShift:

      Example

      oc apply -f deployment.yaml
      Copy to Clipboard

  11. 创建测试容器镜像以签名。

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

      Example

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

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

      Example

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

    3. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

  12. 通过签名和验证测试容器镜像来验证配置。

    1. 在正在运行的 pod 中打开远程 shell 会话:

      语法

      oc rsh -n NAMESPACE deployment/cosign-sts env IMAGE=IMAGE_NAME:TAG /bin/sh
      Copy to Clipboard

      Example

      oc rsh -n rhtas-sts deployment/cosign-sts env IMAGE=ttl.sh/rhtas/test-image:1h /bin/sh
      Copy to Clipboard

    2. 为容器镜像签名:

      Example

      cosign sign -y --identity-token=$(cat $AWS_WEB_IDENTITY_TOKEN_FILE) ttl.sh/rhtas/test-image:1h
      Copy to Clipboard

    3. 验证签名的容器镜像:

      Example

      cosign verify --certificate-identity=https://kubernetes.io/namespaces/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/serviceaccounts/cosign-sts --certificate-oidc-issuer=$COSIGN_CERTIFICATE_OIDC_ISSUER ttl.sh/rhtas/test-image:1h
      Copy to Clipboard

1.4.5. 将 GitHub 配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

当使用红帽单点登录(SSO)服务作为 Red Hat Trusted Artifact Signer (RHTAS)服务的 OpenID Connect (OIDC)服务时,您可以使用 GitHub OAuth 2.0。此流程指导您将 GitHub OAuth 与 OpenShift 上的现有 Red Hat SSO 部署集成。

重要

您可以在同一配置中定义多个不同的 OIDC 供应商。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 正在运行的 Red Hat SSO 实例。
  • 安装了 oc 二进制文件的工作站。
  • 创建 GitHub OAuth 应用,并在注册应用后记录客户端标识符和机密值。

    重要

    在注册新的 GitHub OAuth 应用程序时,您必须指定 Homepage URLAuthorization 回调 URL。为这两个字段输入占位符值,例如 https://localhost:8080。稍后,您将使用这些字段的预期值修改 GitHub OAuth 应用程序。

流程

  1. 在工作站上打开一个终端,并登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  2. 登录到 Red Hat SSO 控制台。

    1. 从命令行查找 Red Hat SSO 控制台 URL:

      Example

      oc get routes -n keycloak-system keycloak -o jsonpath='https://{.spec.host}'
      Copy to Clipboard

    2. 将 Red Hat SSO 控制台 URL 复制并粘贴到您的 Web 浏览器中。
    3. 单击 Administration Console
    4. 从命令行检索 admin 密码:

      Example

      oc get secret/credential-keycloak -n keycloak-system -o jsonpath='{ .data.ADMIN_PASSWORD }' | base64 -d
      Copy to Clipboard

      复制此命令的输出。

    5. 在 Web 浏览器中,以 admin 用户身份登录,并将密码粘贴到对应的字段中。点 Sign In 按钮。
  3. 从导航菜单的下拉菜单中选择您的域。
  4. 添加 GitHub 身份提供程序。

    1. 在导航菜单中点 Identity Providers
    2. Add provider… 下拉菜单中选择 GitHub
    3. 将 GitHub OAuth 客户端标识符添加到 客户端 ID 字段。
    4. 将 GitHub OAuth 客户端 secret 添加到 Client Secret 字段中。
    5. 打开 Trust Email 选项。
    6. Save 按钮。
  5. 将身份提供程序映射程序添加到新创建的身份提供程序。

    1. Mapper 选项卡。
    2. Create 按钮。
    3. 为新映射程序指定 Name
    4. Mapper Type 更改为 Hardcoded Attribute
    5. User Attribute 字段设置为 emailVerified
    6. User Attribute Value 字段设置为 true
    7. Save 按钮。
  6. GitHub Identity Provider Settings 页面中,复制 Redirect URI 值,并将它粘贴到 GitHub OAuth 应用 授权回调 URL 字段。另外,将此值粘贴到 Homepage URL 字段中,但删除 URL 字符串的 broker/github/endpoint 部分。
  7. 单击 Update Application。现在,您可以使用 GitHub 作为 OIDC 供应商为 提交 签名。https://docs.redhat.com/en/documentation/red_hat_trusted_artifact_signer/1/html/deployment_guide/verify_the_trusted_artifact_signer_service_installation#signing-and-verifying-containers-by-using-cosign-from-the-command-line-interface_deploy
  8. 在签名工件时,会打开网页浏览器并提示您登录到 Red Hat SSO 帐户。点 GitHub 按钮使用您的凭证登录。
  9. 单击 Authorize 按钮,以启用 GitHub 用户详情,以供 Red Hat SSO 访问。

1.4.6. 将 Microsoft Entra ID 配置为 Trusted Artifact Signer 的 OpenID Connect 供应商

对于红帽的 Trusted Artifact Signer (RHTAS)服务,您可以使用 Microsoft Entra ID 作为 OpenID Connect (OIDC)供应商。您可以决定在 RHTAS 部署期间或稍后配置 Microsoft Entra ID。

注意

将 Microsoft Entra ID 与 RHTAS 集成不需要订阅。

重要

您可以在同一配置中定义多个不同的 OIDC 供应商。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 具有创建资源的 Microsoft Azure 帐户。
  • 用于用户签名工件的 Azure 验证的电子邮件地址。
  • 访问 Microsoft Azure 命令行界面。
  • 安装了 occosignpodmanaz 二进制文件的工作站。

流程

  1. 在工作站上打开一个终端。
  2. 在 Microsoft Entra ID 中创建代表客户端的 App Registration:

    Example

    export RHTAS_APP_REGISTRATION=$(az ad app create --display-name=rhtas --web-redirect-uris=http://localhost:0/auth/callback --enable-id-token-issuance --query appId -o tsv)
    Copy to Clipboard

  3. 创建一个新的客户端 secret,允许用户使用 App Registration 获取 ID 令牌:

    Example

    export RHTAS_APP_REGISTRATION_CLIENT_SECRET=$(az ad app credential reset --id=$RHTAS_APP_REGISTRATION --display-name="RHTAS Client Secret" -o tsv --query 'password')
    Copy to Clipboard

    注意

    默认情况下,客户端 secret 仅在一年内有效。您可以使用 - 或日期 的标记自定义这个值。

  4. 创建新的 Claim Mapping Policy 以定义一个名为 email_verified 的新 JWT 声明,使用静态值 true

    Example

    az rest -m post --headers Content-Type=application/json --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies --body '{"definition": ["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\":[{\"value\":\"true\",\"JwtClaimType\":\"email_verified\"}]}}"],"displayName": "EmailVerified"}'
    Copy to Clipboard

  5. 获取 App Registration 对象标识符:

    Example

    export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
    Copy to Clipboard

  6. 更新 App Registration 清单:

    Example

    az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${RHTAS_APP_REGISTRATION_OBJ_ID} --headers 'Content-Type=application/json' --body "{\"api\":{\"acceptMappedClaims\":true}}"
    Copy to Clipboard

  7. 创建新 Service Principal 并将其与 App Registration 关联:

    Example

    export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
    Copy to Clipboard

  8. 获取 Claim Mapping Policy 标识符:

    Example

    export CLAIM_MAPPING_POLICY_ID=$(az rest --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies -o tsv --query "value[?displayName=='EmailVerified'] | [0].id")
    Copy to Clipboard

  9. 将 Claim Mapping Policy 与 Service Principal 关联:

    Example

    az rest -m post --headers Content-Type=application/json --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${SERVICE_PRINCIPAL_ID}/claimsMappingPolicies/\$ref" --body "{\"@odata.id\": \"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/${CLAIM_MAPPING_POLICY_ID}\"}"
    Copy to Clipboard

  10. 获取租户标识符:

    Example

    export TENANT_ID=$(az account show -o tsv --query tenantId)
    Copy to Clipboard

  11. 获取 OIDC 端点:

    Example

    export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
    Copy to Clipboard

  12. 更新 RHTAS 配置。

    1. 打开以编辑 Securesign 资源:

      语法

      oc edit Securesign NAME -n NAMESPACE
      Copy to Clipboard

      Example

      oc edit Securesign securesign-sample -n trusted-artifact-signer
      Copy to Clipboard

      注意

      您必须使用为 RHTAS 安装创建的项目名称作为命名空间。

    2. OIDCIssuers 部分下,使用客户端标识符、签发者 URL 添加新小节,并将 Type 值设置为 email

      语法

      ...
      OIDCIssuers:
        - Issuer: "${ENTRA_ID_OIDC_ENDPOINT}"
          IssuerURL: "${ENTRA_ID_OIDC_ENDPOINT}"
          ClientID: "${RHTAS_APP_REGISTRATION}"
          Type: email
      ...
      Copy to Clipboard

    3. 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
  13. 创建本地客户端 secret 文件:

    Example

    echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret
    Copy to Clipboard

  14. 为签名工件配置 shell 环境:

    Example

    export TUF_URL=$(oc get tuf -n trusted-artifact-signer -o jsonpath='{.items[0].status.url}')
    export OIDC_ISSUER_URL=$(oc get securesign -n trusted-artifact-signer rhtas -o jsonpath='{ .spec.fulcio.config.OIDCIssuers[0].Issuer }')
    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=$RHTAS_APP_REGISTRATION
    export SIGSTORE_OIDC_CLIENT_ID=$COSIGN_OIDC_CLIENT_ID
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export COSIGN_OIDC_CLIENT_SECRET_FILE=$(pwd)/rhtas-entra-id-client-secret
    Copy to Clipboard

  15. 初始化本地机器以签名:

    Example

    $ cosign initialize
    Copy to Clipboard

  16. 通过签名测试容器镜像来验证更新的配置。

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

      Example

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

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

      Example

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

    3. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

    4. 为容器镜像签名:

      语法

      cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
      Copy to Clipboard

      Example

      cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
      Copy to Clipboard

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

1.5. 为 Trusted Artifact Signer 配置替代数据库

您可以将 Trillian 的 Red Hat Trusted Artifact Signer (RHTAS)默认数据库替换为外部管理的 MariaDB 数据库实例。数据库实例可以是云托管的数据库提供程序,如 Amazon 的 Relational Database Service (RDS),或者在 OpenShift 中自己的数据库部署。

1.5.1. 先决条件

  • Red Hat OpenShift Container Platform 版本 4.13、4.14 或 4.15。

1.5.2. 为受信任的工件签名程序配置 Amazon RDS

使用这个流程,您可以将红帽的 Trusted Artifact Signer (RHTAS)默认数据库替换为 Amazon 的 Relational Database Service (RDS)管理的 MariaDB 实例。

重要

红帽建议在生产环境中使用高可用性 MariaDB 数据库。

先决条件

  • 可访问 Amazon RDS 控制台的 Amazon Web Service (AWS)帐户。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 occurlmysql 二进制文件的工作站。
  • 具有特权的命令行访问权限,以创建数据库并填充 MariaDB 实例。

流程

  1. 打开 Amazon RDS 控制台并创建一个新的 MariaDB 实例。

    1. 等待 MariaDB 实例部署好,并且可用。
  2. 从您的工作站,通过提供区域端点、端口和用户凭证来登录到新数据库:

    语法

    mysql -h REGIONAL_ENDPOINT -P 3306 -u USER_NAME -p
    Copy to Clipboard

    Example

    mysql -h exampledb.1234.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
    Copy to Clipboard

  3. 创建名为 trillian 的新数据库:

    Example

    create database trillian;
    Copy to Clipboard

  4. 切换到新创建的数据库:

    Example

    use trillian;
    Copy to Clipboard

  5. 创建名为 trillian 的新数据库用户,并为新创建的用户设置 PASSWORD

    语法

    CREATE USER trillian@'%' IDENTIFIED BY 'PASSWORD';
    GRANT ALL PRIVILEGES ON trillian.* TO 'trillian'@'%';
    FLUSH PRIVILEGES;
    Copy to Clipboard

  6. 断开与数据库的连接:

    Example

    EXIT
    Copy to Clipboard

  7. 下载数据库配置文件:

    Example

    curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
    Copy to Clipboard

  8. 将数据库配置应用到新数据库:

    语法

    mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
    Copy to Clipboard

    Example

    mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
    Copy to Clipboard

  9. 在工作站上打开一个终端,并登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  10. 创建一个新的 Secret,其中包含之前创建的 MariaDB 实例中 Trillian 数据库的凭证:

    语法

    oc create secret generic OBJECT_NAME \
    --from-literal=mysql-database=trillian \
    --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \
    --from-literal=mysql-password=PASSWORD \
    --from-literal=mysql-port=3306 \
    --from-literal=mysql-root-password=PASSWORD \
    --from-literal=mysql-user=USER_NAME
    Copy to Clipboard

    Example

    oc create secret generic trillian-mysql \
    --from-literal=mysql-database=trillian \
    --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \
    --from-literal=mysql-password=mypassword123 \
    --from-literal=mysql-port=3306 \
    --from-literal=mysql-root-password=myrootpassword123 \
    --from-literal=mysql-user=trillian
    Copy to Clipboard

    您可以将 OpenShift 内部服务名称用于 MariaDB 实例。

  11. 现在,您可以部署 Trusted Artifact Signer 服务来使用此数据库。如果您遵循 Trusted Artifact Signer 安装过程,您可以 继续下一步

1.5.3. 在 OpenShift 中为受信任的工件签名程序配置数据库

使用这个流程,您可以将红帽的 Trusted Artifact Signer (RHTAS)默认数据库替换为 Amazon 的 Relational Database Service (RDS)管理的 MariaDB 实例。

重要

红帽建议在生产环境中使用高可用性 MariaDB 数据库。

先决条件

  • 创建 OpenShift 项目的权限,并从 OpenShift 示例目录部署数据库实例。
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 occurlmysql 二进制文件的工作站。
  • 具有特权的命令行访问权限,以创建数据库并填充 MariaDB 实例。

流程

  1. 登录到您要部署 RHTAS 服务的 OpenShift Web 控制台:
  2. 进入 Developer 视角。
  3. 如果项目已存在,选择 trusted-artifact-signer 项目,否则为数据库创建一个新项目:

    1. 若要创建新项目,请单击下拉菜单,再 单击创建项目按钮
    2. 将新项目命名为 trusted-artifact-signer,然后点 Create 按钮。
  4. Developer Catalog 卡上,单击 Database
  5. 选择 MariaDB,然后单击 Instantiate Template 按钮。

    重要

    不要选择 MariaDB (Ephemeral)

  6. Instantiate Template 页面中,配置以下字段:

    1. MariaDB Database Name 字段中,输入 trillian
    2. Volume Capacity 字段中,输入 5Gi
    3. Create 按钮。
  7. 开始远程 shell 会话:

    1. Topology 页面中,选择 MariaDB pod 会打开一个侧面板,点 Resources 选项卡。
    2. Pods 部分下,点 MariaDB pod 名称。
    3. Terminal 选项卡启动到 MariaDB pod 的远程 shell 会话。
  8. 在远程 shell 会话中,验证您可以连接到 Trillian 数据库:

    Example

    $ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DATABASE
    Copy to Clipboard

    注意

    凭据通过服务名称(mariadb)存储在机密对象中,包含数据库的名称和用户名,以及数据库 root 密码。记录这些凭证,因为稍后在创建数据库 secret 对象时将使用这些凭证。

  9. 断开与数据库的连接:

    Example

    EXIT
    Copy to Clipboard

  10. 下载数据库配置文件:

    Example

    curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
    Copy to Clipboard

  11. 将数据库配置应用到新数据库:

    语法

    mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
    Copy to Clipboard

    Example

    mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
    Copy to Clipboard

  12. 在工作站上打开一个终端,并登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard

    Example

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

    注意

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

  13. 创建一个新的 Secret,其中包含之前创建的 MariaDB 实例中 Trillian 数据库的凭证:

    语法

    oc create secret generic OBJECT_NAME \
    --from-literal=mysql-database=trillian \
    --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \
    --from-literal=mysql-password=PASSWORD \
    --from-literal=mysql-port=3306 \
    --from-literal=mysql-root-password=PASSWORD \
    --from-literal=mysql-user=USER_NAME
    Copy to Clipboard

    Example

    oc create secret generic trillian-mysql \
    --from-literal=mysql-database=trillian \
    --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \
    --from-literal=mysql-password=mypassword123 \
    --from-literal=mysql-port=3306 \
    --from-literal=mysql-root-password=myrootpassword123 \
    --from-literal=mysql-user=trillian
    Copy to Clipboard

    您可以将 OpenShift 内部服务名称用于 MariaDB 实例。

  14. 现在,您可以部署 Trusted Artifact Signer 服务来使用此数据库。如果您遵循 Trusted Artifact Signer 安装过程,您可以 继续下一步

1.6. 配置 OpenShift 服务服务证书,以便为 Keycloak 生成 TLS 证书

OpenShift 的服务服务证书可以自动生成和管理传输层安全(TLS)证书,供 Keycloak 使用。OpenShift 集群内的基础架构组件(如 Ingress Controller)将信任这些 TLS 证书。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 安装 RHBK 操作器.
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。

流程

  1. 在 OpenShift Web 控制台中,从 Administrator 视角中,从导航菜单中展开 Home,再单击 Projects
  2. 搜索 keycloak,然后选择 keycloak-system 命名空间。
  3. 创建新服务。

    1. + 图标。
    2. Import YAML 文本框中,复制示例,并将它粘贴到文本框中。

      Example

      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          service.beta.openshift.io/serving-cert-secret-name: keycloak-tls
        labels:
          app: keycloak
          app.kubernetes.io/instance: keycloak
        name: keycloak-service-trusted
        namespace: keycloak-system
      spec:
        internalTrafficPolicy: Cluster
        ipFamilies:
        - IPv4
        ipFamilyPolicy: SingleStack
        ports:
        - name: https
          port: 8443
        selector:
          app: keycloak
          app.kubernetes.io/instance: keycloak
      Copy to Clipboard

    3. Create 按钮。
  4. 从导航菜单中展开 Operators,点 Installed Operators,然后点 Keycloak Operator
  5. Keycloak 资源的 YAML 视图中,在 spec 部分添加 ingress 属性:

    Example

    spec:
    ...
      ingress:
        annotations:
          route.openshift.io/destination-ca-certificate-secret: keycloak-tls
          route.openshift.io/termination: reencrypt
    ...
    Copy to Clipboard

    默认情况下,Keycloak operator 创建 Ingress 资源而不是路由。OpenShift 根据 Ingress 定义自动创建路由。

  6. spec 部分下指定包含 TLS 证书的 secret 名称:

    Example

    spec:
    ...
      http:
        tlsSecret: keycloak-tls
    ...
    Copy to Clipboard

    一旦 Keycloak 启动后,OpenShift 的服务服务证书将开始为 Keycloak 生成 TLS 证书。

1.7. 自动生成 Keycloak 主机名

OpenShift 路由支持使用集合模式自动生成主机名。此功能可以与红帽构建的 Keycloak (RHBK) operator 集成。

先决条件

  • Red Hat OpenShift Container Platform 4.15 或更高版本。
  • 安装 RHBK 操作器.
  • 使用 cluster-admin 角色访问 OpenShift Web 控制台。
  • 安装了 oc 二进制文件的工作站。

流程

  1. 启用自动生成的路由主机名功能。

    1. .spec 部分下,删除整个 hostname 部分,并将其替换为 Keycloak 资源中的 ingress 部分和 className 属性:

      Example

      spec:
      ...
        hostname:
          hostname: example.com
      ...
      Copy to Clipboard

      Example

      spec:
      ...
        ingress:
          className: openshift-default
      ...
      Copy to Clipboard

      注意

      要查看所有可用的 Ingress 类,请运行以下命令:

      oc get ingressclass
      Copy to Clipboard
    2. Save 按钮。
  2. Reload 按钮查看最新配置来验证自动生成的 主机名

    Example

    spec:
    ...
      hostname:
        hostname: example-keycloak-ingress-keycloak-system.apps.rhtas.example.com
    ...
    Copy to Clipboard

第 2 章 Red Hat Enterprise Linux

2.1. 使用 Ansible 安装 Trusted Artifact Signer

您可以使用红帽提供的 Ansible Playbook 在 Red Hat Enterprise Linux 上安装 Red Hat Trusted Artifact Signer (RHTAS)。此部署为您提供了使用 Keycloak 作为 OpenID Connect (OIDC)供应商的基本签名框架。

警告

红帽建议不要在生产环境中使用 Ansible 日志记录详细或调试模式。

有关更多信息,请参阅 Ansible 文档

先决条件

  • Red Hat Enterprise Linux 9.4 或更高版本。
  • 用于访问 Red Hat Hybrid Cloud 控制台的红帽用户帐户。

流程

  1. 使用您的红帽凭证登录到 Red Hat Hybrid Cloud Console
  2. 在主页中,点 Services 下拉菜单,然后点 Red Hat Ansible Automation Platform
  3. 在导航菜单中展开 Automation Hub,然后点 Collections
  4. 在搜索字段中,键入 rhtas 并按 enter。
  5. 点 Red Hat Trusted Artifact Signer 标题上的 artifact_signer 链接。
  6. 单击 Documentation 选项卡,然后按照以下步骤在 Red Hat Enterprise Linux 上完成 RHTAS 安装。

    注意

    有关所有配置参数的详细概述,请单击 Roles 部分下的 tas_single_node 链接。

2.2. 验证 Trusted Artifact Signer 安装

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

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

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

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

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

重要

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

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 podman 二进制文件的工作站。

流程

  1. 从本地命令行界面(CLI)工具下载 cosign 二进制文件到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 cosign 下载部分,然后点击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

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

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

      Example

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

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

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    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

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

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

    Example

    cosign initialize
    Copy to Clipboard

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

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

      Example

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

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

      Example

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

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

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

    语法

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

    Example

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

    注意

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

  6. 从本地命令行界面(CLI)工具下载 rekor-cli 二进制文件,将页面下载到您的工作站。

    1. 打开 Web 浏览器,再前往 CLI 服务器网页。

      注意

      URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例为 https://cli-server.example.com,因为 tas_single_node_base_hostname 的值为 example.com

    2. 在下载页面中,进入 rekor-cli 下载部分,然后点击您的平台的链接。
    3. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

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

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

      Example

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

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

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

      Example

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

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

      语法

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

      Example

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

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

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

      语法

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

      Example

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

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

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

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 gitcosign 二进制文件的工作站。

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

流程

  1. gitsign 二进制文件从本地命令行界面(CLI)工具下载页面到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 gitsign 下载部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩 .gz 文件,并设置执行位:

      Example

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

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

      Example

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

  2. 配置您的 shell 环境,以进行提交签名和验证。

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    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

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

  3. 使用 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

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

    Example

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

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

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

    Example

    cosign initialize
    Copy to Clipboard

  6. 验证提交:

    语法

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

    Example

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

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

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

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 cosignpodman 二进制文件的工作站。

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

流程

  1. 从本地命令行界面(CLI)工具下载 ec 二进制文件到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 ec 下载部分,再单击平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

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

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

      Example

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

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

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    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

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

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

    Example

    cosign initialize
    Copy to Clipboard

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

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

      Example

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

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

      Example

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

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to Clipboard

      Example

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

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

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to Clipboard

  5. 创建 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

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

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

    语法

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

    Example

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

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

    语法

    cosign tree IMAGE_NAME:TAG
    Copy to Clipboard

    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

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

    语法

    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

    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

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

其它资源
  • 如需更多信息,请参阅企业合同 网站

附录 A. 红帽构建的 Keycloak 的 service 和 StatefulSet YAML 配置

为红帽信任的 Artifact Signer (RHTAS)服务配置红帽构建的 Keycloak (RHBK)时使用的 Service 和 StatefulSet YAML 资源配置。

---
apiVersion: v1
kind: Service
metadata:
  name: postgresql-db
  namespace: keycloak-system
spec:
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 5432
  selector:
    app: postgresql-db
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgresql-db
  namespace: keycloak-system
spec:
  persistentVolumeClaimRetentionPolicy:
    whenDeleted: Retain
    whenScaled: Retain
  podManagementPolicy: OrderedReady
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: postgresql-db
  serviceName: postgresql-db
  template:
    metadata:
      labels:
        app: postgresql-db
    spec:
      containers:
      - env:
        - name: POSTGRESQL_USER
          valueFrom:
            secretKeyRef:
              key: username
              name: postgresql-db
        - name: POSTGRESQL_PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: postgresql-db
        - name: POSTGRESQL_DATABASE
          valueFrom:
            secretKeyRef:
              key: database
              name: postgresql-db
        image: registry.redhat.io/rhel9/postgresql-15:latest
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - /usr/libexec/check-container
            - --live
          failureThreshold: 3
          initialDelaySeconds: 120
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 10
        name: postgresql-db
        readinessProbe:
          exec:
            command:
            - /usr/libexec/check-container
          failureThreshold: 3
          initialDelaySeconds: 5
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/lib/pgsql/data
          name: data
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      terminationGracePeriodSeconds: 30
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      volumeMode: Filesystem
Copy to Clipboard

返回到配置 RHBK 过程

附录 B. 可信 Artifact Signer 组件和版本号

下表列出了 Red Hat 的 Trusted Artifact Signer (RHTAS)软件组件及其对应的版本号,用于 1.2.1 版本。

表 B.1. 二进制文件
二进制Version

Cosign

2.4.3

gitsign

0.12.0

rekor-cli

1.3.9

EC

0.6

createtree

1.7.1

updatetree

1.7.1

tuftool

0.12.0

tuffer

0.17.1

fetch-tsa-certs

1.2.4

表 B.2. Trillian
组件Version

logserver

1.7.1

logsigner

1.7.1

database

1.7.1

redis

1.7.1

表 B.3. Rekor
组件Version

rekor-server

1.3.9

backfill-redis

1.3.9

rekor-search-ui

1.3.9

表 B.4. Fulcio
组件Version

fulcio-server

1.6.6

表 B.5. 证书转换
组件Version

certificate-transparency-go

1.3.1

表 B.6. 时间戳授权
组件Version

timestamp-authority

1.2.4

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat