使用用于 JavaScript 的 Azure SDK 向 Azure 资源验证 Azure 托管的应用
在 Azure 中托管应用(使用Azure App 服务、Azure 虚拟机或Azure 容器实例等服务)时,建议使用托管标识对应用进行身份验证。
托管标识为应用提供标识,以便应用连接到其他 Azure 资源,而无需使用机密(例如密钥连接字符串)。 在内部,Azure 知道应用的标识以及应用能够连接到哪些资源。 Azure 使用此信息自动获取应用的 Microsoft Entra 令牌,以允许它连接到其他 Azure 资源,而无需管理(创建或轮换)身份验证机密。
托管标识类型
托管标识分为两种类型:
- 系统分配的托管标识 - 单个 Azure 资源
- 用户分配的托管标识 - 多个 Azure 资源
本文介绍为应用启用和使用系统分配的托管标识的步骤。 如果需要使用用户分配的托管标识,请参阅管理用户分配的托管标识一文来了解如何创建用户分配的托管标识。
单个资源的系统分配托管标识
系统分配的托管标识由 Azure 资源提供并直接绑定到。 在 Azure 资源上启用托管标识时,你将获得该资源的系统分配的托管标识。 它与 Azure 资源的生命周期相关联。 当资源被删除时,Azure 会自动为你删除标识。 由于只需为托管代码的 Azure 资源启用托管标识,因此这种类型的托管标识最容易使用。
多个资源的用户分配托管标识
从概念上讲,此标识是独立的 Azure 资源。 当解决方案具有在多个 Azure 资源上运行的多个工作负载,而所有这些工作负载都需要共享相同的标识和相同的权限时,这种方法最常用。 例如,如果解决方案具有在多个App 服务和虚拟机实例上运行的组件,并且它们都需要访问同一组 Azure 资源,则跨这些资源创建和使用用户分配的托管标识会有意义。
1 - 系统分配:在托管应用中启用
第一步是在托管应用的 Azure 资源上启用托管标识。 例如,如果要使用 Azure App 服务 托管 Django 应用程序,则需要为该App 服务 Web 应用启用托管标识。 如果使用虚拟机来托管应用,请允许 VM 使用托管标识。
可以使用 Azure 门户或 Azure CLI 来启用用于 Azure 资源的托管标识。
2 - 将角色分配到托管标识
接下来,需确定应用需要哪些角色(权限),并为托管标识分配 Azure 中的这些角色。 可以在资源、资源组或订阅范围为托管标识分配角色。 此示例演示如何在资源组范围分配角色,因为大多数应用程序将其所有 Azure 资源分组到单个资源组中。
3 - 在应用程序中实现 DefaultAzureCredential
该 DefaultAzureCredential
类会自动检测正在使用托管标识,并使用托管标识向其他 Azure 资源进行身份验证。 如 Azure SDK for JavaScript 身份验证概述文章中所述,DefaultAzureCredential
支持多种身份验证方法并确定在运行时使用的身份验证方法。 这样,应用便可以在不同的环境中使用不同的身份验证方法,而无需实现特定于环境的代码。
首先,将 @azure/identity 包添加到应用程序中。
npm install @azure/identity
接下来,对于在应用中创建 Azure SDK 客户端对象的任何 JavaScript 代码,需要:
- 从
@azure/identity
模块中导入DefaultAzureCredential
类。 - 创建
DefaultAzureCredential
对象。 - 将
DefaultAzureCredential
对象传递给 Azure SDK 客户端对象构造函数。
以下代码片段中显示了此操作的示例。
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
在本地开发期间在本地工作站上运行上述代码时,SDK 方法 DefaultAzureCredential()在应用程序服务主体或 VS Code、Azure CLI 或 Azure PowerShell 中查找一组开发人员凭据的环境变量,其中任一凭据都可用于在本地开发期间向 Azure 资源验证应用。 这样,此相同的代码可用于在本地开发期间和部署到 Azure 时向 Azure 资源验证应用。