我应该使用docker的用户机密或环境变量

时间:2017-03-11 00:03:00

标签: docker asp.net-core .net-core

当使用带有asp.net核心的docker进行开发时,我应该使用用户机密还是环境变量?我正在使用Visual Studio 2017在添加项目时创建的默认docker文件,该文件使用microsoft / aspnetcore:1.1,我相信它是一个linux映像。

如何在docker中设置用户机密/环境变量,以便它们在启动时设置,但不包含在源代码中?

4 个答案:

答案 0 :(得分:3)

出于生产目的,您需要使用环境变量,而不是使用秘密。通过帮助防止敏感数据存储在代码中/检查到源代码管理中,秘密存在 ONLY 以便在开发期间安全存储:

  

Secret Manager工具不会对存储的机密进行加密,也不应将其视为受信任存储。它仅用于开发目的。键和值存储在用户配置文件目录中的JSON配置文件中。

作为环境变量的替代方案,您可以考虑使用" external"键值存储,例如ConsulVault

关于docker中的环境变量,SO已经有相关的问题/答案。请参阅How to pass environment variables to docker containers?作为示例。

答案 1 :(得分:1)

我决定添加另一个名为appsettings.secrets.json的appsettings文件,而不是使用用户机密或环境变量。然后在构造函数中添加文件,就像其他appsettings文件一样:

 var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile("appsettings.secrets.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

请务必将appsettings.secrets.json添加到.gitignore文件中,以便它不会添加到源代码管理中。用户机密和环境变量仍然可以使用。

答案 2 :(得分:1)

环境变量更好 - https://12factor.net/config

如果您使用docker run运行泊坞广告,请使用-e--env-file选项: https://docs.docker.com/engine/reference/run/#env-environment-variables

如果您使用docker-compose使用environmentenv_file密钥运行泊坞窗: https://docs.docker.com/compose/environment-variables/

答案 3 :(得分:0)

对于开发,我依赖于 .net 秘密管理器工具

  1. 使用 dotnet user-secrets 在本地计算机上存储机密
dotnet user-secrets init

dotnet user-secrets set "Movies:ServiceApiKey" "12345"
..

MS docs: Safe storage of app secrets in development in ASP.NET Core

  1. 将包含机密的本地文件夹挂载到 Docker 容器

Docker 示例:

docker run ^
  -e ASPNETCORE_ENVIRONMENT=Development ^
  -v %APPDATA%/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro  ^
  company/image:latest

docker-compose 示例:

version: "3.8"

..

  net_core_service:
    ..
    environment:
      # should be defined Development-env to allow loading user-secrets located on the local computer.
      - ASPNETCORE_ENVIRONMENT=Development
    ..
    volumes:
      # map the dotnet user-secret folder
      - $APPDATA/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
    ..

..