概述
OpenID Connect (OIDC) 允许 GitHub Actions 工作流完成 JFrog 身份验证,无需在 GitHub 中存储 JFrog 密码、令牌或 API 密钥即可下载和发布项目。
本指南概述了如何将 JFrog 配置为信任 GitHub 的 OIDC 作为联合标识,并演示如何在 GitHub Actions 工作流中使用此配置。
有关示例 GitHub Actions 工作流,请参阅 JFrog 文档中的示例 GitHub Actions 集成。
有关使用 JFrog CLI 的示例 GitHub Actions 工作流,请参阅 jfrog-github-oidc-example
存储库中的 build-publish.yml
。
先决条件
-
若要了解 GitHub 如何使用 OpenID Connect (OIDC) 及其体系结构和优势的基本概念,请参阅“关于使用 OpenID Connect 进行安全强化”。
-
在继续之前,必须规划安全策略,以确保仅以可预测的方式分配访问令牌。 要控制云提供商颁发访问令牌的方式,必须至少定义一个条件,以便不受信任的存储库无法为云资源请求访问令牌。 有关详细信息,请参阅“关于使用 OpenID Connect 进行安全强化”。
-
为了确保安全,在配置标识映射时,需要在 JFrog 中设置 Claims JSON。 有关详细信息,请参阅 AUTOTITLE 和 关于使用 OpenID Connect 进行安全强化。
例如,可以将
iss
设置为https://token.actions.githubusercontent.com
,将repository
设置为类似“octo-org/octo-repo”的内容。 这将确保只有来自指定存储库的 Actions 工作流才有 JFrog 平台访问权限。 下面是配置标识映射时的 Claims JSON 示例。JSON { "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
{ "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
将标识提供者添加到 JFrog
若要将 OIDC 与 JFrog 配合使用,请在 GitHub Actions 与 JFrog 平台之间建立信任关系。 有关此过程的详细信息,请参阅 JFrog 文档中的 OpenID Connect 集成。
- 登录 JFrog 平台。
- 配置 JFrog 与 GitHub Actions 工作流之间的信任关系。
- 配置标识映射。
更新 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
以下示例演示了 GitHub Actions 工作流文件(使用 cURL)的一部分。
- 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
上下文的详细信息,请参阅“访问有关工作流运行的上下文信息”。
Note
在工作流或 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);