使用托管标识来访问应用程序配置

Microsoft Entra 托管标识可简化云应用程序的机密管理。 使用托管标识,你的代码可使用为其运行的 Azure 服务创建的服务主体。 使用托管标识而不是存储在 Azure Key Vault 中的单独凭据或本地连接字符串。

Azure 应用程序配置及其 .NET、.NET Framework 和 Java Spring 客户端库拥有内置的托管标识支持。 虽然并非必须使用托管标识,但借助它便无需再使用包含机密的访问令牌。 你的代码只能使用服务终结点访问应用程序配置存储区。 可以直接在代码中嵌入此 URL,而不会泄露任何机密。

本文介绍如何利用管理标识访问应用程序配置。 它建立在快速入门中介绍的 Web 应用之上。 在继续操作之前,先使用应用程序配置创建 ASP.NET Core 应用

本文介绍如何利用管理标识访问应用程序配置。 它建立在快速入门中介绍的 Web 应用之上。 在继续之前,请先使用 Azure 应用程序配置创建一个 Java Spring 应用

重要

托管标识不能用于对本地运行的应用程序进行身份验证。 必须将应用程序部署到支持托管标识的 Azure 服务。 本文以 Azure 应用服务为例。 但是,相同的概念适用于支持托管标识的任何其他 Azure 服务。 例如,Azure Kubernetes 服务Azure 虚拟机Azure 容器实例。 如果在其中某一种服务中托管工作负载,也可以利用该服务的托管标识支持。

你可以使用任何代码编辑器执行本教程中的步骤。 Visual Studio Code 是 Windows、macOS 和 Linux 平台上提供的一个卓越选项。

在本文中,学习如何:

  • 授予对应用程序配置的托管身份访问权限。
  • 配置应用以在连接到应用程序配置时使用托管标识。

先决条件

若要完成本教程,必须满足以下先决条件:

如果没有 Azure 试用版订阅,请在开始前创建 Azure 试用版订阅

添加托管标识

要在门户中设置托管标识,首先创建应用程序,然后启用该功能。

  1. Azure 门户中访问应用服务资源。 如果没有可使用的现有应用服务资源,请创建一个。

  2. 在左侧窗格向下滚动到“设置”组,然后选择“标识”

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

  4. 出现提示时,选择“是”以启用系统分配的托管标识。

    显示如何在应用服务中添加托管标识的屏幕截图。

授予对应用配置的访问权限

以下步骤介绍如何将“应用程序配置数据读取者”角色分配到应用服务。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

  1. Azure 门户中,选择应用程序配置存储。

  2. 选择“访问控制(IAM)”。

  3. 选择“添加”>“添加角色分配”。

    显示打开了“添加角色分配”菜单的“访问控制(IAM)”页的屏幕截图。

    如果你没有分配角色的权限,则将禁用“添加角色分配”选项。 有关详细信息,请参阅 Azure 内置角色

  4. 在“角色”选项卡中,选择“应用程序配置数据读取者”角色,然后选择“下一步”。

    显示“添加角色分配”页的屏幕截图,其中选择了“角色”选项卡。

  5. 在“成员”选项卡中,选择“托管标识”,然后选择“选择成员”。

    显示“添加角色分配”页的屏幕截图,其中选择了“成员”选项卡。

  6. 选择你的 Azure 订阅,为“托管标识”选择“应用服务”,然后选择你的应用服务名称。

    显示“选择托管标识”页的屏幕截图。

  7. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色 。

使用托管标识

  1. 添加对 Azure.Identity 包的引用:

    dotnet add package Azure.Identity
    
  2. 查找应用程序配置存储区的终结点。 此 URL 列于 Azure 门户中的存储的“访问密钥”选项卡上。

  3. 打开 appsettings.json 文件,并添加以下脚本。 将 <service_endpoint>(含括号)替换为应用配置存储区的 URL。

    "AppConfig": {
        "Endpoint": "<service_endpoint>"
    }
    
  4. 打开 Program.cs 文件,然后添加对 Azure.Identity 命名空间的引用:

    using Azure.Identity;
    
  5. 若要访问存储在应用程序配置中的值,请更新 Builder 配置以使用 AddAzureAppConfiguration() 方法。

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
        options.Connect(
            new Uri(builder.Configuration["AppConfig:Endpoint"]),
            new ManagedIdentityCredential()));
    

    注意

    如果要使用“用户分配的托管标识”,请确保在创建 ManagedIdentityCredential 时指定 clientId

    new ManagedIdentityCredential("<your_clientId>")
    

    如“Azure 资源的托管标识常见问题解答”中所述,系统将采用默认方法来解析使用的是哪个托管标识。 在这种情况下,Azure 标识库会强制要求你指定所需的标识,以避免未来可能出现的运行时问题。 例如,如果添加了新的用户分配的托管标识,或者启用了系统分配的托管标识。 因此,即使只定义了一个用户分配的托管标识,并且没有系统分配的托管标识,也需要指定 clientId

  1. 查找应用程序配置存储区的终结点。 此 URL 列于 Azure 门户中存储的“概述”选项卡上。

  2. 打开 bootstrap.properties,删除 connection-string 属性并将其替换为系统指定标识的终结点:

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>

对于用户分配的标识:

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>
spring.cloud.azure.credential.managed-identity-enabled= true
spring.cloud.azure.credential.client-id= <client_id>

注意

有关详细信息,请参阅 Spring Cloud Azure 身份验证

部署应用程序

使用托管标识时,必须将应用部署到 Azure 服务。 托管标识不能用于对本地运行的应用进行身份验证。 若要部署你在使用应用配置创建 ASP.NET Core 应用快速入门中创建并修改的 .NET Core 应用,以便使用托管标识,请按照发布 Web 应用中的指南操作。

使用托管标识需要将应用部署到 Azure 服务。 托管标识不能用于对本地运行的应用进行身份验证。 若要部署你在使用 Azure 应用程序配置创建 Java Spring 应用快速入门中创建的并已修改为使用托管标识的 Spring 应用,请按照发布 Web 应用中的指导操作。

除了应用服务,许多其他 Azure 服务也支持托管标识。 有关详细信息,请参阅支持 Azure 资源托管标识的服务

清理资源

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 在“按名称筛选”框中,输入资源组的名称
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除”。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本教程中,通过添加 Azure 托管标识简化了应用配置访问并改进了应用凭据管理。 若要了解有关如何使用应用程序配置的更多信息,请继续阅读 Azure CLI 示例。