2017-09-15 66 views
1

我得到了一个设置,开发人员将代码推送到一个存储库,然后触发一个构建在我们的CI服务器上。部署目前也由CI服务器完成。为了部署到生产环境,jenkins需要在prod服务器上以root用户身份登录。如何在buildserver上保护凭据?

这意味着我必须将凭证(例如用户名/密码或密钥)放到CI系统上。这导致了每个有权访问存储库的开发人员都能够通过将代码注入构建过程来读取这些秘密凭据的问题。

如何确保对回购的访问不会给予我的CI服务器上的凭据潜在访问权限?

+0

'jenkins需要以root用户身份登录到prod-servers'为什么不将您的prod服务器作为Jenkins奴隶? – Tuan

+0

据我所见,这不会改变一件事。构建代码(和Buildplan)可能不安全,并且能够收集秘密信息。 – gorootde

回答

0

您可以使用Jenkins“Credentials”对象(“Credentials”插件),仅此。从Jenkins侧面菜单导航到“Credentials”并创建一个新的Credentials项目。这些项目保存在Jenkins中,而不是保存在SCM存储库中。

然后,您可以使用Jenkins管线或自由式作业中的凭证。 安装Jenkins权限,以便开发人员无权访问证书。 Jenkins通过用星号(***)替换它们来防止这些凭据泄漏到控制台输出。

如果你使用的是jenkins文件,你实际上完全控制了开发者 - 这是一个不好的安全实践!为了分离开发人员和DevOps角色,我将创建一个单独的Jenkins作业,仅将工件部署到生产环境中。不要将部署管道存储在jenkinsfile中(或将其存储在具有不同权限的新“DevOps”存储库中)。配置构建作业以在成功时触发部署作业。使用作用域/权限保护对凭证和部署作业的访问

+0

该解决方案不会妨碍开发人员获取凭证,因为Jenkinsfile位于SCM中。开发者可以例如将凭据转储到文件中并将其作为工件下载(这不会被星号所覆盖) – gorootde

+0

如果您使用的是jenkins文件,则实际上是对开发人员给予完全控制权,这是一种糟糕的安全措施。为了分离开发人员和DevOps角色,我将创建一个单独的Jenkins作业,仅将工件部署到生产环境中。不要将部署管道存储在jenkinsfile中(或将其存储在具有不同权限的新“DevOps”存储库中)。配置构建作业以在成功时触发部署作业。使用作用域/权限保护对凭据和部署作业的访问。 –