2 回答

TA貢獻1836條經驗 獲得超5個贊
有多種方法可以使用 docker 在 Go 應用程序中存儲和使用敏感數據。每種方法都有其優點和缺點。
1.硬編碼代碼里面的秘密。(永遠不要這樣做)
const ( PROJECT_NAME = "MyProject" PRIVATE_TOKEN="kjdnioqvnocw")
優點:沒有。永遠不要這樣做。
缺點:開發人員會將您的生產機密視為他們日常工作的一部分。您的秘密將被檢查到源代碼管理中。兩者都是安全風險。此外,您必須修改代碼以在不同的環境中使用它,例如開發、測試和生產。
2. 將秘密放入環境變量中,從 .env 文件加載。 有兩個包可以輕松使用.env文件,godotenv和viper,我更喜歡godotenv因為它更容易。
優點:開發人員不會看到您的生產機密。您可以在開發、測試和生產中使用不同的秘密,而無需修改代碼。
缺點:惡意代碼可以讀取您的秘密。您應用程序的大部分代碼可能是開源庫。錯誤的代碼可能會在您不知情的情況下潛入。
3. 將秘密放入專門的秘密管理器中,例如HashiCorp 的 Vault、Google Cloud 的秘密管理器。AWS的Parameter Store, Azure的Azure Key Vault
優點:惡意代碼更難讀取您的秘密。您可以審核誰在何時訪問了機密。您可以為誰更新機密以及誰可以讀取機密分配細粒度的角色。您可以更新和版本您的秘密。
缺點:這是您學習的附加技術。它可能是您需要設置和管理的附加軟件,除非它包含在您使用的云平臺中。
所以選擇實際上是在上面的第 2 項和第 3 項之間。您選擇哪一個將取決于您的秘密有多敏感以及使用專門的秘密管理器需要多少額外工作。例如,如果您的項目在 Google Cloud Platform 上運行,Secret Manager 只需一次 API 調用即可。在其他主要的云平臺上可能也一樣容易,但我對它們沒有第一手經驗。

TA貢獻1824條經驗 獲得超5個贊
ENTRYPOINT "./my-program" "-project" $PROJECT "-pat" $PRIVATE_TOKEN
是一個獨立的 shell,不能共享以前 Dokerfile 行中的變量,這是使用 Dockerfiles 的權衡。
我想建議修改./my-program
以閱讀config-file
類似的內容kubectl
。有一個很好的 Viper 包可以幫助實現這種方法。
IE: ENTRYPOINT "./my-program" "--config-file" "config.yaml"
您應該在 ENTRYPOINT 之前將所有秘密保存在 config.yaml 中
參考資料:https ://github.com/spf13/viper
- 2 回答
- 0 關注
- 220 瀏覽
添加回答
舉報