你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将应用配置为信任 GitHub 存储库(预览)

本文介绍如何在 Azure Active Directory (Azure AD) 中的应用程序与 GitHub 存储库之间创建信任关系。 然后,可以配置 GitHub Actions 工作流,以将 GitHub 提供的令牌交换为 Microsoft 标识平台提供的访问令牌,并访问 Azure AD 保护的资源,而无需管理机密。 若要详细了解令牌交换工作流,请阅读工作负载标识联合身份验证。 可以在 Azure 门户中或使用 Microsoft Graph 在应用注册上配置联合标识凭据,从而建立信任关系。

有权创建应用注册和添加机密或证书的任何人都可以添加联合标识凭据。 但是,如果用户设置边栏选项卡中的“用户可以注册应用程序”开关设置为“否”,你将无法创建应用注册或配置联合标识凭据 。 查找管理员以代表你配置联合标识凭据。 具有应用程序管理员或应用程序所有者角色的任何人都可以执行此操作。

将应用配置为信任 GitHub 存储库后,将 GitHub Actions 工作流配置为获取 Microsoft 标识提供者提供的访问令牌,并访问 Azure AD 保护的资源。

先决条件

在 Azure AD 中创建应用注册。 授予应用访问 GitHub 工作流的目标 Azure 资源的权限。

找到你在以下步骤中需要的应用的对象 ID,而不是应用程序(客户端)ID。 可以在 Azure 门户中找到应用的对象 ID。 在 Azure 门户中,转到已注册应用程序的列表,然后选择你的应用注册。 在“概述”->“基本信息”中,找到对象 ID。

获取 GitHub 存储库的组织、存储库和环境信息,后续步骤将需要使用这些内容。

配置联合标识凭据

登录 Azure 门户。 转到“应用注册”,打开要配置的应用。

转到“证书和机密”。 在“联合凭据”选项卡中,选择“添加凭据” 。 此时会打开“添加凭据”边栏选项卡。

在“联合凭据方案”下拉框中,选择“部署 Azure 资源的 GitHub 操作” 。

为 GitHub Actions 工作流程指定“组织”和“存储库” 。

对于“实体类型”,请选择“环境”、“分支”、“拉取请求”或“标记”,并指定值 。 值必须与 GitHub 工作流中的配置完全匹配。 有关详细信息,请阅读示例

为联合凭据添加“名称”。

“颁发者”、“受众”和“主题标识符”字段会根据你输入的值自动填充 。

单击“添加”以配置联合凭据。

Screenshot of the Add a credential window, showing sample values.

注意

如果不小心在“主题”设置中配置了其他人的 GitHub 存储库(输入与其他人存储库匹配的错字),你可以成功创建联合身份凭据。 但在 GitHub 配置中,你会收到错误消息,因为你无法访问其他人的存储库。

重要

“组织”、“存储库”和“实体类型”值必须与 GitHub 工作流配置中的配置完全匹配 。 否则,Microsoft 标识平台将查看传入的外部令牌,并拒绝交换访问令牌。 你不会收到错误消息,交换失败且没有错误。

实体类型示例

分支示例

对于主分支上的推送或拉取请求事件触发的工作流,请执行以下操作:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

将“实体类型”指定为“分支”,将“GitHub 分支名称”指定为“main”。

环境示例

对于绑定到名为“production”的环境的“作业”,请执行以下操作:

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

将“实体类型”指定为“环境”,将“GitHub 环境名称”指定为“production”。

标记示例

例如,对于目标为标记“v2”的推送触发的工作流,请执行以下操作:

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:    
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:        
      - v2
      - v1.*

将“实体类型”指定为“标记”,将“GitHub 标记名称”指定为“v2”。

拉取请求示例

对于拉取请求事件触发的工作流,请将“实体类型”指定为“拉取请求”。

从 Azure 门户获取应用程序(客户端)ID 和租户 ID

在配置 GitHub Actions 工作流之前,请获取应用注册的 tenant-id 和 client-id 值 。 可以在 Azure 门户中找到这些值。 转到已注册应用程序的列表,然后选择你的应用注册。 在“概述”->“基本信息”中,找到“应用程序(客户端) ID”和“目录(租户) ID”。 在 GitHub 环境中设置这些值以在工作流的 Azure 登录操作中使用。

后续步骤

有关端到端示例,请阅读使用 GitHub Actions 部署到应用服务

阅读 GitHub Actions 文档,了解有关配置 GitHub Actions 工作流以从 Microsoft 标识提供者获取访问令牌并访问 Azure 资源的详细信息。