是否可以将密钥库的访问权限授予用户分配的身份?
在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应用程序的“系统分配的身份”,则可以访问密码,
您是否知道如何使用用户分配的身份进行这项工作?
答案 0 :(得分:1)
我遇到了同样的问题,每次我尝试使用用户分配的身份访问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”的字段。那就是你想要的。
答案 1 :(得分:1)
如果遇到此错误Connection string is not valid. Must contain 'TenantId'
,请确保您明确引用Microsoft.Azure.Services.AppAuthentication >= v1.2.0
我使用的是Microsoft.Extensions.Configuration.AzureKeyVault v3.1.3
的较低版本的AppAuthentication
,因此用户分配的身份无效。
更多信息在这里: https://github.com/MicrosoftDocs/azure-docs/issues/28729