Azure密钥保管库:访问被拒绝
我有以下代码从Azure密钥保险库获取密码:
public static async Task 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门户中是否有可能阻止我读取密码的设置?
要修复拒绝访问,您需要配置Active Directory权限。 授予对KeyVault的访问权限。
1.使用PowerShell运行下一个命令:
Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey
2.使用Azure门户
- 打开密钥库
- 从Key Vault资源刀片中选择“ 访问策略 ”
- 单击刀片顶部的[+添加新]按钮
- 单击“ 选择主体”以选择先前创建的应用程序
- 从Key权限下拉列表中,选择“Decrypt”,“Sign”,“Get”,“UnwrapKey”权限
- 保存更改
授权应用程序使用密钥或密钥
该问题确实指定了使用Azure门户,我已经记录了在此处为Key Vault访问创建服务主体。
具体来自第2步:
在Azure门户中打开密钥保管库,然后在“设置”下选择“访问策略”边栏选项卡 单击“添加新项”,然后单击“选择主体” – 您必须在搜索框中输入您在上一步中创建的注册应用程序的全名,然后才能显示它,此时您将能够选择它。
您可以从顶部下拉列表中选择适当的模板,也可以手动选择“密钥”,“密钥”或“证书”权限。 在此阶段不要担心授权申请。
重要提示:按“确定”按钮会将新策略添加到列表中,但不会保存! 在继续之前,请务必单击“保存”。
发生了什么 – 您的服务主体无权执行所述操作。 看看这个post。
如何以编程方式创建Azure KeyVault密钥时,如何修复“操作’设置’不允许”错误?
如果要授权同一应用程序读取保管库中的机密 ,请运行以下命令:
Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get
当您在Azure ClientId中注册应用程序时生成。
访问.Net代码中的密钥保管库Azure设置: – App Service-1-Enable-MSI(托管服务标识)-ON
密钥保管库:1 – 打开密钥保管库2 – 从密钥保管库资源刀片中选择访问策略
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;
- 使用ImageResizer的Azure C#WebJob未正确设置Content-Type
- 在azure色的窗户上找不到路径的一部分
- 从azure blob存储文件生成Zip文件
- ComosDB – MongoAPI – 文档不包含分片键
- 在Visual Studio中更改SQL Server数据库的最大大小以在Azure中上载
- CreateDocumentCollectionIfNotExistsAsync并不总是有效
- PUT和Delete不能与Windows Azure上的ASP.NET WebAPI和数据库一起使用
- Windows Azure MessageLockLostException
- SQL Azure BACPAC提取