【问题标题】:Reading Azure container instance secret volumes from asp.netcore 2.2 web app从 asp.net core 2.2 Web 应用程序读取 Azure 容器实例机密卷
【发布时间】:2018-12-28 23:00:11
【问题描述】:

我已阅读 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
    }

最后,我希望能够在本地运行代码,以便在将容器部署到 Azure 之前检查它是否正常工作。有没有办法可以在我的本地安装上模拟/伪造这些秘密(visual studio 2017,解决方案启用了 docker 支持,docker 在我的机器上本地运行)确实让我相信一切正常?

我已经编辑了这个问题,以明确这是关于秘密卷的

【问题讨论】:

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


    【解决方案1】:

    环境变量

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

    文章描述了如何将这些秘密写入环境变量。要在您的应用程序中使用它们,您必须阅读环境变量。 asp.net core 的配置完全支持这一点:

    假设您有以下配置(来自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 构建主机,其中包括调用 添加环境变量。

    你可以这样阅读你的秘密

    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”的目录。

    您可以使用 Key-per-file Configuration Provider 添加这些值

    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", '');
    

    【讨论】:

    • 我已阅读并理解您的回答。实际上,这个答案是关于秘密环境变量而不是秘密卷,这是问题最初的含义。有谁知道如何读取容器实例中的秘密卷值?
    • @ossentoo - 您最初的问题显然与环境变量有关。现在你完全改变了你的问题,所以你使答案无效。您不应该这样做,只需创建一个新问题或添加评论即可。
    • 对不起克里斯托夫。昨天我在重新阅读 MS 文档时意识到,秘密有两种实现:卷和变量。我以前没有意识到这一点。我实际上使用的是卷而不是变量。
    • @ossentoo - 没问题,我更新了答案。如果您的问题以实际上是不同问题的方式发生变化,那么只有当您创建一个新问题时,SO 才能发挥最佳效果。 (即使它不能解决您的问题,也可能对其他人有所帮助。) - 但是,我希望更新后的答案对您有用;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2022-11-09
    • 2023-03-20
    • 1970-01-01
    • 2019-12-16
    • 2019-08-12
    • 2023-04-08
    相关资源
    最近更新 更多