概要
OpenID Connect (OIDC) を使用すると、GitHub Actions ワークフローで JFrog で認証 を行い、JFrog パスワード、トークン、または API キーを GitHub に格納せずに成果物をダウンロードして発行できます。
このガイドでは、GitHub の OIDC をフェデレーション ID として信頼するように JFrog を構成する方法の概要と、GitHub Actions ワークフローでこの構成を使用する方法について説明します。
GitHub Actions ワークフローの例については、JFrog 説明書の「サンプル GitHub Actions 統合」を参照してください。
JFrog CLI を使用した GitHub Actions ワークフローの例については、jfrog-github-oidc-example
リポジトリの「build-publish.yml
」を参照してください。
前提条件
-
GitHub が OpenID Connect (OIDC) を使用する方法の基本的な概念とそのアーキテクチャと利点については、「OpenID Connect を使ったセキュリティ強化について」を参照してください。
-
先に進む前に、アクセス トークンが予測可能な方法でのみ割り当てられるようにセキュリティ戦略を計画する必要があります。 クラウド プロバイダーがアクセス トークンを発行する方法を制御するには、少なくとも 1 つの条件を定義し、信頼できないリポジトリがクラウド リソースにアクセス トークンを要求できないようにする必要があります。 詳しくは、「OpenID Connect を使ったセキュリティ強化について」を参照してください。
-
セキュリティで保護するには、ID マッピングを構成するときに JFrog で Claims JSON を設定する必要があります。 詳細については、「AUTOTITLE」および「OpenID Connect を使ったセキュリティ強化について」を参照してください。
たとえば、
iss
はhttps://token.actions.githubusercontent.com
に、そしてrepository
は "octo-org/octo-repo" などに設定できます。 これにより、指定されたリポジトリの Actions ワークフローのみが JFrog プラットフォームにアクセスできるようになります。 ID マッピングを構成するときの 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 への ID プロバイダーの追加
OIDC と JFrog を使用するには、GitHub Actions と JFrog プラットフォームの間に信頼関係を確立します。 このプロセスの詳細については、JFrog 説明書の「OpenID Connect 統合」を参照してください。
- JFrog プラットフォームにサインインします。
- JFrog と GitHub Actions ワークフロー間の信頼を構成します。
- ID マッピングを構成します。
GitHub Actions ワークフローを更新する
GitHub Actions と JFrog プラットフォームの間に信頼関係を確立したら、GitHub Actions ワークフロー ファイルを更新できます。
GitHub Actions ワークフロー ファイルで、JFrog Platform で構成したプロバイダー名とオーディエンスを使用していることを確認します。
次の例では、プレースホルダー 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
コンテキストの詳細については、「Accessing contextual information about workflow runs」を参照してください。
独自のカスタム保護規則を有効にして、サードパーティ サービスを使ったデプロイを制御できます。 たとえば、Datadog、Honeycomb、ServiceNow などのサービスを使用し、GitHub への展開に対して自動承認を提供できます。
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);