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

Azure 容器应用中的托管标识

Microsoft Entra ID 中的托管标识允许容器应用访问其他受 Microsoft Entra 保护的资源。 有关 Microsoft Entra ID 中的托管标识的详细信息,请参阅 Azure 资源的托管标识

可为容器应用授予两种类型的标识:

  • 系统分配的标识与容器应用相关联,删除该容器应用也会删除该标识。 一个应用只能具有一个系统分配的标识。
  • 用户分配的标识是可以分配给容器应用和其他资源的独立 Azure 资源。 一个容器应用可以有多个用户分配的标识。 除非将其删除,否则标识会一直存在。

为什么使用托管标识?

可以在正在运行的容器应用中使用托管标识向支持 Microsoft Entra 身份验证的任何服务进行身份验证。

使用托管标识:

常见用例

系统分配的标识最适合用于具有以下特征的工作负载:

  • 包含在单个资源中
  • 需要独立的标识

用户分配的标识非常适合用于具有以下特征的工作负载:

  • 在多个资源上运行并可共享单个标识
  • 需要预先获取对安全资源的授权

限制

不支持在缩放规则中使用托管标识。 你仍需在缩放规则的 secretRef 中包含连接字符串或键。

初始化容器 无法访问托管标识。

配置托管标识

可通过以下方式配置托管标识:

  • Azure 门户
  • Azure CLI
  • Azure 资源管理器 (ARM) 模板

在正在运行的容器应用中添加、删除或修改托管标识时,该应用不会自动重启,且不会创建新的修订版。

注意

将托管标识添加到在 2022 年 4 月 11 日之前部署的容器应用时,必须创建新的修订版。

添加系统分配的标识

  1. 在容器应用页面的左侧导航中,向下滚动到“设置”组。

  2. 选择“标识”。

  3. 在“系统分配的”选项卡中,将“状态”切换为“启用” 。 选择“保存”。

Screenshot of system-assigned identities.

添加用户分配的标识

为容器应用配置用户分配的标识需要先创建该标识,然后将其资源标识符添加到该容器应用的配置。 可以通过 Azure 门户或 Azure CLI 创建用户分配的标识。 有关创建和管理用户分配的标识的信息,请参阅管理用户分配的托管标识

首先,需要创建用户分配的标识资源。

  1. 根据管理用户分配的托管标识中介绍的步骤创建用户分配的托管标识资源。

  2. 在容器应用页面的左侧导航中,向下滚动到“设置”组。

  3. 选择“标识”。

  4. 在“用户分配”选项卡中,选择“添加”。

  5. 搜索之前创建的标识并选择它。 选择添加

Screenshot of user-assigned identities.

配置目标资源

对于某些资源,需要为应用的托管标识配置角色分配以授予访问权限。 否则,即使对该标识使用有效令牌,应用对服务(例如 Azure 密钥保管库和 Azure SQL 数据库)的调用也会被拒绝。 若要详细了解 Azure 基于角色的访问控制 (Azure RBAC),请参阅什么是 RBAC?。 若详细了解支持 Microsoft Entra 令牌的资源,请参阅支持 Microsoft Entra 身份验证的 Azure 服务

重要

用于托管标识的后端服务将为每个资源 URI 维护缓存约 24 小时。 如果你更新特定目标资源的访问策略并立即检索该资源的令牌,则可以继续获取具有过时权限的缓存令牌,直到该令牌过期。 目前无法强制刷新令牌。

在应用代码中连接到 Azure 服务

使用托管标识,应用可以获取令牌来访问使用 Microsoft Entra ID 的 Azure 资源,例如 Azure SQL 数据库、Azure Key Vault 和 Azure 存储。 这些令牌代表访问资源的应用程序,而不是应用程序的任何特定用户。

容器应用提供内部可访问的 REST 终结点用于检索令牌。 可以使用标准 HTTP GET 从应用中访问 REST 终结点,该标准可以使用每种语言的通用 HTTP 客户端来实现。 对于 .NET、JavaScript、Java 和 Python,Azure 标识客户端库提供基于此 REST 终结点的抽象。 连接到其他 Azure 服务非常简单,只需要将凭据对象添加到特定于服务的客户端。

注意

使用 Azure 标识客户端库时,必须指定用户分配的托管标识客户端 ID。

注意

使用 Entity Framework Core 连接到 Azure SQL 数据源时,请考虑使用 Microsoft.Data.SqlClient ,它为托管标识连接提供特殊的连接字符串。

对于 .NET 应用,使用托管标识的最简单方式是通过适用于 .NET 的 Azure 标识客户端库来使用。 有关信息,请参阅客户端库的相应文档标题:

链接的示例使用 DefaultAzureCredential。 这对大多数方案都很有用,因为相同的模式适用于 Azure(使用托管标识)和本地计算机(没有托管标识)。

查看托管标识

可以使用以下 Azure CLI 命令显示系统分配的托管标识和用户分配的托管标识。 输出会显示分配给容器应用的所有托管标识的托管标识类型、租户 ID 和主体 ID。

az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>

删除托管标识

删除系统分配的标识时,会从 Microsoft Entra ID 中删除标识。 删除容器应用资源本身时,系统分配的标识也会从 Microsoft Entra ID 中自动删除。 从容器应用中删除用户分配的托管标识不会导致从 Microsoft Entra ID 中删除这些标识。

  1. 在应用页面的左侧导航中,向下滚动到“设置”组。

  2. 选择“标识”。 然后,根据标识类型执行以下步骤:

    • 系统分配的标识:在“系统分配”选项卡中,将“状态”切换为“关闭”。 选择“保存” 。
    • 用户分配的标识:选择“用户分配”选项卡,选中该标识的复选框,然后选择“删除”。 请选择“是”以确认。

后续步骤