Jenkins的凭证管理

本文详细介绍了Jenkins的凭证管理,包括凭证的概念、创建流程、不同类型的凭证(如Secret text、Username with password等)及其使用。文章还讨论了如何在pipeline中安全使用凭证,如使用credentials helper方法,以及在日志中隐藏敏感信息的策略,如Masked Password插件的应用。

Jenkins的凭证管理

什么是凭证?

凭证(cridential)是Jenkins进行受限操作时的凭据。比如使用SSH登录远程机器时,用户名和密码或SSH key就是凭证。而这些凭证不可能以明文写在Jenkinsfile中。Jenkins凭证管理指的就是对这些凭证进行管理。

为了最大限度地提高安全性,在Jenkins master节点上对凭证进行加密存储(通过Jenkins实例ID加密),只有通过它们的凭证ID才能在pipeline中使用,并且限制了将证书从一个Jenkins实例复制到另一个Jenkins实例的能力。

也因为所有的凭证都被存储在Jenkins master上,所以在Jenkins master上最好不要执行任务,以免被pipeline非法读取出来。那么在哪里执行pipeline呢?应该分配到Jenkins agent上执行。

创建凭证

首先确保当前用户有添加凭证的权限。我们使用超级管理员的身份登录。单击Jenkins首页左侧的Credentials→System

file

然后单击“Global credentials (unrestricted)”链接,再单击“Add Credentials”

file

凭证的类型

Jenkins默认支持以下凭证类型:Secret text、Username with password、Secret file、SSHUsername with private key、Certificate:PKCS#12、Docker Host CertificateAuthentication credentials。

​ Secret text是一串需要保密的文本,比如GitLab的API token。 file

​ Username with password指用户和密码凭证。

file

​ Secret file指需要保密的文本文件。使用Secret file时,Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中。构建结束后,所复制的Secret file会被删除。

file

​ SSH Username with private key指一对SSH用户名和密钥。

file

添加凭证后,安装Credentials Binding Plugin插件,通过其提供的withCredentials步骤就可以在pipeline中使用凭证了。

​ Secret text

file

​ Username with password

file

​ Secret file

file

​ SSH Username with private key

file

​ sshUserPrivateKey函数还支持以下参数。

​ • usernameVariable:SSH用户名的变量名。

​ • passphraseVariable:SSH key密码的变量名。

credentials helper方法使用凭证

​ Secret text:

file

​ AWS-SECRET-KEY-ID和AWS-SECRET-ACCESS-KEY是我们预先定义的凭证ID。creden-tials方法将凭证的值赋给变量后,我们就可以像使用普通环境变量一样使用它们了,如:echo"${AWS ACCESS KEY ID}"。

Username with password:

file

​ 与 Secret text 不同的是,我们需要通过 BITBUCKET CREDS USR 拿到用户名的值,通过BITBUCKET CREDS PSW拿到密码的值。而变量BITBUCKET CREDS的值则是一个字符串,格式为:<用户名>:<密码>。

Secret file:

file

credentials helper方法只支持Secret text、Username with password、Secretfile三种凭证。

使用HashiCorp Vault

(1)安装HashiCorp Vault插件

file

(2)添加Vault Token凭证

file

(3)配置Vault插件

file

(4) 在pipeline中读取

file

我们可以在environment和steps中使用vault步骤。推荐在environment中使用。

vault步骤的参数如下:

• path,存储键值对的路径。

• key,存储内容的键。

• vaultUrl(可选),vault服务地址。

• credentialsId(可选),vault服务认证的凭证。

如果不填vaultUrl与credentialsId参数,则使用系统级别的配置。

在Jenkins日志中隐藏敏感信息

​ 如果使用的是credentials helper方法或者withCredentials步骤为变量赋值的,那么这个变量的值是不会被明文打印到Jenkins日志中的。除非使用以下方法:

file

在没有使用credential的场景下,我们又该如何在日志中隐藏变量呢?可以使用Masked Pass-word插件。通过该插件提供的包装器,可以隐藏我们指定的敏感信息。

file

初次使用 Masked Password 插件很容易以为是使用 s1 和 s2 作为变量的,如 echo"被隐藏的密文:${s1} 和 ${s2}"。实际上,var参数只是用于方便在自由风格的Jenkins项目中区分不同的需要隐藏的密文。在pipeline中使用,它就没有存在的意义了。但是即使这样也不能省略它,必须传一个值。password参数传的是真正要隐藏的密文。

那么,为什么echo "secret1"这条语句中并没有使用预定义的变量,secret1也会被隐藏呢?这是由Masked Password插件的实现方式决定的。

Jenkins 提供了 ConsoleLogFilter 接口,可以在日志打印阶段实现我们自己的业务逻辑。Masked Password 插件实现了 ConsoleLogFilter 接口,然后利用正则表达式将匹配到的文本replaceAll成****

MaskPasswordsBuildWrapper包装器除了支持varPasswordPairs参数,还支持varMaskRegexes参数,使用自定义的正则表达式匹配需要隐藏的文本。写法如下:

file

通过Masked Password插件还可以设置全局级别的密文隐藏,在Manage Jenkins→ConfigureSystem页中可以找到,具体配置如图 file

<think>好的,我需要回答用户关于Jenkins凭证管理的问题,包括功能来源、使用规范和常用API。首先,我需要确认凭证管理是内置功能还是通过插件实现的。根据之前的知识,Jenkins凭证管理最初是通过插件引入的,后来可能被集成到核心中。需要验证这一点,可能需要查阅官方文档或可靠资料。 接下来,用户询问使用规范。这部分应包括如何安全地存储和管理凭证,比如避免硬编码、权限控制等。同时,需要提到最佳实践,如使用Credentials Binding插件或Role-Based Access Control插件来增强安全性。 关于常用API,用户可能需要知道如何在Pipeline脚本中调用凭证,比如使用`withCredentials`绑定环境变量,或者使用`usernamePassword`等类来获取凭证。此外,可能需要提到Jenkins提供的Java API和REST API相关的方法。 需要确保回答结构清晰,分点说明,并且引用来源。例如,引用Jenkins官方文档或插件页面。同时,根据用户提供的引用,需要检查是否有相关部分可以引用,但用户提供的引用是关于HBase测试的内容,可能不相关,因此可能需要忽略。 最后,生成相关问题,这些问题应围绕用户可能进一步询问的方向,如安全性、插件推荐、API使用示例等。 现在需要组织这些信息,确保符合格式要求,使用中文,正确应用行内公式(如果有的话,但这里可能不需要),独立公式单独成段,语法正确,并且引用标识自然添加。由于用户提供的引用可能与当前问题无关,可能需要查找其他引用来源,但如果没有,则可能不添加引用,或者说明引用来自Jenkins官方文档。</think>### Jenkins凭证管理功能解析 #### 一、功能来源 Jenkins凭证管理系统是**通过插件逐步发展为内置功能**的。早期版本中凭证管理需通过`Credentials Plugin`实现,自Jenkins 2.0版本后该功能被集成到核心系统中[^1]。当前核心功能支持基础凭证类型,而高级功能仍需插件扩展。 #### 二、使用规范 1. **凭证类型支持** - 基础类型:用户名/密码、SSH密钥、Secret文本、文件凭证(内置支持) - 扩展类型:Vault凭据、X.509证书等(需安装`Hashicorp Vault Plugin`等插件) 2. **安全准则** - 禁止在Pipeline脚本中硬编码敏感信息 - 采用最小权限原则,通过`Role-based Authorization Strategy`插件控制访问权限 - 使用`Credentials Binding Plugin`安全注入环境变量 3. **存储管理** - 默认加密存储于`JENKINS_HOME/secrets`目录 - 支持外部存储系统集成(需`Credentials Plugin 2.5+`) #### 三、常用API 1. **Pipeline语法** ```groovy withCredentials([usernamePassword(credentialsId: 'aws-creds', usernameVariable: 'AWS_USER', passwordVariable: 'AWS_PSWD')]) { sh 'aws configure --profile default --username $AWS_USER --password $AWS_PSWD' } ``` 2. **Java API** ```java CredentialsProvider.lookupCredentials(StandardUsernamePasswordCredentials.class, Jenkins.instance, ACL.SYSTEM, Collections.emptyList()) ``` 3. **REST API** - 凭证查询:`GET /credentials/store/system/domain/_/api/json` - 凭证创建:`POST /credentials/store/system/domain/_/createCredentials` #### 四、安全增强建议 1. 定期轮换凭证(通过`Credentials Plugin`的自动更新功能) 2. 使用`Credentials Masking Plugin`防止日志泄露 3. 集成密钥管理系统(如HashiCorp Vault)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值