使用 GitHub Actions 工作流中的工作负载标识

已完成

创建工作负载标识并为其分配访问 Azure 环境的权限后,就可以在 GitHub Actions 工作流中使用它了。 在本单元中,你将了解工作流定义所需的两项更改。

允许工作流请求令牌

需要允许部署工作流请求令牌。 在工作流中,添加 permissions 属性:

permissions:
  id-token: write
  contents: read

登录 Azure

你的部署工作流使用 azure/login 操作登录到 Azure。 在使用工作负载标识时,需要指定三个输入:

输入 说明
client-id 用于应用程序注册的客户端 ID。 确保使用应用程序 ID,而不是对象 ID。
tenant-id Microsoft Entra 租户(目录)的唯一标识符。
subscription-id 要部署到的 Azure 订阅 ID。

这些值中的每一个都是 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