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

C#中基于托管服务标识(MSI)实现Azure Blob存储认证的方案咨询

使用托管服务标识(MSI)实现Azure Blob存储认证指南

当然有!这个方案现在已经是Azure生态里非常成熟的无密码认证方案,完全能满足你WebApp/WebJob不用连接字符串就能访问并上传Blob的需求。我来给你一步步拆解具体怎么实现:

一、给WebApp/WebJob启用系统分配的托管标识

  • 登录Azure门户,找到你的WebApp或WebJob资源
  • 在左侧导航栏里找到「标识」选项,切换到「系统分配」标签页
  • 将状态切换为「开启」,点击保存后,Azure会自动为这个资源创建对应的服务主体,后续就靠这个标识来完成认证

二、为MSI分配Blob存储的访问权限

  • 找到目标Blob存储账户,进入「访问控制(IAM)」页面
  • 点击「添加」→「添加角色分配」
  • 选择匹配需求的角色:如果只是上传Blob,「存储Blob数据贡献者」权限就足够了(遵循最小权限原则,别选过大的角色)
  • 切换到「成员」标签页,选择「托管标识」,然后搜索并选中你刚才启用MSI的WebApp/WebJob
  • 完成角色分配后,等待1-5分钟让权限生效(Azure的IAM权限有时候不会即时生效)

三、代码实现示例

.NET 示例

不用配置任何连接字符串,直接借助DefaultAzureCredential自动使用MSI认证:

using Azure.Storage.Blobs;
using Azure.Identity;
using System.IO;
using System.Text;

var storageAccountUrl = "https://<你的存储账户名>.blob.core.windows.net";
var containerName = "<目标容器名>";

// 初始化Blob服务客户端,自动通过MSI获取认证令牌
var blobServiceClient = new BlobServiceClient(
    new Uri(storageAccountUrl),
    new DefaultAzureCredential());

// 上传Blob到指定容器
var containerClient = blobServiceClient.GetBlobContainerClient(containerName);
await containerClient.CreateIfNotExistsAsync();

var blobClient = containerClient.GetBlobClient("sample-upload.txt");
using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes("通过MSI认证上传的内容"));
await blobClient.UploadAsync(fileStream, overwrite: true);

Python 示例

逻辑和.NET一致,同样用DefaultAzureCredential自动适配MSI环境:

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

storage_account_url = "https://<你的存储账户名>.blob.core.windows.net"
container_name = "<目标容器名>"

credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
    account_url=storage_account_url,
    credential=credential
)

# 创建容器(如果不存在)并上传Blob
container_client = blob_service_client.get_container_client(container_name)
container_client.create_container_if_not_exists()

blob_client = container_client.get_blob_client("sample-upload.txt")
blob_client.upload_blob(b"通过MSI认证上传的内容", overwrite=True)

几个关键注意事项

  • 本地测试时,DefaultAzureCredential会自动使用你本地登录的Azure CLI、Azure PowerShell或Visual Studio的身份,不用额外配置
  • 确保不要给MSI分配超出需求的权限,比如不需要删除Blob的话,就不要用「存储Blob数据所有者」角色
  • 如果遇到认证失败,先检查角色分配是否正确,以及权限是否已经生效(有时候需要等几分钟)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:52