如何在构建服务器上保护凭据?

3
我设置了一个流程,开发人员将代码推送到代码库,这将触发我们的CI服务器进行构建。目前,CI服务器也负责部署。为了将应用程序部署到生产环境,Jenkins需要以root身份登录到生产服务器。
这意味着我必须将凭据(例如用户名/密码或密钥)放在CI系统上。这会导致每个能够访问代码库的开发人员都可以通过向构建过程中注入代码来读取这些秘密凭据。
如何确保对代码库的访问不会潜在地访问CI服务器上的凭据?

Jenkins需要在生产服务器上以root身份登录。为什么不让生产服务器成为Jenkins的从节点? - Tuan
就我所知,这并没有改变任何一件事情。正在构建的代码(以及构建计划)可能存在不安全因素,并且能够收集机密信息。 - gorootde
1个回答

1
您可以使用Jenkins的“凭据”对象(来自“Credentials”插件),只需这样做即可。从Jenkins侧边栏导航到“凭据”,然后创建一个新的凭据项目。这些项目保存在Jenkins内部,而不是在SCM存储库中。
然后,您可以从Jenkins管道或自由风格作业中使用这些凭据。 设置Jenkins权限,使开发人员无法访问凭据。 Jenkins通过用星号(***)替换它们来保护不会将这些凭据泄露到控制台输出中。
如果您正在使用jenkinsfile,则实际上是将完全控制权交给了开发人员-这是一种不良的安全实践!为了区分开发人员和DevOps角色,我会创建一个单独的Jenkins作业,仅将工件部署到生产环境中。不要将部署流程存储在jenkinsfile中(或者将其存储在具有不同权限的新“DevOps”存储库中)。成功时配置构建作业以触发部署作业。使用范围/权限保护对凭据和部署作业进行保护。

这个解决方案不会阻止开发人员获取凭据,因为Jenkinsfile在SCM中。开发人员可以将凭据转储到文件中,并将其作为构件下载(这不会被星号覆盖)。 - gorootde
如果您正在使用Jenkinsfile,则实际上是将完全控制权交给开发人员,这是不好的安全实践。为了分离开发人员和DevOps角色,我会创建一个单独的Jenkins作业,仅部署工件到生产环境。不要将部署流程存储在Jenkinsfile中(或者将其存储在具有不同权限的新的“DevOps”存储库中)。配置构建作业以在成功时触发部署作业。使用范围/权限保护访问凭据和部署作业。 - Oren Chapo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接