Skip to main content

GitHub Actions ワークフローで GitHub App を使用して認証済み API 要求を作成する

GitHub App からのインストール アクセス トークンを使って、GitHub Actions ワークフローで認証済み API 要求を行うことができます。 トークンをカスタム アクションに渡して、アクションで認証済み API 要求を行えるようにすることもできます。

GitHub Actions の認証について

GitHub Actions ワークフローで認証済み API 要求を行う必要がある場合、またはトークンを必要とするカスタム アクションを実行する必要がある場合は、可能であれば組み込みの GITHUB_TOKEN を使う必要があります。 ただし、GITHUB_TOKEN でアクセスできるのは、ワークフローのリポジトリ内のリソースだけです。 Organization 内や別のリポジトリ内のリソースなど、追加のリソースにアクセスする必要がある場合は、GitHub App を使用できます。 personal access token ではなく GitHub App を使う場合の理由について詳しくは、「GitHub App の作成について」をご覧ください。

GitHub App による認証

GitHub App を使って認証済み API 要求を行うには、GitHub App を登録し、アプリの資格情報を格納して、アプリをインストールする必要があります。 これが済んだら、アプリを使ってインストール アクセス トークンを作成できます。それを使って、GitHub Actions ワークフローで認証済み API 要求を行うことができます。 トークンを必要とするカスタム アクションにインストール アクセス トークンを渡すこともできます。

  1. GitHub App を登録します。 GitHub App 登録に、目的のリソースにアクセスするために必要なアクセス許可を付与します。 詳細については、「GitHub App の登録」および「GitHub アプリのアクセス許可を選択する」を参照してください。

  2. GitHub App のアプリ ID を GitHub Actions 構成変数として格納します。 アプリ ID は、アプリの設定ページで確認できます。 アプリ ID は、クライアント ID とは異なります。 GitHub App の [設定] ページにアクセスする方法について詳しくは、「GitHub App 登録の変更」を参照してください。 構成変数の保存の詳細については「変数」を参照してください。

  3. アプリケーションの秘密鍵を生成してください。 作成されたファイルの内容をシークレットとして保存します。 (-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY----- も含めて、ファイルの内容全体を格納します)。詳しくは、「GitHub Apps の秘密キーの管理」をご覧ください。 シークレットの保管の詳細については、「GitHub Actions でのシークレットの使用」を参照してください。

  4. GitHub App をユーザー アカウントまたは Organization にインストールし、ワークフローでアクセスするリポジトリへのアクセス権をそれに付与します。 詳しくは、「独自の GitHub App のインストール」を参照してください。

  5. GitHub Actions ワークフローで、API 要求を行うために使用できるインストール アクセス トークンを作成します。

    これを行うには、次の例に示すように、GitHub 所有のアクションを使用できます。 サード パーティのアクションを使いたくない場合は、actions/create-github-app-tokenアクションをフォークして変更するか、ワークフローでインストール トークンを手動で作成するスクリプトを記述できます。 詳しくは、「GitHub App インストールとしての認証」をご覧ください。

    次のワークフロー例では、actions/create-github-app-token アクションを使用してインストール アクセス トークンを生成します。 その後、ワークフローでそのトークンを使って、GitHub CLI から API 要求を行います。

    次のワークフローの APP_ID を、アプリ ID を格納した構成変数の名前に置き換えます。 APP_PRIVATE_KEY を、アプリの秘密キーを格納したシークレットの名前に置き換えます。

YAML

on:
  workflow_dispatch:
jobs:
  demo_app_authentication:
    runs-on: ubuntu-latest
    steps:
      - name: Generate a token
        id: generate-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Use the token
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
        run: |
          gh api octocat