如何在Power BI Power Query(M)中从Azure Key Vault获取密钥?
解决方案:Power Query(M)调用Azure Key Vault REST API获取密钥
核心问题
直接使用Web.Contents的默认组织账户授权无法通过Azure Key Vault身份验证,因为AKV的REST API要求请求头中携带AAD Bearer访问令牌,而非Power BI默认的OAuth流程。
解决步骤
- 获取AAD访问令牌:使用Power Query内置的
AzureAD.GetAccessToken函数,针对AKV专属资源URI(https://vault.azure.net)获取令牌。 - 构造授权请求头:将令牌封装为
Authorization请求头,格式为Bearer <token>。 - 调用AKV REST API:携带请求头发起API调用,获取密钥数据。
完整M查询示例
let // 替换为你的Key Vault名称 KeyVaultName = "<你的Key Vault名称>", // 获取AKV资源的AAD访问令牌 AccessToken = AzureAD.GetAccessToken("https://vault.azure.net"), // 构造请求头 Headers = [ #"Authorization" = "Bearer " & AccessToken, #"Content-Type" = "application/json" ], // 调用AKV REST API获取密钥列表 ApiUrl = "https://" & KeyVaultName & ".vault.azure.net/secrets/?api-version=7.4", Response = Web.Contents(ApiUrl, [Headers=Headers]), JsonResponse = Json.Document(Response, 65001), SecretsList = JsonResponse[value] in SecretsList
关键配置验证
- AKV访问策略:确认你的AAD用户(或Power BI服务使用的服务主体)已被分配
Key Vault Secrets User权限,且权限范围包含Get操作。 - Power BI隐私设置:首次运行查询时,需将AKV的API URL设置为公共隐私级别,避免跨源权限拦截。
- 服务端部署:发布到Power BI服务时,确保工作区使用的身份(如服务主体)已在AKV中配置对应权限,无需本地数据网关(AKV为云端原生服务)。
常见问题排查
- 令牌获取失败:检查Power BI Desktop登录的AAD账户是否有权限访问目标AKV。
- 返回403错误:确认AKV访问策略已正确应用,且权限包含
secrets/get操作。
内容的提问来源于stack exchange,提问作者vlm
相关产品推荐
相关产品推荐

