跳至主要内容

在 JFrog 中配置 OpenID Connect

在工作流中使用 OpenID Connect 来验证 JFrog。

概述

OpenID Connect (OIDC) 允许您的 GitHub 操作工作流使用 JFrog 进行身份验证,以下载和发布工件,而无需在 GitHub 中存储 JFrog 密码、令牌或 API 密钥。

本指南概述了如何配置 JFrog 以信任 GitHub 的 OIDC 作为联合身份,并演示如何在 GitHub 操作工作流中使用此配置。

有关 GitHub 操作工作流示例,请参阅 JFrog 文档中的 GitHub 操作集成示例

有关使用 JFrog CLI 的 GitHub 操作工作流示例,请参阅 jfrog-github-oidc-example 存储库中的 build-publish.yml

先决条件

  • 要了解 GitHub 如何使用 OpenID Connect (OIDC) 的基本概念,以及其架构和优势,请参阅“关于使用 OpenID Connect 进行安全强化”。

  • 在继续之前,您必须规划您的安全策略,以确保仅以可预测的方式分配访问令牌。要控制您的云提供商如何颁发访问令牌,您必须定义至少一个条件,以便不受信任的存储库无法为您的云资源请求访问令牌。有关更多信息,请参阅“关于使用 OpenID Connect 进行安全强化”。

  • 为了安全,您需要在配置身份映射时在 JFrog 中设置一个声明 JSON。有关更多信息,请参阅“AUTOTITLE”和“关于使用 OpenID Connect 进行安全强化”。

    例如,您可以将iss设置为https://token.actions.githubusercontent.com,并将repository设置为类似于“octo-org/octo-repo”的内容。这将确保只有来自指定存储库的 Actions 工作流才能访问您的 JFrog 平台。以下是配置身份映射时的示例声明 JSON。

    JSON
    {
      "iss": "https://token.actions.githubusercontent.com",
      "repository": "octo-org/octo-repo"
    }
    

将身份提供程序添加到 JFrog

要将 OIDC 与 JFrog 一起使用,请在 GitHub Actions 和 JFrog 平台之间建立信任关系。有关此过程的更多信息,请参阅 JFrog 文档中的OpenID Connect 集成

  1. 登录您的 JFrog 平台。
  2. 配置 JFrog 和您的 GitHub Actions 工作流之间的信任。
  3. 配置身份映射。

更新您的 GitHub Actions 工作流

在 GitHub Actions 和 JFrog 平台之间建立信任关系后,您可以更新您的 GitHub Actions 工作流文件。

在您的 GitHub Actions 工作流文件中,确保您正在使用您在 JFrog 平台中配置的提供程序名称和受众。

以下示例使用占位符 YOUR_PROVIDER_NAME

- name: Fetch Access Token from Artifactory
        id: fetch_access_token
        env:
          ID_TOKEN: $
        run: |
          ACCESS_TOKEN=$(curl \
          -X POST \
          -H "Content-type: application/json" \
          https://example.jfrog.io/access/api/v1/oidc/token \
          -d \
          "{\"grant_type\": \"urn:ietf:params:oauth:grant-type:token-exchange\", \"subject_token_type\":\"urn:ietf:params:oauth:token-type:id_token\", \"subject_token\": \"$ID_TOKEN\", \"provider_name\": \"YOUR_PROVIDER_NAME\"}" | jq .access_token | tr -d '"')
          echo ACCESS_TOKEN=$ACCESS_TOKEN >> $GITHUB_OUTPUT

以下示例显示了使用 cURL 的 GitHub Actions 工作流文件的一部分。

- name: Get ID Token (cURL method)
        id: idtoken
        run: |
          ID_TOKEN=$(curl -sLS -H "User-Agent: actions/oidc-client" -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
          "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=jfrog-github" | jq .value | tr -d '"')
          echo "ID_TOKEN=${ID_TOKEN}" >> $GITHUB_OUTPUT

或者,你可以使用 env 上下文将受众设置为环境变量。有关 env 上下文的更多信息,请参阅“上下文”。

注意:当在工作流或 OIDC 策略中使用环境时,我们建议为环境添加保护规则以提高安全性。例如,你可以在环境中配置部署规则,以限制哪些分支和标签可以部署到环境或访问环境机密。有关更多信息,请参阅“使用环境进行部署”。

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      OIDC_AUDIENCE: 'YOUR_AUDIENCE'

然后,在你的工作流文件中,检索存储在 env 上下文中的变量的值。以下示例使用 env 上下文来检索 OIDC 受众。

- name: Get ID Token (using env context)
        uses: actions/github-script@v6
        id: idtoken
        with:
          script: |
            const coredemo = require('@actions/core');
            let id_token = await coredemo.getIDToken(process.env.OIDC_AUDIENCE);
            coredemo.setOutput('id_token', id_token);