Skip to main content

JFrog での OpenID Connect の構成

ワークフロー内で OpenID Connect を使用して、JFrog で認証を行います。

概要

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 を使ったセキュリティ強化について」を参照してください。

    たとえば、isshttps://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"
    }
    

JFrog への ID プロバイダーの追加

OIDC と JFrog を使用するには、GitHub Actions と JFrog プラットフォームの間に信頼関係を確立します。 このプロセスの詳細については、JFrog 説明書の「OpenID Connect 統合」を参照してください。

  1. JFrog プラットフォームにサインインします。
  2. JFrog と GitHub Actions ワークフロー間の信頼を構成します。
  3. 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 コンテキストの詳細については、「コンテキスト」を参照してください。

独自のカスタム保護規則を有効にして、サードパーティ サービスを使ったデプロイを制御できます。 たとえば、Datadog、Honeycomb、ServiceNow などのサービスを使って、GitHub.com へのデプロイに対して自動承認を提供できます。

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