c# - 无法从函数访问 Azure Key Vault - 禁止返回
问题描述
我正在尝试使用 Azure 函数从密钥保管库中获取机密,但是当我尝试访问它时,密钥保管库返回禁止。显然我错过了一些东西,但我无法找到另一个有同样问题的帖子。下面的代码:
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
KeyVaultClient kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
//(https://keyvaultname.vault.azure.net/)
var keyVaultUrl = Environment.GetEnvironmentVariable("KeyVaultLocation");
//(name of the secret)
var vaultSecretKey = Environment.GetEnvironmentVariable("VaultSecretKey");
var value = (await kvClient.GetSecretAsync(keyVaultUrl, vaultSecretKey)).Value;
我正在向日志输出异常,而我等待秘密值的最后一行抛出了这个异常:
操作返回了无效的状态代码“禁止”。
我已经在密钥保管库的访问策略中注册了该功能并授予它获取机密的权限,并且我已经为该功能启用了托管服务标识。还有什么我想念的吗?我不知道为什么该功能无法访问保险库。
解决方案
这是我KeyVaultClient
在 Azure Function (v2) 中使用的方法。我有一个方法可以根据为 Vault 配置的应用程序 ID 和机密返回访问令牌:
/// <summary>
/// Called by the KeyVaultClient instance.
/// </summary>
/// <param name="authority"></param>
/// <param name="resource"></param>
/// <param name="scope"></param>
/// <returns></returns>
private static async Task<string> GetAccessTokenAsync(string authority, string resource, string scope)
{
var clientCredential = new ClientCredential(Constants.Vault.AppId, Constants.Vault.AppSecret);
var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
AuthenticationResult result = await context.AcquireTokenAsync(resource, clientCredential);
return result.AccessToken;
}
然后,当我真正需要访问 Vault 时,我调用以下构造函数:
...
// Pushes the encryption to the Key-Vault.
var client = new KeyVaultClient(GetAccessTokenAsync, new HttpClient());
await client.GetSecretAsync(Constants.Vault.Url, vaultSecretKey);
推荐阅读
- sql - 是否可以使用 SQL 查询来确定 Mirth 频道是否被禁用?
- signalr - .Net5 SignalR SqlNotification 通知通知客户端
- reactjs - 如何与此 UserContext 中的 useState 交互?
- git - GIT:分离头->制作当前头
- python - 无法从 Google Colab 中的 keras 导入 to_categorical
- yaml - 液体:如何检查变量是否在数组中
- javascript - cookie 的值设置为变量
- c# - Mapster - 动态属性选择或忽略
- android - 如何处理 Android 的 App 用户会话
- java - 如何在 MicroProfile Rest Client 使用的 Json Serializer 上设置特定格式的表示?