Azure Function Python时间触发器访问Key Vault认证错误求解
问题成因
DefaultAzureCredential 会按固定顺序尝试从当前环境的多个凭证源获取认证令牌,本地运行时你本地已登录Azure CLI/VS Code Azure插件/本地Azure PowerShell,所以可以正常拿到凭证。部署到Azure Function后自动认证生效的前提是你为Function开启了托管标识,未开启的情况下托管标识凭证源不可用,同时Function运行环境默认没有配置其他凭证源(比如环境变量、CLI登录信息等),所有凭证源尝试全部失败就会抛出你遇到的报错。
解决方案
- 步骤1:为Function App开启系统分配托管标识
进入Azure门户找到你的Function App实例,左侧菜单栏选择「身份验证」,切换到「系统分配」标签页,将状态调整为「开启」后保存,Azure会自动为该Function创建专属的托管身份实体。 - 步骤2:为托管标识授予Key Vault访问权限
打开你要访问的Key Vault实例,根据Key Vault的权限配置模式选择对应操作:- 访问策略模式:左侧菜单选择「访问策略」→ 点击「创建」→ 机密权限栏勾选「获取」权限 → 下一步到主体配置页,搜索你刚才开启托管标识的Function App名称,选中对应主体 → 完成创建并保存访问策略。
- Azure RBAC模式:左侧菜单选择「访问控制(IAM)」→ 点击「添加角色分配」→ 选择「Key Vault 机密用户」角色 → 下一步到主体配置页,搜索并选中Function的托管标识 → 完成分配。
如果你需要多个资源共用同一个身份,也可以使用用户分配托管标识:提前创建用户分配托管标识后,在Function的「身份验证」页「用户分配」标签页绑定该标识,代码初始化凭证时指定对应客户端ID即可:
credential = DefaultAzureCredential(managed_identity_client_id="你的用户分配托管标识客户端ID")
- 步骤3:重新部署你的Function代码即可正常运行,原有代码逻辑无需额外修改。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

