Jenkins的凭证管理

Jenkins的凭证管理

什么是凭证?

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

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

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

建立凭证

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

file

而后单击“Global credentials (unrestricted)”连接,再单击“Add Credentials”ide

file

凭证的类型

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

​ Secret text是一串须要保密的文本,好比GitLab的API token。
fileui

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

file

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

file

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

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

相关文章
相关标签/搜索