Jenkins 的 Credentials 并不安全

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

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凭据并不安全,并提出了一些个人的安全做法,但未进行实践。

🏷️

标签

➡️

继续阅读