使用 MSI 连接到 Azure Vault

Connection to Azure Vault using MSI

我正在尝试使用 MSI 从控制台应用程序连接到我的 Azure 保管库

对于这个保险库,我已将我的用户添加为选定原则
我用来连接的代码是

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);

我得到以下异常

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority

  1. 在虚拟机下的配置blade中启用托管服务标识。

  1. 搜索 NameOfYourVM 服务主体并将其添加到 访问策略 下的 Key Vault。添加 key/secret/certificate 权限。

  1. 在您的 Azure VM 上,运行 控制台应用程序。
class Program
{
    // Target C# 7.1+ in your .csproj for async Main
    static async Task Main()
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();

        var keyVaultClient = new KeyVaultClient(
              new KeyVaultClient.AuthenticationCallback(
                    azureServiceTokenProvider.KeyVaultTokenCallback));

        var secret = await keyVaultClient.GetSecretAsync(
              "https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");

        Console.WriteLine(secret.Value);
        Console.ReadLine();
    }
}

在本地 运行,创建您自己的 Azure AD 应用程序注册(Web App/Web API 类型使其成为机密客户端),将其添加到Key Vault 并在获取访问令牌时使用其 client_id 和 client_secret —
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application#gettoken

正如评论中提到的 Varun,现在有一种更好的方法可以在 运行 在本地访问令牌而不暴露服务主体时获取访问令牌 —

https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication#local-development-authentication

到 运行 本地。

  1. 安装 Azure Cli
  2. 打开WindowsPowershell
  3. az login 命令(它会给出一个 url 和代码)
  4. 打开 Url 并输入 az login
  5. 提供的代码

然后像这样获取秘密值

 var secret =  await keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
     secret.Value; //your secret.

上面已经给出了正确答案,这里再补充一个:-)

Azure MSI 应用 App Service & Vault

  1. 为您的应用服务启用系统分配的托管标识,检查设置下的标识部分。

  2. 在保管库下添加策略

  3. 在后面配置你的代码