使用 GitHub Actions 連線到 Azure

瞭解如何使用 Azure 登入 搭配 Azure PowerShellAzure CLI 來與您的 Azure 資源互動。

若要在 GitHub Actions 工作流程中使用 Azure PowerShell 或 Azure CLI,您必須先使用 Azure 登入 動作登入。

Azure 登入動作支援兩種不同的方式向 Azure 進行驗證:

根據預設,登入動作會使用 Azure CLI 登入,並設定 Azure CLI 的 GitHub Actions 執行器環境。 您可以使用 Azure PowerShell 搭配 enable-AzPSSession Azure 登入動作的 屬性。 這會使用 Azure PowerShell 模組來設定 GitHub Actions 執行器環境。

您可以使用 Azure 登入來連線到公用或主權雲端,包括 Azure Government 和 Azure Stack Hub。

搭配 OpenID 連線 使用 Azure 登入動作

若要使用 OpenID 設定 Azure 登入 連線 並在 GitHub Actions 工作流程中使用,您需要:

  • Microsoft Entra 應用程式,具有已將適當角色指派給您訂用帳戶的服務主體。
  • 使用同盟認證設定的 Microsoft Entra 應用程式,以信任 GitHub Actions 發行給 GitHub 存放庫的令牌。 您可以在 Azure 入口網站 或使用 Microsoft Graph REST API 進行此設定。
  • GitHub Actions 工作流程,要求 GitHub 向工作流程發出令牌,並使用 Azure 登入動作。

建立 Microsoft Entra 應用程式和服務主體

您必須建立 Microsoft Entra 應用程式和服務主體,然後將訂用帳戶上的角色指派給您的應用程式,讓您的工作流程能夠存取您的訂用帳戶。

  1. 如果您沒有現有的應用程式,請註冊 可存取資源的新 Microsoft Entra 應用程式和服務主體。 在此程式中,請務必:

    • 使用 Microsoft Entra 識別子註冊您的應用程式,並建立服務主體
    • 將角色指派給應用程式
  2. 在 Azure 入口網站 中開啟 應用程式註冊,並尋找您的應用程式。 複製應用程式 (用戶端) 識別碼目錄 (租使用者) 識別碼的值,以在 GitHub Actions 工作流程中使用。

  3. 在 Azure 入口網站 中開啟用帳戶,並尋找您的訂用帳戶。 複製訂用帳戶 標識碼

新增同盟認證

您可以在 Azure 入口網站 或 Microsoft Graph REST API 中新增同盟認證。

  1. 移至 Azure 入口網站 中的 應用程式註冊,然後開啟您想要設定的應用程式。
  2. 在應用程式中,移至 [憑證和秘密]。
    Select Certificates & secrets.
  3. 在 [ 同盟認證] 索引卷標中,選取 [ 新增認證]。 Add the federated credential
  4. 選取認證案例 GitHub Actions 部署 Azure 資源。 輸入認證詳細數據以產生您的認證。
欄位 描述 範例
Organization 您的 GitHub 組織名稱或 GitHub 用戶名稱。 contoso
存放庫 您的 GitHub 存放庫名稱。 contoso-app
實體類型 用來設定 GitHub 工作流程 OIDC 要求範圍的篩選條件。 此欄位用來產生 subject 宣告。 Environment、 、 BranchPull requestTag
GitHub 名稱 環境、分支或標記的名稱。 main
名稱 同盟認證的標識碼。 contoso-deploy

如需更詳細的概觀,請參閱 設定應用程式以信任 GitHub 存放庫

建立 GitHub 祕密

您必須將應用程式的 用戶端識別碼租使用者標識碼訂用帳戶標識碼 提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。

  1. 開啟您的 GitHub 存放庫,並移至 設定

    Select Settings in the navigation

  2. 選取 [安全性] > [祕密和變數] > [動作]。

    Choose to add a secret

  3. 建立 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID 的秘密。 針對 GitHub 秘密,請使用 Azure Active Directory 應用程式中的這些值:

    GitHub 祕密 Azure Active Directory 應用程式
    AZURE_CLIENT_ID 應用程式 (用戶端) 識別碼
    AZURE_TENANT_ID 目錄 (租用戶) 識別碼
    AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼
  4. 選取 [新增秘密] 以儲存每個秘密。

使用 OpenID 連線 驗證設定 Azure 登入

您的 GitHub Actions 工作流程會使用 OpenID 連線 向 Azure 進行驗證。 若要深入瞭解此互動,請參閱 GitHub Actions 檔

在此範例中,您將使用 OpenID 連線 Azure CLI 使用 Azure 登入動作向 Azure 進行驗證。 此範例會針對 client-idtenant-idsubscription-id 值使用 GitHub 秘密。 您也可以直接在登入動作中傳遞這些值。

Azure 登入動作包含預設為 api://AzureADTokenExchange的選擇性audience輸入參數。 您可以針對自訂物件值更新此參數。

此工作流程會向 OpenID 連線 進行驗證,並使用 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_CREDENTIALS 的秘密,以用來向 Azure 進行驗證。

  1. 在本機 Azure 入口網站 或 Azure CLI 中開啟 Azure Cloud Shell

    注意

    如果您使用 Azure Stack Hub,您必須將 SQL 管理端點設定為 not supportedaz cloud update -n {environmentName} --endpoint-sql-management https://notsupported

  2. 在應用程式的 Azure 入口網站 中建立新的服務主體。 服務主體必須指派適當的角色。

        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. 選取 [安全性] > [祕密和變數] > [動作]。

    Screenshot of select Actions menu item.

  4. 選取 [新增存放庫祕密]。

  5. 將得自 Azure CLI 命令的整個 JSON 輸出貼到祕密的 [值] 欄位中。 將祕密命名為 AZURE_CREDENTIALS

  6. 選取 [新增祕密]。

使用 Azure 登入動作

使用服務主體秘密搭配 Azure 登入動作 向 Azure 進行驗證。

在此工作流程中,您會使用 Azure 登入動作與儲存在 中的 secrets.AZURE_CREDENTIALS服務主體詳細數據進行驗證。 然後,您會執行 Azure CLI 動作。 如需在工作流程檔案中參考 GitHub 秘密的詳細資訊,請參閱 在 GitHub Docs 中使用工作流程 中的加密密碼。

擁有運作中的 Azure 登入步驟之後,您可以使用 Azure PowerShellAzure CLI 動作。 您也可以使用其他 Azure 動作,例如 Azure webapp 部署Azure 函式

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 登入動作登入,然後使用 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 雲端,請使用支援的雲端名稱 AzureUSGovernmentAzureChinaCloud設定選擇性參數環境。 如果未指定此參數,則會採用預設值 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