簡體   English   中英

我應該在 docker 中使用用戶機密還是環境變量

[英]Should I use user-secrets or environment variables with docker

使用 docker 和 asp.net core 進行開發時,我應該使用用戶機密還是環境變量? 我正在使用 Visual Studio 2017 在添加項目時創建的默認 docker 文件,該文件使用 microsoft/aspnetcore:1.1,我認為是 linux 映像。

如何在 docker 中設置用戶機密/環境變量,以便在啟動時設置它們,但不包含在源代碼中?

出於生產目的,您需要使用環境變量,而不是 use-secrets。 通過幫助防止敏感數據存儲在代碼中/簽入源代碼控制,秘密用於在開發過程中安全存儲:

Secret Manager 工具不會加密存儲的機密,不應將其視為受信任的存儲。 它僅用於開發目的。 鍵和值存儲在用戶配置文件目錄中的 JSON 配置文件中。


作為環境變量的替代方案,您可以考慮使用“外部”鍵值存儲,例如ConsulVault等。


關於docker中的環境變量,SO已經有相關的問題/答案。 請參閱如何將環境變量傳遞給 docker 容器? 作為例子。

我決定添加另一個名為 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 文件中,這樣它就不會被添加到源代碼管理中。 仍然可以使用用戶機密和環境變量。

環境變量更好 - https://12factor.net/config

如果您使用--env-file docker run --env-file使用-e--env-file選項: https : --env-file

如果您使用env_file docker-compose use environmentenv_file key 運行env_filehttps : env_file

對於開發,我依賴 .net秘密管理器工具

  1. 使用dotnet user-secrets在本地計算機上存儲機密
dotnet user-secrets init

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

請參閱MS 文檔:在 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
    ..

..

將docker與asp.net core一起使用進行開發時,我應該使用用戶秘密或環境變量嗎? 我正在使用添加項目時使用Visual Studio 2017創建的默認docker文件,該項目使用microsoft / aspnetcore:1.1,我相信這是一個Linux映像。

如何在docker中設置user-secrets / environment變量,以便在啟動時設置它們,但不包含在源代碼中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM