使用托管标识发布Azure VM 应用程序

本文介绍如何将托管标识与Azure计算库配合使用,以使用 blob URL 安全地发布Azure VM 应用程序,而无需使用 SAS URL 或可公开访问的存储帐户。

概述

通过 Azure VM 应用程序部署应用程序要求将应用程序包上传到存储帐户并提供 Blob 的 URL。 Azure 计算库使用此 URL 访问 Blob,并将其发布为虚拟机应用程序版本。

如果没有托管标识,可以使用两个选项来提供 Blob 访问:

  • Blob URL - 要求存储帐户启用匿名访问。
  • SAS URL - SAS 令牌以纯文本形式存储在应用程序版本资源中,必须管理令牌过期和重新生成。

这两种方法都不安全,因为 blob URL 会使您的存储帐户暴露在公共互联网中,而 SAS URL(作为机密信息)必须以纯文本形式存储。

托管标识是一项安全功能,它允许Azure服务向其他Azure服务证明其标识,而无需在代码或配置中存储密码、密钥或令牌。 您无需管理凭据,微软 Entra ID 会自动处理身份验证。

通过将用户分配的托管标识附加到 Azure 计算画廊,您可以授予画廊代表您访问存储帐户中的 blob 的权限。 当画廊需要读取您的应用程序包时,它会呈现此身份,Microsoft Entra ID 验证该身份并授予访问权限。 由于Azure计算库是受信任的Microsoft服务,因此即使存储帐户位于虚拟网络后面,此访问也有效。

此方法使你能够:

  • 限制对特定虚拟网络的存储帐户访问。
  • 在存储帐户上禁用共享密钥访问并使用普通的 Blob URL。
  • 确保不会将 SAS URL 等访问凭据存储为纯文本。

工作原理

概括而言,身份验证和访问流的工作原理如下:

  1. 将您的应用程序包上传到存储帐户中的 Blob 中。
  2. 创建用户分配的托管标识,并在存储帐户上授予 存储 Blob 数据参与者 角色。
  3. 您将托管标识附加到 Azure 计算库。
  4. 发布 VM 应用程序版本时,提供纯 Blob URL 而不是 SAS URL。
  5. Azure Compute Gallery 尝试使用 blob URL 直接访问 blob。
  6. Microsoft Entra ID 验证身份并授予画廊对 Blob 的访问权限。

先决条件

步骤 1:创建用户分配的托管标识

创建Azure计算库用于向存储帐户进行身份验证的用户分配托管标识。

有关详细步骤,请参阅 创建用户分配的托管标识

步骤 2:向标识分配存储访问权限

存储 Blob 数据参与者 角色分配给托管标识,以便它可以访问存储帐户中的应用程序包。

有关详细步骤,请参阅通过 Azure 门户分配 Azure 角色。 分配角色时:

  1. 选择 存储 Blob 数据参与者 作为角色。
  2. 分配对 托管标识的访问权限。
  3. 选择在上一步中创建的用户分配的托管标识。

更新 Azure 计算画廊以使用用户分配的托管身份。 门户体验目前不适用于此步骤。

使用 REST API

使用 图库 - 创建或更新 API,将托管身份关联到您的图库。

PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}?api-version=2025-04-01

{
    "location": "<location>",
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {}
        }
    }
}

步骤 4:获取应用程序包的 Blob URL

检索存储帐户中存储的应用程序包的 Blob URL。 URL 格式为:

https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<blob-name>

步骤 5:使用 Blob URL 发布 VM 应用程序版本

在创建或更新 VM 应用版本时,请在发布配置文件的 mediaLink 属性中使用 blob URL。 Azure Compute Gallery 使用附加的托管身份对 Blob 进行身份验证和访问。

有关创建 VM 应用程序版本的详细步骤,请参阅 “创建 VM 应用程序版本”。

技术详细信息

  • 身份验证流程 - Azure 计算画廊首先尝试使用提供的 URL 访问 blob。 如果由于权限不足导致直接访问失败,则画廊将回退到附加的托管标识以进行身份验证。
  • 受信任的服务访问 - Azure计算库是受信任的Microsoft服务。 托管标识提供可绕过存储帐户虚拟网络限制的受信任访问,因此库不需要位于虚拟网络内部才能访问受网络限制的存储帐户。

局限性

  • 仅在将 VM 应用程序版本发布到 Azure 计算库时,才支持托管身份访问。 在将 VM 应用程序部署到 VM 或虚拟机规模集时,不能使用它。
  • 将托管标识附加到映像库的门户体验当前不可用。 使用 REST API、Azure CLI或Azure PowerShell。