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 ワークフローで使用するには、次が必要です。

  • サブスクリプションに適切なロールが割り当てられているサービス プリンシパルを持つ Azure Active Directory アプリケーション
  • GitHub Actions によって GitHub リポジトリに対して発行されたトークンを信頼するように、フェデレーション資格情報を使用して構成された Azure Active Directory アプリケーション。 これは、Azure portalまたは Microsoft Graph REST API で構成できます。
  • GitHub 発行トークンをワークフローに要求し、Azure ログイン アクションを使用するGitHub Actions ワークフロー。

Azure Active Directory のアプリケーションおよびサービス プリンシパルを作成する

ワークフローがサブスクリプションにアクセスできるよう、Azure Active Directory アプリケーションとサービス プリンシパルを作成し、サブスクリプションのロールをアプリケーションに割り当てる必要があります。

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

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

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

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

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

  1. Azure portal[アプリの登録] に移動し、構成するアプリを開きます。
  2. アプリ内で、 [証明書とシークレット ] に移動します。
    [証明書とシークレット] を選択します。
  3. [フェデレーション資格情報] タブで、[資格情報の追加] を選択します。 フェデレーション資格情報を追加する
  4. 資格情報シナリオ [Azure リソースをデプロイする GitHub Actions] を選択します。 資格情報の詳細を入力して、資格情報を生成します。
フィールド 説明
Organization 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 シークレットとして値を保存する方がより安全なオプションです。

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

    ナビゲーションで [Settings]\(設定\) を選択する

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

    シークレットの追加を選択する

  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 ログインに成功。

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

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

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

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

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

    注意

    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] (アクション) を選びます。

    [Actions] (アクション) メニュー項目の選択のスクリーンショット。

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

Azure Active Directory

Power BI

Connectors

Azure Databricks