Jenkins

Jenkins #

https://www.jenkins.io 文档

存储Secrets(Storing Secrets) #

https://www.jenkins.io/doc/developer/security/secrets/

插件通常存储用户凭证(user credentials)和类似的秘密(secrets),如API Key、Token或仅是用户名和密码,以便与其他系统和服务进行交互。存储此类Secret的插件需要小心它们的存储方式。如果使用简单的字符串字段,并将其序列化为纯文本存储到磁盘,则可能会发生以下问题:

  • 在许多系统中,Jenkins主目录(Jenkins Home)的部分区域可供其他用户帐户访问,这可能导致凭证以纯文本形式存储在磁盘上,从而被检索。
  • 即使排除了secrets/目录,Jenkins主目录的备份也可能会泄露密钥。
  • 字符串字段在配置表单中以纯文本形式传回,即使该值在密码字段中被隐藏,仍然可以通过HTML页面源代码访问。这甚至适用于仅具有扩展读取权限的用户。

所有这些问题的最简单解决方案是将密码存储为Secrets。

  • 解密Secrets的Key存储在保护最严的secrets/目录中,建议从备份中排除该目录。
  • Secrets字段以加密形式传回,这样用户就无法在稍后的时间检索其纯文本形式。如果用户仅具有扩展读取权限(Extended Read permission),密钥将从输出中删除。

一种更高级的选项是与Credentials Plugin集成。有关更多信息,请参见其文档

加密Secrets和Credentials #

Jenkins使用AES算法对Secrets、Credentials及其对应的加密密钥进行加密和保护。这些加密密钥(encryption keys)存储在$JENKINS_HOME/secrets/目录中,与用于保护这些密钥的主密钥一起存放。该目录应配置为仅允许Jenkins控制器运行时使用的操作系统用户具有读取和写入权限(即设置chmod0700或应用适当的文件属性)。主密钥(在加密术语中也称为“密钥加密密钥”)以未加密形式存储在Jenkins控制器文件系统的$JENKINS_HOME/secrets/master.key中,因此不能防止具有直接访问该文件权限的攻击者实施攻击。

大多数用户和开发者通常通过以下方式间接使用这些加密密钥:

  • 使用Secret API加密通用密钥数据;

  • 通过Credentials API管理Credentials。

  • 对于对加密技术感兴趣的用户,Jenkins使用AES的密码分组链接(CBC)模式,并结合 PKCS#5填充和随机初始化向量(IV)来加密CryptoConfidentialKey实例。这些实例存储于$JENKINS_HOME/secrets/目录中,文件名对应于CryptoConfidentialKey的 ID。常见的密钥ID包括:

  • hudson.util.Secret:用于通用密钥;

  • com.cloudbees.plugins.credentials.SecretBytes.KEY:用于某些凭证类型;

  • jenkins.model.Jenkins.crumbSalt:由 CSRF 保护机制使用;

  • org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY:用于标识Jenkins控制器。

Jenkins备份和还原

  • ThinBackup插件并不会备份$JENKINS_HOME/secrets/目录,即使用ThinBackup做的备份不包含$JENKINS_HOME/secrets/
  • 还需要额外单独做好$JENKINS_HOME/secrets/的备份

这样在灾难时,才能通过全新安装Jenkins+使用ThinBackup的备份+使用额外备份$JENKINS_HOME/secrets/,完整恢复Jenkins实例。如果没有备份的$JENKINS_HOME/secrets/,则原来加密Secrets和Credentials的将会无法使用。

Jenkins Remoting #

https://www.jenkins.io/projects/remoting

Jenkins Remoting 是一个库和可执行的Java jar下载地址文件,实现了Jenkins的通信层。这包括基于TCP的通信协议、远程过程调用、类加载、数据流传输等功能。目前,Remoting主要用于Jenkins控制器(controller)与 Jenkins 代理(agent)之间的通信。

Remoting子项目包括Remoting库本身、agent的相关包,以及许多特定于Remoting的插件和核心模块。

Archives #

© 2025 青蛙小白 | 总访问量 | 总访客数