为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中使用 docker 将敏感数据作为参数传递

在 Golang 中使用 docker 将敏感数据作为参数传递

Go
萧十郎 2023-01-03 11:19:43
我在Go中创建了一个程序,它接收参数,project_id并且private_token. 基本上这就是我的做法:project_id := flag.String("project", "", "The id of the project")private_token := flag.String("pat", "", "The personal access token with api and read user permissions")flag.Parse()我创建了以下 docker 镜像:FROM golang:1.16-alpineWORKDIR /appCOPY . /appRUN go buildENV PROJECT=""ENV PRIVATE_TOKEN=""ENTRYPOINT "./my-program" "-project" $PROJECT "-pat" $PRIVATE_TOKEN我通过运行运行图像:docker run -e PROJECT=29065042 -e PRIVATE_TOKEN="glpat-1CHf9T8Nz98W8ZzyT7V4" --rm -it my-image-name如您所见,我正在传递一个私有令牌,这是一个敏感数据。我想知道这是否是将敏感数据从 docker 传递到我的 go 程序的最佳方法,或者是否有更好的模式?
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

有多种方法可以使用 docker 在 Go 应用程序中存储和使用敏感数据。每种方法都有其优点和缺点。

1.硬编码代码里面的秘密(永远不要这样做)

const (
    PROJECT_NAME = "MyProject"
    PRIVATE_TOKEN="kjdnioqvnocw")
  • 优点:没有。永远不要这样做。

  • 缺点:开发人员会将您的生产机密视为他们日常工作的一部分。您的秘密将被检查到源代码管理中。两者都是安全风险。此外,您必须修改代码以在不同的环境中使用它,例如开发、测试和生产。

2. 将秘密放入环境变量中,从 .env 文件加载。 有两个包可以轻松使用.env文件,godotenvviper,我更喜欢godotenv因为它更容易。

  • 优点:开发人员不会看到您的生产机密。您可以在开发、测试和生产中使用不同的秘密,而无需修改代码。

  • 缺点:恶意代码可以读取您的秘密。您应用程序的大部分代码可能是开源库。错误的代码可能会在您不知情的情况下潜入。

3. 将秘密放入专门的秘密管理器中,例如HashiCorp 的 VaultGoogle Cloud 的秘密管理器AWSParameter Store, Azure的Azure Key Vault

  • 优点:恶意代码更难读取您的秘密。您可以审核谁在何时访问了机密。您可以为谁更新机密以及谁可以读取机密分配细粒度的角色。您可以更新和版本您的秘密。

  • 缺点:这是您学习的附加技术。它可能是您需要设置和管理的附加软件,除非它包含在您使用的云平台中。

所以选择实际上是在上面的第 2 项和第 3 项之间。您选择哪一个将取决于您的秘密有多敏感以及使用专门的秘密管理器需要多少额外工作。例如,如果您的项目在 Google Cloud Platform 上运行,Secret Manager 只需一次 API 调用即可。在其他主要的云平台上可能也一样容易,但我对它们没有第一手经验。


查看完整回答
反对 回复 2023-01-03
?
沧海一幻觉

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


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号