如何在Python应用中使用托管身份访问Azure AI服务?
关于Azure托管身份访问AI服务的问题解答
一、如何通过托管身份实现无密码访问Azure AI服务
核心是借助Azure托管身份自动获取访问令牌,无需在代码或配置文件中硬编码密码/密钥:
- 为应用的运行载体(本地开发环境、云主机、App Service等)分配托管身份(系统分配型或用户分配型均可,用户分配型灵活性更高)
- 为该托管身份在目标Azure AI服务资源(或其所属资源组)分配Cognitive Services User或Cognitive Services Contributor等适配角色,确保其具备访问文本分析服务的必要权限
二、Visual Studio本地运行时能否使用托管身份
可以直接在Visual Studio本地运行代码,无需部署到VM:
- 确保Visual Studio已登录你的Azure账户(该账户需具备对应Azure AI服务的访问权限,或已被分配合适角色)
- 借助Azure Identity库的
DefaultAzureCredential组件,它会自动优先使用Visual Studio登录的身份获取访问令牌
三、角色分配的层级选择
不建议在订阅级别分配角色(权限范围过大,存在安全风险),推荐以下层级:
- Azure AI服务资源级别:仅针对目标AI服务资源分配权限,遵循最小权限原则,安全性最高
- 资源组级别:若同一资源组内有多个AI服务需要统一权限管理,可选择此层级
四、Python代码的修改示例
使用azure-identity和azure-ai-textanalytics库替换原服务主体认证逻辑,实现无密码访问:
- 安装依赖:
pip install azure-identity azure-ai-textanalytics
- 核心代码示例:
from azure.ai.textanalytics import TextAnalyticsClient from azure.identity import DefaultAzureCredential # 初始化凭证,自动适配本地开发(Visual Studio登录)或云环境(托管身份) credential = DefaultAzureCredential() # 初始化文本分析客户端 text_analytics_client = TextAnalyticsClient( endpoint="你的Azure AI服务端点", credential=credential ) # 调用文本分析服务示例 documents = ["我今天很开心"] response = text_analytics_client.analyze_sentiment(documents=documents) for doc in response: print(f"情感分析结果: {doc.sentiment}")
DefaultAzureCredential会自动尝试多种认证方式:Visual Studio登录身份、Azure CLI登录身份、云环境中的托管身份等,无需手动指定认证类型。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

