公共 Git 代码库如何管理敏感信息?

2023-08-15 06:02:27 +08:00
 ltltfuture

请问各位在公共代码库里如何管理敏感信息 比如用户名,密码,token 等等

不知道现在企业实际在用的方法是什么

我搜到的一些方式:

一个公共 repo (存代码),一个私有 repo(放敏感信息),公共 repo 用 submodule 调用私有 repo

或者写一个示例的密码文件比如*.json repo clone 之后替换掉

2633 次点击
所在节点    程序员
37 条回复
charlie21
2023-08-15 06:56:11 +08:00
cp .example.env .env
nano .env
way2explore2
2023-08-15 07:00:29 +08:00
仓库不应该包含任何敏感信息


.env.example


或者用 AWS Secret Manager 这类服务
ltltfuture
2023-08-15 07:01:33 +08:00
@charlie21 请问一下这个.env 涉及到多人合作如何管理呢?比如存在私有 sftp ?或者放内部 wiki 上?
ltltfuture
2023-08-15 07:02:15 +08:00
@way2explore2 也就是说私有仓库也不安全对吗?
Chad0000
2023-08-15 07:04:59 +08:00
这种东西放 Pipeline 里,设置加密,只有发布的时候会写进去,就变成只写不能读了。
ltltfuture
2023-08-15 07:12:29 +08:00
@Chad0000 这里的 pipeline 是指 CI/CD 里面的吗?
lin07hui
2023-08-15 07:18:29 +08:00
https://docs.gitlab.com/ee/user/application_security/
Security/Secret-Detection.gitlab-ci.yml
其它平台也有类型的 ci
ltltfuture
2023-08-15 07:21:39 +08:00
@lin07hui 感谢,我学习一下
Rocketer
2023-08-15 07:22:22 +08:00
简单弄的话就是在服务器上设置环境变量,这样密码等信息只存在于服务器内存中。

正规做法可以用各云计算平台的密码管理,比如 AWS Secrets Manager
Chad0000
2023-08-15 07:28:28 +08:00
@ltltfuture
对的,源码里你使用关键字,然后在 CI/CD 里读取敏感内容并替换。每个平台会有不同的说法,比如 Azure DevOps 叫 Variables ,Github 叫 Secrets 。这些都是可以在 CI/CD 中读取写入文件的。
ltltfuture
2023-08-15 07:30:37 +08:00
@Rocketer 感谢,也就是说对环境变量这个选项的话的,也是比如靠管 infrastructure 的人来管理更新,其他人写码运行即可对吗
ltltfuture
2023-08-15 07:31:44 +08:00
@Chad0000 感谢解释
charlie21
2023-08-15 07:41:36 +08:00
大概思路是:首先 把敏感信息拿到项目 repo 之外,其次预计到 build 阶段会读取敏感信息(否则将会 build 失败),最后安排各自环境可以读取到敏感信息 帮助各自环境下 build 成功。

对于一个敏感信息(例如买的某个库的序列号,比如 fontawesome 的序列号:如果没有这个序列号则 npm install 时候安装此包时候会失败),在开发环境里 写入本机 ~/.npmrc 或其它位置 以确保本机 npm install 安装成功 然后就可以开始本地开发了;在服务器环境如果没用 docker 则也可以直接写在如上文件位置呢 如果用 docker 则写在构建 docker container 环境配置里 便于读取如上文件位置 最终确保服务器端或 docker container 环境能读取到文件,此 container 里的一个项目最终可 build 成功

至于需要公共编辑敏感信息的情况,最好是乐意参与公共编辑的相关人们找个下午的时间输出一个最终配置办法(能跑通生产环境和开发环境)。然后这个版本就不要再动了,否则出事了咋整呢?最后指定一个最高权限的人 / 由一个最高权限的人(按需)分发给线上服务器环境 or 需要配置开发环境的人,并且记录线上配置过程(方便出错时候排错) or 写一个文档教人怎么配置开发环境。同时剥夺其他人的配置修改权,因为多人乱改呢出错时候很难排错。
ltltfuture
2023-08-15 07:54:19 +08:00
@charlie21 感谢详细的回答
8355
2023-08-15 09:26:45 +08:00
你说的公共代码库是指啥,公司内部的公共项目?还是 github 的开源?
lingeo
2023-08-15 09:29:46 +08:00
很多 API 文档都是推荐你将各种认证加到你的运行环境中,不要写在代码里,执行的时候通过环境变量调用。
ltltfuture
2023-08-15 09:34:04 +08:00
@8355 感谢,我看 github gitlab 这些都有环境变量设置
ltltfuture
2023-08-15 09:36:43 +08:00
@8355 都算吧,隐私信息毕竟是要授权的人才能用的,所以其实就是问怎么样的形式储存然后让有权限的人能改没权限的人不影响使用程序
guanzhangzhang
2023-08-15 10:06:31 +08:00
敏感信息支持配置文件或者环境变量。
然后这个文件默认读取相对路径下 xxx.env 或者 xxx.config ,放一个 example.env example.config ,gitignore 里加上 xxx.env 和 xxx.config
ci 里例如 action 之类的设置 run 的 env
ltltfuture
2023-08-15 10:23:02 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX