azure - 如何将密钥保管库的访问权限授予用户分配的身份?
问题描述
是否可以向用户分配的身份授予对密钥保管库的访问权限?
在来自 azure 门户的托管身份中,我创建了一个新身份“KeyVaultIdentity”,并将其分配给 Web 应用程序(在身份中,用户分配的身份选项卡)。在来自密钥保管库的访问策略中,我添加了新创建的“KeyVaultIdentity”身份,并提供了访问机密的权限。
我正在使用以下代码访问密钥库:
try
{
/* The below 4 lines of code shows you how to use AppAuthentication library to fetch secrets from your Key Vault*/
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("https://play9VaultDemo.vault.azure.net/secrets/AppSecret")
.ConfigureAwait(false);
Message = secret.Value;
/* The below do while logic is to handle throttling errors thrown by Azure Key Vault. It shows how to do exponential backoff which is the recommended client side throttling*/
do
{
long waitTime = Math.Min(getWaitTime(retries), 2000000);
secret = await keyVaultClient.GetSecretAsync("https://play9VaultDemo.vault.azure.net/secrets/AppSecret")
.ConfigureAwait(false);
retry = false;
}
while (retry && (retries++ < 10));
}
/// <exception cref="KeyVaultErrorException">
/// Thrown when the operation returned an invalid status code
/// </exception>
catch (KeyVaultErrorException keyVaultException)
{
Message = keyVaultException.Message;
if ((int)keyVaultException.Response.StatusCode == 429)
retry = true;
}
但它说当我尝试访问秘密时访问被禁止。但是,如果在 Key Vault 中我授予对 Web 应用程序的系统分配标识的访问权限,我可以访问该秘密,
您知道如何使用用户分配的身份进行这项工作吗?
解决方案
我遇到了同样的问题,每次尝试使用用户分配的身份访问 KeyVault 时,我都必须做两件事来“禁止”:
将我使用的 Microsoft.Azure.Services.AppAuthentication 版本升级到 1.2.0-preview2。早期版本不支持用户分配的身份。
将连接字符串传递到 AzureServiceTokenProvider 构造函数,以告知服务要使用哪个标识。这是上面所有链接都省略的部分。所以我有:
var connectionString = "RunAs=App;AppId=";
var azureServiceTokenProvider = new AzureServiceTokenProvider(connectionString);
代替:
var azureServiceTokenProvider = new AzureServiceTokenProvider();
若要查找您的 clientId 的值,请在 Azure 门户中打开您的托管标识。您应该会看到一个标记为“客户 ID”的字段。那就是你想要的那个。
推荐阅读
- javascript - 如何使用 XMLHttpRequest 解决或屏蔽 Chrome 扩展的“SameSite”cookie 错误
- time-series - 为什么某些时间序列模型(ARIMA、BATS、ETS)会为预测生成平线?
- embedded - 扩展 u-boot 功能
- java - 如何使用底部导航视图处理 MainActivity 上另一个片段的侦听器?
- google-cloud-storage - terraform中的base64编码的md5哈希?
- github - 配置 Travis CI 以构建新的 github 分支
- ios - 使用 Swift 解析嵌套 JSON 数据的正确方法是什么?
- python - 使用 pdb 调试 tox python 测试?
- python - 如何使用全息视图可视化时间跨度?
- jsp - 为什么我不能使用动态键(jsp、jstl、el)访问我的 HashMap 的值?