Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となります: 2026-03-17. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

Google Cloud Platform での OpenID Connect の構成

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

メモ

GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。

概要

OpenID Connect (OIDC) を使用すると、有効期間の長い GitHub シークレットとして Google Cloud Platform (GCP) 資格情報を格納しなくても、GitHub Actions ワークフローから GCP 内のリソースにアクセスできます。

このガイドでは、GitHub の OIDC をフェデレーション ID として信頼するように GCP を構成する方法の概要と、トークンを使用して GCP に対する認証とリソースへのアクセスを行う google-github-actions/auth アクションのワークフロー例を示します。

前提条件

  • GitHub が OpenID Connect (OIDC) を使用する方法の基本的な概念とそのアーキテクチャと利点については、「OpenID Connect」を参照してください。

  • 先に進む前に、アクセス トークンが予測可能な方法でのみ割り当てられるようにセキュリティ戦略を計画する必要があります。 クラウド プロバイダーがアクセス トークンを発行する方法を制御するには、少なくとも 1 つの条件を定義し、信頼できないリポジトリがクラウド リソースにアクセス トークンを要求できないようにする必要があります。 詳しくは、「OpenID Connect」をご覧ください。

  • クラウド プロバイダーが次の OIDC エンドポイントにアクセスできることを確認する必要があります。

    • http://HOSTNAME/_services/token/.well-known/openid-configuration
    • http://HOSTNAME/_services/token/.well-known/jwks

    メモ

    Google Cloud Platform には、このようなエンドポイントに対して定義された固定の IP 範囲がありません。

  • JSON Web Token (JWT) に含まれる発行者要求の値が、パブリックにルーティング可能な URL に設定されていることを確認します。 詳しくは、「OpenID Connect」をご覧ください。

Google Cloud Workload ID プロバイダーの追加

GCP で OIDC ID プロバイダーを構成するには、次の構成を実行する必要があります。 これらの変更を行う手順については、GCP のドキュメントを参照してください。

  1. 新しい ID プールを作成します。
  2. マッピングを構成し、条件を追加します。
  3. 新しいプールをサービス アカウントに接続します。

ID プロバイダーを構成するためのその他のガイダンス:

GitHub Actions ワークフローを更新する

OIDC のワークフローを更新するには、YAML に 2 つの変更を行う必要があります。

  1. トークンのアクセス許可設定を追加します。
  2. この google-github-actions/auth アクションを使って、OIDC トークン (JWT) をクラウド アクセス トークンと交換します。

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

アクセス許可設定の追加

GitHub の OIDC プロバイダーが実行ごとに JSON Web Token を作成できるよう、ジョブまたはワークフローの実行には id-token: write を含む permissions の設定が必要です。

メモ

ワークフローのアクセス許可で id-token: write を設定しても、リソースへの変更または書き込みを行うアクセス許可はワークフローに付与されません。 そうではなく、ワークフローは、アクションまたはステップのための OIDC トークンを要求 (フェッチ) して使用 (設定) することのみが許可されます。 その後、このトークンは、有効期間の短いアクセス トークンを使って外部サービスで認証を行うために使われます。

必要なアクセス許可、構成例、高度なシナリオについて詳しくは、「OpenID Connect リファレンス」をご覧ください。

アクセス トークンの要求

この google-github-actions/auth アクションを使うと、GitHub OIDC プロバイダーから JWT を受け取り、アクセス トークンを GCP に要求します。 詳細については、GCP のドキュメントを参照してください。

この例には、アクションを使って GCP のサービス一覧を要求する Get_OIDC_ID_token というジョブがあります。

  • WORKLOAD-IDENTITY-PROVIDER: これを GCP の ID プロバイダーへのパスに置き換えます。 たとえば、projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-provider のように指定します。
  • SERVICE-ACCOUNT: これを GCP のサービス アカウント名に置き換えます。

このアクションを使い、ワークロード ID フェデレーションを使って、GitHub OIDC トークンを Google Cloud アクセス トークンと交換します。

YAML
name: List services in GCP
on:
  pull_request:
    branches:
      - main

permissions:
  id-token: write

jobs:
  Get_OIDC_ID_token:
    runs-on: ubuntu-latest
    steps:
    - id: 'auth'
      name: 'Authenticate to GCP'
      uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
      with:
          create_credentials_file: 'true'
          workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
          service_account: 'SERVICE-ACCOUNT'
    - id: 'gcloud'
      name: 'gcloud'
      run: |-
        gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
        gcloud services list

参考資料