Jenkins 的 Credentials 并不安全
内容提要
Jenkins凭据不安全,因为它们以明文形式存储在本地并传输,可以采取额外措施进行保护。
延伸解读
凭据本地存储的风险
Jenkins 将凭据加密后存储在 $JENKINS_HOME/secrets/ 目录下的文件中。虽然文件权限通常为 600,但任何能访问该目录的用户都可以复制这些文件。一旦泄露,攻击者可以解密凭据,从而完全控制 Jenkins 实例及其连接的所有系统。因此,仅依赖文件系统权限并不足够,需要更严格的访问控制。
明文传递与恶意脚本
在 Jenkins Pipeline 中,凭据以环境变量形式明文传递给构建步骤。这意味着任何有权限修改 Jenkinsfile 的人都可以通过 echo 等命令打印出凭据内容。例如,恶意脚本可以轻松输出 ACCESS_KEY 和 SECRET_KEY。因此,必须限制谁可以修改流水线,并避免在日志中输出敏感信息。
更安全的替代思路
作者认为,可以借鉴 Kubernetes Secret 的思路,通过额外手段保证传输安全,并引入应用身份识别机制,确保只有真正的应用才能获取加密数据。但作者也指出,这些方法尚未实践,仅为个人想法。读者若遇到类似需求,应结合自身环境评估,并欢迎交流不同意见。
Q&A
Jenkins凭据存储的安全隐患是什么?
Jenkins凭据以明文形式存储在本地,可能被访问和复制,导致整个Jenkins实例面临攻击风险。
如何确保Jenkins凭据的安全传输?
可以通过额外的方式确保传输安全,例如避免明文传递和应用身份识别。
Jenkins凭据在使用时是如何传递的?
Jenkins凭据在使用时以明文形式通过环境变量传递给应用。
如果Jenkins凭据文件被泄露,会发生什么?
如果凭据文件被泄露,攻击者可以完全访问整个Jenkins实例及其所有内容。
Jenkins凭据的存储位置在哪里?
Jenkins凭据存储在目录 $JENKINS_HOME/secrets/ 中。
作者对Jenkins凭据安全性的看法是什么?
作者认为Jenkins凭据并不安全,并提出了一些个人的安全做法,但未进行实践。