You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function以应用注册AR1身份访问Blob Storage遇权限错误排查

操作流程中的核心错误
  1. 错误配置API权限类型:给AR1添加Azure Storage的user_impersonation权限完全无效,该权限仅用于应用代表终端用户访问资源,而你的场景是服务到服务的身份代理,不需要用户模拟逻辑,这个权限属于冗余配置。
  2. 错误使用IAM角色关联MSI与AR1:创建自定义角色分配给Function的MSI试图关联AR1的思路不成立。Azure IAM角色仅控制对Azure资源的访问权限,无法实现让MSI获取AR1的服务主体令牌,这类身份委派逻辑需要在Azure AD应用注册层面配置,而非IAM系统。
  3. 多余配置Function的身份认证提供商:在Function中添加Microsoft身份提供商是用于终端用户登录认证的,和服务到服务的后台Blob访问场景无关,属于不必要的配置,会混淆身份流程。
  4. 未指定目标身份的令牌获取逻辑:直接使用DefaultAzureCredentials()会默认获取Function自身MSI的令牌去访问Storage,但你的需求是让Function以AR1身份访问,因此必须明确指定要获取AR1的令牌,而非默认的MSI令牌。
正确配置流程及额外配置

步骤1:清理冗余配置

  • 删除AR1应用注册中Azure Storage的user_impersonation权限。
  • 移除Function认证配置中的Microsoft身份提供商。

步骤2:确保AR1具备Blob访问权限(保留原正确配置)

  • 确认AR1对应的企业应用已在目标Blob Storage的IAM中分配Storage Blob Data Contributor角色(此步骤你之前配置正确,无需修改)。

步骤3:配置Azure AD允许Function的MSI获取AR1的令牌

  1. 进入AR1的应用注册页面,切换到公开API标签:
    • 添加一个自定义范围(例如命名为access_as_application),设置权限类型为Application,允许管理员同意,并保存。
  2. 进入Azure AD的企业应用页面,找到Function的MSI对应的企业应用:
    • 切换到API权限 → 添加权限 → 我的API,选择AR1,添加刚才创建的access_as_application应用权限,然后完成管理员同意操作。

步骤4:修正代码中的令牌获取逻辑

使用DefaultAzureCredentials()时,必须指定AR1的应用ID,确保获取的是AR1的身份令牌。示例代码如下:

.NET 示例

using Azure.Identity;
using Azure.Storage.Blobs;

var credential = new DefaultAzureCredentials(new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = "AR1的应用ID" // 指定要获取令牌的目标身份ID
});
var blobServiceClient = new BlobServiceClient(
    new Uri("https://<你的存储账户名>.blob.core.windows.net"),
    credential
);

Python 示例

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

credential = DefaultAzureCredential(client_id="AR1的应用ID")
blob_service_client = BlobServiceClient(
    account_url="https://<你的存储账户名>.blob.core.windows.net",
    credential=credential
)

内容的提问来源于stack exchange,提问作者Dim Tix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:47:42