从asp.netcore 2.2 Web应用程序读取Azure容器实例机密卷

时间:2018-12-20 15:46:03

标签: azure asp.net-core azure-container-instances

我已经阅读了Microsoft的这份文档,其中描述了如何将秘密卷添加到容器实例:

https://docs.microsoft.com/bs-latn-ba/azure///container-instances/container-instances-volume-secret

我现在想从我的asp.net核心应用程序中读取这些安全值。我怎样才能做到这一点?我在任何地方都找不到任何文档。

理想情况下,我想在Startup类中进行此配置:

这里的东西:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog()
            .UseSetting(WebHostDefaults.ApplicationKey, typeof(Program).GetTypeInfo().Assembly.FullName); // beware of this
          // shouldn't be removed otherwise site will start outputting 404.
          // see: https://github.com/aspnet/Hosting/issues/903#issuecomment-269103645
    }

最后,我希望能够在本地运行代码,以便在将容器部署到天蓝色之前检查它是否正常工作。有没有办法可以在本地安装中模拟/伪造这些秘密(Visual Studio 2017,解决方案已启用Docker支持,Docker在我的计算机上本地运行)确实使我确信一切正常?

我已经编辑了这个问题,以明确表明这与秘密卷有关

1 个答案:

答案 0 :(得分:1)

环境变量

最初的问题是关于环境变量的,所以这部分是关于使用环境变量的。

文章介绍了如何将这些机密写入环境变量。要在您的应用程序中使用它们,您必须读取环境变量。 asp.net核心的配置完美支持了这一点:

鉴于您具有以下配置(来自https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables#secure-values):

apiVersion: 2018-10-01
location: eastus
name: securetest
properties:
  containers:
  - name: mycontainer
    properties:
      environmentVariables:
        - name: 'NOTSECRET'
          value: 'my-exposed-value'
        - name: 'SECRET'
          secureValue: 'my-secret-value'

以及文档中此处所述的默认设置:https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables#secure-values

  

2.x示例应用程序利用了静态便捷方法   CreateDefaultBuilder来构建主机,其中包括对   AddEnvironmentVariables。

您可以像这样阅读您的秘密

var secret = config.GetValue<string>("SECRET", '');

如此处所述:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#getvalue

秘密卷

秘密卷每个秘密值将包含一个文件。

https://docs.microsoft.com/bs-latn-ba/azure///container-instances/container-instances-volume-secret#mount-secret-volume---yaml

中的示例为例
  volumes:
  - name: secretvolume1
    secret:
      mysecret1: TXkgZmlyc3Qgc2VjcmV0IEZPTwo=
      mysecret2: TXkgc2Vjb25kIHNlY3JldCBCQVIK

您将拥有一个包含文件“ mysecret1”和“ mysecret2”的目录。

您可以使用“每个文件的密钥配置提供程序”添加这些值

config.AddKeyPerFile(directoryPath: path, optional: true);

如此处所述:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#key-per-file-configuration-provider

添加“配置源”后,您可以像这样访问值

 var secret = config.GetValue<string>("mysecret1", '');