Azure密钥保管库:访问被拒绝

时间:2016-10-13 15:50:20

标签: c# azure azure-keyvault

我有以下用于从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门户中是否有可能阻止我读取密码的设置?

6 个答案:

答案 0 :(得分:20)

要修复拒绝访问,您需要配置Active Directory权限。授予对KeyVault的访问权限。

<强> 1。使用PowerShell 运行下一个命令:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey

<强> 2。使用Azure门户

  1. 打开密钥库
  2. 从Key Vault资源刀片
  3. 中选择访问策略
  4. 单击刀片顶部的[+添加新]按钮
  5. 点击选择主体以选择您之前创建的应用
  6. 从密钥权限下拉列表中,选择&#34;解密&#34;,&#34;签署&#34;,&#34;获取&#34;,&#34; UnwrapKey&#34;权限
  7. 保存更改
  8. Authorize the application to use the key or secret

答案 1 :(得分:3)

问题确实指定使用Azure门户,我已记录为密钥保管库访问创建服务主体here

具体来自第2步:

  

在Azure门户中打开密钥保管库,然后在“设置”下选择“访问策略”边栏选项卡。单击“添加新项”,然后单击“选择主体” - 您必须在搜索框中输入您在上一步中创建的注册应用程序的全名,然后才能显示它,此时您将能够选择它

     

您可以从顶部下拉列表中选择适当的模板,也可以手动选择“密钥”,“密钥”或“证书”权限。在此阶段不要担心授权申请。

     

重要提示:按“确定”按钮会将新策略添加到列表中,但不会保存!请务必在继续之前单击“保存”。

答案 2 :(得分:2)

发生了什么 - 您的服务主管没有执行所述操作的权限。看一下这个帖子。

How do I fix an "Operation 'set' not allowed" error when creating an Azure KeyVault secret programmatically?

答案 3 :(得分:1)

如果您要授权同一个应用程序在您的保险库中阅读 secrets ,请运行以下命令:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get

在Azure ClientId中注册应用程序时生成。

答案 4 :(得分:1)

.p代码中的

访问密钥库 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地址。