{"meta":{"title":"Google Cloud Platform での OpenID Connect の構成","intro":"ワークフロー内で OpenID Connect を使用して、Google Cloud Platform での認証を行います。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/how-tos","title":"方法"},{"href":"/ja/actions/how-tos/secure-your-work","title":"作業をセキュリティで保護する"},{"href":"/ja/actions/how-tos/secure-your-work/security-harden-deployments","title":"セキュリティを強化したデプロイメント"},{"href":"/ja/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-google-cloud-platform","title":"Google Cloud Platform での OIDC"}],"documentType":"article"},"body":"# Google Cloud Platform での OpenID Connect の構成\n\nワークフロー内で OpenID Connect を使用して、Google Cloud Platform での認証を行います。\n\n## 概要\n\nOpenID Connect (OIDC) を使用すると、 GitHub Actions ワークフローは、有効期間の長い GitHub シークレットとして GCP 資格情報を格納しなくても、Google Cloud Platform (GCP) 内のリソースにアクセスできます。\n\nこのガイドでは、 GitHubの OIDC をフェデレーション ID として信頼するように GCP を構成する方法の概要と、トークンを使用して GCP に対して認証し、リソースにアクセスする [`google-github-actions/auth`](https://github.com/google-github-actions/auth) アクションのワークフロー例を示します。\n\n## 前提条件\n\n* GitHub が OpenID Connect (OIDC) を使用する方法の基本的な概念とそのアーキテクチャと利点については、「[OpenID Connect](/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)」を参照してください。\n\n* 先に進む前に、アクセス トークンが予測可能な方法でのみ割り当てられるようにセキュリティ戦略を計画する必要があります。 クラウド プロバイダーがアクセス トークンを発行する方法を制御するには、少なくとも 1 つの条件を定義し、信頼できないリポジトリがクラウド リソースにアクセス トークンを要求できないようにする**必要があります**。 詳しくは、「[OpenID Connect](/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#configuring-the-oidc-trust-with-the-cloud)」をご覧ください。\n\n## Google Cloud Workload ID プロバイダーの追加\n\nGCP で OIDC ID プロバイダーを構成するには、次の構成を実行する必要があります。 これらの変更を行う手順については、[GCP のドキュメント](https://github.com/google-github-actions/auth)を参照してください。\n\n1. 新しい ID プールを作成します。\n2. マッピングを構成し、条件を追加します。\n3. 新しいプールをサービス アカウントに接続します。\n\nID プロバイダーを構成するためのその他のガイダンス:\n\n* セキュリティ強化については、「[クラウドとの OIDC 信頼の構成](/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#configuring-the-oidc-trust-with-the-cloud)」を確認してください。 例については、「[クラウド プロバイダーでのサブジェクトの構成](/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#configuring-the-subject-in-your-cloud-provider)」を参照してください。\n* サービス アカウントを構成に使用できるようにするには、`roles/iam.workloadIdentityUser` ロールに割り当てる必要があります。 詳細については、[GCP のドキュメント](https://cloud.google.com/iam/docs/workload-identity-federation?_ga=2.114275588.-285296507.1634918453#conditions)を参照してください。\n* 使用する発行者 URL: `https://token.actions.githubusercontent.com`\n\n## GitHub Actions ワークフローの更新\n\nOIDC のワークフローを更新するには、YAML に 2 つの変更を行う必要があります。\n\n1. トークンのアクセス許可設定を追加します。\n2. OIDC トークン (JWT) をクラウド アクセス トークンと交換するには、[`google-github-actions/auth`](https://github.com/google-github-actions/auth) アクションを使用します。\n\n> \\[!NOTE]\n> 環境がワークフローまたは OIDC ポリシーで使われる場合は、セキュリティを強化するために環境に保護規則を追加することをお勧めします。 たとえば、環境のデプロイ規則を構成して、環境にデプロイできるブランチとタグを制限したり、環境シークレットにアクセスしたりできます。 詳しくは、「[デプロイメント用の環境管理](/ja/actions/deployment/targeting-different-environments/managing-environments-for-deployment#deployment-protection-rules)」をご覧ください。\n\n### アクセス許可設定の追加\n\nGitHub の OIDC プロバイダーが実行ごとに JSON Web Token を生成できるようにするためには、`permissions``id-token: write` を用いた設定がジョブまたはワークフロー実行に必要です。\n\n> \\[!NOTE] ワークフローのアクセス許可で `id-token: write` を設定しても、リソースへの変更または書き込みを行うアクセス許可はワークフローに付与されません。 そうではなく、ワークフローは、アクションまたはステップのための OIDC トークンを要求 (フェッチ) して使用 (設定) することのみが許可されます。 その後、このトークンは、有効期間の短いアクセス トークンを使って外部サービスで認証を行うために使われます。\n\n必要なアクセス許可、構成例、高度なシナリオについて詳しくは、「[OpenID Connect リファレンス](/ja/actions/reference/openid-connect-reference##workflow-permissions-for-the-requesting-the-oidc-token)」をご覧ください。\n\n### アクセス トークンの要求\n\n`google-github-actions/auth` アクションは、GitHub OIDC プロバイダーから JWT を受け取り、その後、GCP にアクセス トークンを要求します。 詳細については、GCP の[ドキュメント](https://github.com/google-github-actions/auth)を参照してください。\n\nこの例には、アクションを使って GCP のサービス一覧を要求する `Get_OIDC_ID_token` というジョブがあります。\n\n* `WORKLOAD-IDENTITY-PROVIDER`: これを GCP の ID プロバイダーへのパスに置き換えます。 たとえば、`projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-provider` のように指定します。\n* `SERVICE-ACCOUNT`: これを GCP のサービス アカウント名に置き換えます。\n\nこのアクションでは、GitHubを使用して、[](https://cloud.google.com/iam/docs/workload-identity-federation) OIDC トークンを Google Cloud アクセス トークンと交換します。\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\nname: List services in GCP\non:\n  pull_request:\n    branches:\n      - main\n\npermissions:\n  id-token: write\n\njobs:\n  Get_OIDC_ID_token:\n    runs-on: ubuntu-latest\n    steps:\n    - id: 'auth'\n      name: 'Authenticate to GCP'\n      uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'\n      with:\n          create_credentials_file: 'true'\n          workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'\n          service_account: 'SERVICE-ACCOUNT'\n    - id: 'gcloud'\n      name: 'gcloud'\n      run: |-\n        gcloud auth login --brief --cred-file=\"${{ steps.auth.outputs.credentials_file_path }}\"\n        gcloud services list\n```\n\n## 参考資料\n\n* [再利用可能なワークフローでの OpenID Connect の使用](/ja/actions/deployment/security-hardening-your-deployments/using-openid-connect-with-reusable-workflows)\n* [セルフホステッド ランナー リファレンス](/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/communicating-with-self-hosted-runners)"}