我有以下用于从Azure密钥保险库获取密码的代码:
public static async Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
ClientCredential clientCred = new ClientCredential(...); //app id, app secret
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
if (result == null)
throw new InvalidOperationException("Failed to obtain the JWT token");
return result.AccessToken;
}
public static string GetSecret(string secretName)
{
KeyVaultClient keyVaultClient = new KeyVaultClient(GetToken);
try
{
return keyVaultClient.GetSecretAsync("my-key-vault-url", secretName).Result.Value;
}
catch(Exception ex)
{
return "Error";
}
}
我得到的错误是“访问被拒绝”,(我认为)意味着id,secret和Vault的url都没问题。但是,我不知道我能做些什么来修复此错误,Azure门户中是否有可能阻止我读取密码的设置?
答案 0 :(得分:20)
要修复拒绝访问,您需要配置Active Directory权限。授予对KeyVault的访问权限。
<强> 1。使用PowerShell 运行下一个命令:
Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey
<强> 2。使用Azure门户
答案 1 :(得分:3)
问题确实指定使用Azure门户,我已记录为密钥保管库访问创建服务主体here。
具体来自第2步:
在Azure门户中打开密钥保管库,然后在“设置”下选择“访问策略”边栏选项卡。单击“添加新项”,然后单击“选择主体” - 您必须在搜索框中输入您在上一步中创建的注册应用程序的全名,然后才能显示它,此时您将能够选择它
您可以从顶部下拉列表中选择适当的模板,也可以手动选择“密钥”,“密钥”或“证书”权限。在此阶段不要担心授权申请。
重要提示:按“确定”按钮会将新策略添加到列表中,但不会保存!请务必在继续之前单击“保存”。
答案 2 :(得分:2)
发生了什么 - 您的服务主管没有执行所述操作的权限。看一下这个帖子。
答案 3 :(得分:1)
如果您要授权同一个应用程序在您的保险库中阅读 secrets ,请运行以下命令:
Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get
在Azure ClientId中注册应用程序时生成。
答案 4 :(得分:1)
访问密钥库 Azure设置:- 应用服务 1-启用-MSI(托管服务身份)-打开
主要保管箱: 一键式金库 2-从Key Vault资源刀片中选择访问策略
3-单击刀片顶部的[+添加新]按钮 4单击“选择主体”以选择您先前创建的应用程序(应用程序服务)
.Net代码:- .Net代码中访问密钥库机密的代码
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = keyVaultClient.GetSecretAsync("https://test.vault.azure.net/", "clientid").Result.Value;
答案 5 :(得分:0)
我遇到了同样的问题,并在KeyVault防火墙下添加了我的IP地址。