概要
OpenID Connect (OIDC) を使用すると、GitHub Actions ワークフローでは、有効期間の長い GitHub シークレットとして Azure 資格情報を格納しなくても、Azure 内のリソースにアクセスできます。
このガイドでは、GitHubの OIDC をフェデレーション ID として信頼するようにAzureを構成する方法の概要について説明し、トークンを使用してAzureに認証し、リソースにアクセスする azure/login アクションのワークフロー例を示します。
前提条件
-
GitHub が OpenID Connect (OIDC) を使用する方法の基本的な概念とそのアーキテクチャと利点については、「OpenID Connect」を参照してください。
-
先に進む前に、アクセス トークンが予測可能な方法でのみ割り当てられるようにセキュリティ戦略を計画する必要があります。 クラウド プロバイダーがアクセス トークンを発行する方法を制御するには、少なくとも 1 つの条件を定義し、信頼できないリポジトリがクラウド リソースにアクセス トークンを要求できないようにする必要があります。 詳しくは、「OpenID Connect」をご覧ください。
-
GHE.com に関するこのガイドに従っている場合は、次のドキュメントの特定の値を置き換える必要があることを理解してください。 「OpenID Connect」を参照してください。
フェデレーション資格情報をAzureに追加する
GitHub の OIDC プロバイダーは、Azure のワークロード アイデンティティ フェデレーションと連携します。 概要については、「ワークロード ID フェデレーション」に掲載されている Microsoft のドキュメントを参照してください。
Azureで OIDC ID プロバイダーを構成するには、次の構成を実行する必要があります。 これらの変更の手順については、Azureドキュメントを参照してください。
次の手順では、Microsoft Entra ID (以前は Azure AD) 用のアプリケーションを作成します。
- Entra ID アプリケーションとサービス プリンシパルを作成します。
- Entra ID アプリケーションに対応するフェデレーション認証情報を追加します。
- Azure の構成を格納するための GitHub シークレットを作成します。
ID プロバイダーを構成するためのその他のガイダンス:
- セキュリティ強化については、必ず「OpenID Connect」をご確認ください。 例については、「AUTOTITLE」を参照してください。
- この
audience設定では、推奨される値はapi://AzureADTokenExchangeですが、ここで他の値を指定することもできます。
GitHub Actions ワークフローを更新する
OIDC 向けにワークフローを更新するには、YAML に 2 つの変更を加える必要があります。
- トークンのアクセス許可設定を追加します。
- OIDC トークン (JWT) をクラウド アクセス トークンと交換するには、
azure/loginアクションを使用します。
メモ
環境がワークフローまたは OIDC ポリシーで使われる場合は、セキュリティを強化するために環境に保護規則を追加することをお勧めします。 たとえば、環境のデプロイ規則を構成して、環境にデプロイできるブランチとタグを制限したり、環境シークレットにアクセスしたりできます。 詳しくは、「デプロイメント用の環境管理」をご覧ください。
アクセス許可設定の追加
GitHub の OIDC プロバイダーが実行ごとに JSON Web Token を生成できるようにするためには、permissions``id-token: write を用いた設定がジョブまたはワークフロー実行に必要です。
メモ
ワークフローのアクセス許可で id-token: write を設定しても、リソースへの変更または書き込みを行うアクセス許可はワークフローに付与されません。 そうではなく、ワークフローは、アクションまたはステップのための OIDC トークンを要求 (フェッチ) して使用 (設定) することのみが許可されます。 その後、このトークンは、有効期間の短いアクセス トークンを使って外部サービスで認証を行うために使われます。
必要なアクセス許可、構成例、高度なシナリオについて詳しくは、「OpenID Connect リファレンス」をご覧ください。
アクセス トークンの要求
[
`azure/login`
](https://github.com/Azure/login) アクションは、GitHub OIDC プロバイダーから JWT を受け取り、Azureからアクセス トークンを要求します。 詳細については、[`azure/login`](https://github.com/Azure/login) のドキュメントを参照してください。
次の例では、OIDC ID トークンを Azure と交換してアクセス トークンを受け取り、クラウド リソースへのアクセスに使用できます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list