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 关注
- 203 浏览
添加回答
举报