繁体   English   中英

Azure 密钥保管库:拒绝访问

[英]Azure key vault: access denied

我有以下代码用于从 Azure Key Vault 获取机密:

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 和保险库的 url 没问题。 但是,我不知道我可以做些什么来修复此错误,Azure 门户中是否有设置阻止我阅读机密?

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

1. 使用 PowerShell运行下一个命令:

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

2. 使用 Azure 门户

  1. 打开密钥保管库
  2. 从 Key Vault 资源边栏选项卡中选择访问策略
  3. 单击刀片顶部的 [+ 添加访问策略] 按钮
  4. 单击Select Principal选择您之前创建的应用程序
  5. 从密钥权限下拉列表中,选择“解密”、“签名”、“获取”、“UnwrapKey”权限
  6. 保存更改

授权应用程序使用密钥或秘密

该问题确实使用 Azure 门户指定,我已在此处记录为 Key Vault 访问创建服务主体。

具体从第 2 步开始:

在 Azure 门户中打开 Key Vault,然后选择“设置”下的“访问策略”边栏选项卡。 单击添加新并单击选择主体 - 您必须在搜索框中输入您在上一步中创建的已注册应用程序的全名,然后它才会显示出来,此时您就可以选择它.

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

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

发生了什么 - 您的服务主体无权执行上述操作。 看看这个线程。

以编程方式创建 Azure KeyVault 机密时,如何修复“不允许‘设置’操作”错误?

如果要授权同一应用程序读取保管库中的机密,请运行以下命令:

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

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

在 .Net 代码 Azure 设置中访问 Key Vault:- App Service- 1-Enable-MSI(托管服务标识)-ON

Key Vault:1-打开 Key Vault 2-从 Key Vault 资源刀片中选择访问策略

3- 单击刀片顶部的 [+ Add new] 按钮 4-单击 Select Principal 以选择您之前创建的应用程序(App Service)

.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;

我遇到了同样的问题,我在 KeyVault 防火墙下添加了我的 IP 地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM