GitHub Actions を使用して Azure に接続する
Azure ログインを Azure PowerShell または Azure CLI とともに使用して Azure リソースを操作する方法について説明します。
GitHub Actions ワークフローで Azure PowerShell または Azure CLI を使用するには、まず、Azure login アクションを使用してログインする必要があります。
Azure ログイン アクションは、Azure で認証する 2 つの異なる方法をサポートします。
既定では、このログイン アクションは Azure CLI を使用してログインし、Azure CLI に対して GitHub Actions ランナー環境を設定します。 Azure login アクションの enable-AzPSSession
プロパティを使用すると、Azure PowerShell を使用できます。 これは、Azure PowerShell モジュールを使用して GitHub Actions ランナー環境を設定します。
Azure ログインを使用して、Azure Government や Azure Stack Hub などのパブリックまたはソブリン クラウドに接続できます。
OpenID Connect で Azure ログイン アクションを使用
OpenID Connect を使用して Azure Login を設定し、GitHub Actions ワークフローで使用するには、次が必要です。
- An Microsoft Entra アプリケーション、サブスクリプションに適切なロールが割り当てられているサービス プリンシパルを使用。
- GitHub Actions によって GitHub リポジトリに対して発行されたトークンを信頼するように、フェデレーション資格情報を使用して構成された Microsoft Entra アプリケーション。 これを構成するには、Azure portal または Microsoft Graph REST API を使用します。
- GitHub のイシュー トークンをワークフローに要求して、Azure ログイン アクションを使用する GitHub Actions ワークフロー。
Microsoft Entra アプリケーションとサービス プリンシパルを作成します
ワークフローがサブスクリプションにアクセスできるよう、Microsoft Entra アプリケーションとサービス プリンシパルを作成し、サブスクリプションのロールをアプリケーションに割り当てる必要があります。
既存のアプリケーションがない場合は、リソースにアクセスできる新しい Microsoft Entra アプリケーションとサービス プリンシパルを登録します。 このプロセスの一環として、次の手順を実行してください。
- Microsoft Entra ID にアプリケーションを登録し、サービス プリンシパルを作成します
- アプリケーションにロールを割り当てる
Azure portal の [アプリの登録] を開いて、アプリケーションを見つけます。 アプリケーション (クライアント) ID とディレクトリ (テナント) IDの値をコピーして、GitHub Actions ワークフローで使用します。
Azure portal の [サブスクリプション] を開いて、サブスクリプションを見つけます。 サブスクリプション ID をコピーします。
フェデレーション資格情報を追加する
フェデレーション資格情報は、Azure portal または Microsoft Graph REST API を使用して追加できます。
- Azure Portal の [アプリの登録] に移動し、構成するアプリを開きます。
- アプリ内で、[証明書とシークレット ] に移動します。
- [フェデレーション資格情報] タブで、[資格情報の追加] を選択します。
- 資格情報シナリオ [Azure リソースをデプロイする GitHub Actions] を選択します。 資格情報の詳細を入力して、資格情報を生成します。
フィールド | Description | 例 |
---|---|---|
組織 | GitHub 組織名または GitHub ユーザー名。 | contoso |
リポジトリ | GitHub リポジトリ名。 | contoso-app |
エンティティ型 | GitHub ワークフローから OIDC 要求の範囲を調べるために使用されるフィルター。 このフィールドは、subject 要求を生成するために使用 されます。 |
Environment 、Branch 、、 Pull request Tag |
GitHub 名 | 環境、ブランチ、またはタグの名前。 | main |
名前 | フェデレーション資格情報の識別子。 | contoso-deploy |
より詳細な概要については、「GitHub リポジトリを信頼するようにアプリを構成する」を参照してください。
GitHub シークレットを作成する
ログイン アクションには、アプリケーションのクライアント ID、テナント ID、サブスクリプション IDを指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。
GitHub リポジトリを開き、[Settings](設定) に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
AZURE_CLIENT_ID
、AZURE_TENANT_ID
、AZURE_SUBSCRIPTION_ID
のシークレットを作成します。 GitHub シークレットには、Azure Active Directory アプリケーションの次の値を使用します。GitHub シークレット Azure Active Directory アプリケーション AZURE_CLIENT_ID アプリケーション (クライアント) ID AZURE_TENANT_ID ディレクトリ (テナント) ID AZURE_SUBSCRIPTION_ID サブスクリプション ID [Add secret](シークレットの追加) を選択して各シークレットを保存します。
OpenID Connect 認証を使用して Azure ログインを設定する
GitHub Actions ワークフローでは、OpenID Connect を使用して Azure で認証します。 この相互作用の詳細については、GitHub Actions のドキュメントを参照してください。
この例では、OpenID Connect Azure CLI を使用し、Azure ログイン アクションを使用して Azure で認証します。 この例では、client-id
、tenant-id
、subscription-id
に対して GitHub シークレットを使用します。 これらの値は、ログイン アクションで直接渡すこともできます。
Azure ログイン アクションには、既定で api://AzureADTokenExchange
に設定される省略可能な audience
入力パラメーターが含まれています。 このパラメーターは、カスタムの対象ユーザーの値に対して更新できます。
このワークフローは OpenID Connect で認証し、Azure CLI を使用して接続されたサブスクリプションの詳細を取得し、リソースグループを一覧表示します。
name: Run Azure Login with OpenID Connect
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run Azure CLI commands'
run: |
az account show
az group list
pwd
OpenID を使用した Azure ログインの成功を確認する
Az CLI login
アクションを開き、正常に実行されたことを確認します。 Login successful
というメッセージが表示されます。 ログインに失敗した場合は、Az CLI Login failed.
というメッセージが表示されます。
サービス プリンシパル シークレットで Azure ログイン アクションを使用する
サービス プリンシパルで Azure ログインを使用するには、まず、Azure サービス プリンシパルをシークレットとして GitHub リポジトリに追加する必要があります。
サービス プリンシパルの作成
この例では、Azure での認証に使用できる AZURE_CREDENTIALS
という名前のシークレットを作成します。
Azure Portal または Azure CLI でローカルに Azure Cloud Shell を開きます。
Note
Azure Stack Hub を使用している場合は、SQL 管理エンドポイントを
not supported
に設定する必要があります。az cloud update -n {environmentName} --endpoint-sql-management https://notsupported
Azure portal でアプリ用の新しいサービス プリンシパルを作成します。 サービス プリンシパルには、適切なロールを割り当てる必要があります。
az ad sp create-for-rbac --name "myApp" --role contributor \ --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \ --json-auth
パラメーター
--json-auth
は、ログイン アクションによって受け入れられた結果ディクショナリを出力します。Azure CLI バージョン >= 2.51.0 でアクセスできます。 これ以前のバージョンでは--sdk-auth
を使用し、非推奨の警告が表示されます。サービス プリンシパルの JSON オブジェクトをコピーします。
{ "clientId": "<GUID>", "clientSecret": "<GUID>", "subscriptionId": "<GUID>", "tenantId": "<GUID>", (...) }
サービス プリンシパルを GitHub シークレットとして追加します
GitHub で、お使いのリポジトリに移動します。
ナビゲーション メニューで [設定] に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに
AZURE_CREDENTIALS
と名前を付けます。[Add secret](シークレットの追加) を選択します。
Azure ログイン アクションを使用する
Azure で認証するには、サービス プリンシパル シークレットと Azure Login アクションを使用します。
このワークフローでは、secrets.AZURE_CREDENTIALS
に格納されているサービス プリンシパルの詳細を使用して、Azure login アクションを使って認証を行います。 次に、Azure CLI アクションを実行します。 ワークフロー ファイルで GitHub シークレットを参照する方法の詳細については、GitHub Docs の「ワークフローでの暗号化されたシークレットの使用」をご覧ください。
動作する Azure ログイン ステップを作成したら、Azure PowerShell または Azure CLI のアクションを使用できます。 Azure Webapp のデプロイや Azure Functions など、その他の Azure Actions を使用することもできます。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
Azure PowerShell アクションを使用する
この例では、Azure Login アクションを使用してログインし、Azure PowerShell アクションを使用してリソース グループを取得します。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
enable-AzPSSession: true
- name: Azure PowerShell Action
uses: Azure/powershell@v1
with:
inlineScript: Get-AzResourceGroup -Name "< YOUR RESOURCE GROUP >"
azPSVersion: "latest"
Azure CLI アクションを使用する
この例では、Azure ログイン アクションを使用してログインし、Azure CLI アクションを使用してリソース グループを取得します。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Azure CLI script
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az account show
az storage -h
Azure Government および Azure Stack Hub クラウドに接続する
いずれかの Azure Government クラウドにログインするには、サポートされているクラウド名 AzureUSGovernment
または AzureChinaCloud
を使用して、オプションのパラメーター環境を設定する必要があります。 このパラメーターを指定しないと、既定値の AzureCloud
が使用され、Azure パブリック クラウドに接続されます。
- name: Login to Azure US Gov Cloud with CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
environment: 'AzureUSGovernment'
enable-AzPSSession: false
- name: Login to Azure US Gov Cloud with Az Powershell
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
environment: 'AzureUSGovernment'
enable-AzPSSession: true
他の Azure サービスと接続する
次の記事では、Azure およびその他のサービスから GitHub に接続する方法について詳しく説明しています。