從 GitHub Actions 工作流程使用工作負載身分識別

已完成

您建立工作負載身分識別並將其存取權指派給 Azure 環境後,即可在 GitHub Actions 工作流程中使用。 在此單元中,您將了解工作流程定義所需的兩項變更。

允許工作流程要求權杖

您必須允許部署工作流程以要求權杖。 在您的工作流程中,新增 permissions 屬性:

permissions:
  id-token: write
  contents: read

登入 Azure

您的部署工作流程會使用 azure/login 動作來登入 Azure。 使用工作負載身分識別時,您必須指定三個輸入:

輸入 描述
client-id 應用程式註冊的應用程式識別碼。 請務必使用應用程式識別碼,而非物件識別碼。
tenant-id Microsoft Entra 租用戶 (目錄) 的唯一識別碼。
subscription-id 您將部署的 Azure 訂閱識別碼。

每個值都是 GUID。

定義值時,您可以選擇直接在工作流程定義檔案中指定這些值:

- uses: azure/login@v1
  with:
    client-id: 'A123b4567c-1234-1a2b-2b1a-1234abc12345'
    tenant-id: 'aaaabbbb-0000-cccc-1111-dddd2222eeee'
    subscription-id: 'B123a4567c-1234-2b1a-1b2b-11a2b01b2b3c0'

不過,部分組織會將這些識別碼視為祕密資料,或不允許將識別碼認可至 Git 存放庫。 您也可以使用 GitHub 祕密來指定值:

- uses: azure/login@v1
  with:
    client-id: ${{ secrets.AZURE_CLIENT_ID }}
    tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

在 Bicep 的學習路徑中,我們會使用祕密來儲存與管理這些識別碼。 您可以決定哪一種方法最適合您的組織。

部署至 Azure

在工作流程登入 Azure 後,您可以使用 azure/arm-deploy 動作來部署 Bicep 檔案。 下列工作流程定義顯示使用工作流程身分識別的完整 Bicep 部署工作流程:

name: MyWorkflow

on: [workflow_dispatch]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      with:
        resourceGroupName: ToyWebsite
        template: ./deploy/main.bicep