3.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.13 或更高版本。
  • 具有创建资源的 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)

  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')

    注意

    默认情况下,客户端 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"}'

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

    Example

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

  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}}"

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

    Example

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

  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")

  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}\"}"

  10. 获取租户标识符:

    Example

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

  11. 获取 OIDC 端点:

    Example

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

  12. 更新 RHTAS 配置。

    1. 打开以编辑 Securesign 资源:

      语法

      oc edit Securesign NAME -n NAMESPACE

      Example

      $ oc edit Securesign securesign-sample -n trusted-artifact-signer

      注意

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

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

      语法

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

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

    Example

    $ echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret

  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

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

    Example

    $ cosign initialize

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

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

      Example

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

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

      Example

      $ podman push ttl.sh/rhtas/test-image:1h

    3. 删除临时 Docker 文件:

      Example

      $ rm ./tmp.Dockerfile

    4. 为容器镜像签名:

      语法

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

      Example

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.