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 アプリケーションとサービス プリンシパルを作成し、サブスクリプションのロールをアプリケーションに割り当てる必要があります。

  1. 既存のアプリケーションがない場合は、リソースにアクセスできる新しい Microsoft Entra アプリケーションとサービス プリンシパルを登録します。 このプロセスの一環として、次の手順を実行してください。

    • Microsoft Entra ID にアプリケーションを登録し、サービス プリンシパルを作成します
    • アプリケーションにロールを割り当てる
  2. Azure portal の [アプリの登録] を開いて、アプリケーションを見つけます。 アプリケーション (クライアント) ID ディレクトリ (テナント) IDの値をコピーして、GitHub Actions ワークフローで使用します。

  3. Azure portal の [サブスクリプション] を開いて、サブスクリプションを見つけます。 サブスクリプション ID をコピーします。

フェデレーション資格情報を追加する

フェデレーション資格情報は、Azure portal または Microsoft Graph REST API を使用して追加できます。

  1. Azure Portal[アプリの登録] に移動し、構成するアプリを開きます。
  2. アプリ内で、[証明書とシークレット ] に移動します。
    Select Certificates & secrets.
  3. [フェデレーション資格情報] タブで、[資格情報の追加] を選択します。 Add the federated credential
  4. 資格情報シナリオ [Azure リソースをデプロイする GitHub Actions] を選択します。 資格情報の詳細を入力して、資格情報を生成します。
フィールド Description
組織 GitHub 組織名または GitHub ユーザー名。 contoso
リポジトリ GitHub リポジトリ名。 contoso-app
エンティティ型 GitHub ワークフローから OIDC 要求の範囲を調べるために使用されるフィルター。 このフィールドは、subject 要求を生成するために使用 されます。 EnvironmentBranch、、 Pull requestTag
GitHub 名 環境、ブランチ、またはタグの名前。 main
名前 フェデレーション資格情報の識別子。 contoso-deploy

より詳細な概要については、「GitHub リポジトリを信頼するようにアプリを構成する」を参照してください。

GitHub シークレットを作成する

ログイン アクションには、アプリケーションのクライアント IDテナント IDサブスクリプション IDを指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。

  1. GitHub リポジトリを開き、[Settings](設定) に移動します。

    Select Settings in the navigation

  2. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    Choose to add a secret

  3. AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID のシークレットを作成します。 GitHub シークレットには、Azure Active Directory アプリケーションの次の値を使用します。

    GitHub シークレット Azure Active Directory アプリケーション
    AZURE_CLIENT_ID アプリケーション (クライアント) ID
    AZURE_TENANT_ID ディレクトリ (テナント) ID
    AZURE_SUBSCRIPTION_ID サブスクリプション ID
  4. [Add secret](シークレットの追加) を選択して各シークレットを保存します。

OpenID Connect 認証を使用して Azure ログインを設定する

GitHub Actions ワークフローでは、OpenID Connect を使用して Azure で認証します。 この相互作用の詳細については、GitHub Actions のドキュメントを参照してください。

この例では、OpenID Connect Azure CLI を使用し、Azure ログイン アクションを使用して Azure で認証します。 この例では、client-idtenant-idsubscription-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. というメッセージが表示されます。

GitHub Actions Azure Login successful.

サービス プリンシパル シークレットで Azure ログイン アクションを使用する

サービス プリンシパルで Azure ログインを使用するには、まず、Azure サービス プリンシパルをシークレットとして GitHub リポジトリに追加する必要があります。

サービス プリンシパルの作成

この例では、Azure での認証に使用できる AZURE_CREDENTIALS という名前のシークレットを作成します。

  1. Azure Portal または Azure CLI でローカルに Azure Cloud Shell を開きます。

    Note

    Azure Stack Hub を使用している場合は、SQL 管理エンドポイントを not supported に設定する必要があります。 az cloud update -n {environmentName} --endpoint-sql-management https://notsupported

  2. 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 を使用し、非推奨の警告が表示されます。

  3. サービス プリンシパルの JSON オブジェクトをコピーします。

    {
        "clientId": "<GUID>",
        "clientSecret": "<GUID>",
        "subscriptionId": "<GUID>",
        "tenantId": "<GUID>",
        (...)
    }
    

サービス プリンシパルを GitHub シークレットとして追加します

  1. GitHub で、お使いのリポジトリに移動します。

  2. ナビゲーション メニューで [設定] に移動します。

  3. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    Screenshot of select Actions menu item.

  4. [New repository secret](新しいリポジトリ シークレット) を選択します。

  5. Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS と名前を付けます。

  6. [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 に接続する方法について詳しく説明しています。

Microsoft Entra ID

Power BI

コネクタ

Azure Databricks