使用MSI

时间:2018-02-28 10:32:58

标签: c .net azure azure-security shared-secret

我正在尝试使用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:   参数:Connectionstring:[未指定连接字符串],   资源:https://vault.azure.net,权限

enter image description here

3 个答案:

答案 0 :(得分:5)

  1. 在虚拟机下的配置刀片中启用托管服务标识。
  2. Enable MSI in the virtual machine configuration blade

    1. 搜索 NameOfYourVM 服务主体,并将其添加到访问策略下的密钥保管库中。添加密钥/机密/证书权限。
    2. Add Service Principal to Key Vault

      1. 在Azure VM上,运行控制台应用程序。
      2. 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();
            }
        }
        

        Console output

        要在本地运行,请创建您自己的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 :(得分:0)

在本地运行。

  1. 安装Azure Cli
  2. 打开Windows Powershell
  3. 编写az login命令(它将提供网址和代码)
  4. 打开网址并输入使用az login
  5. 指定的代码

    然后得到像这样的秘密值

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

答案 2 :(得分:0)

上面已经给出了正确的答案,这是另外一个:-)

通过App Service和保险柜应用Azure MSI

  1. 为您的App Service启用系统分配的托管身份,请检查“设置”下的“身份”部分。enter image description here

  2. 在保管箱下添加策略

  3. 在后面配置代码

    enter image description here