Jenkins的憑證管理

2021-10-04 04:26:43 字數 3438 閱讀 8284

憑證(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

然後單擊「global credentials (unrestricted)」鏈結,再單擊「add credentials」

jenkins預設支援以下憑證型別:secret text、username with password、secret file、sshusername with private key、certificate:pkcs#12、docker host certificateauthentication credentials。

​ secret text是一串需要保密的文字,比如gitlab的api token。

​ username with password指使用者和密碼憑證。

​ secret file指需要保密的文字檔案。使用secret file時,jenkins會將檔案複製到乙個臨時目錄中,再將檔案路徑設定到乙個變數中。構建結束後,所複製的secret file會被刪除。

​ ssh username with private key指一對ssh使用者名稱和金鑰。

新增憑證後,安裝credentials binding plugin外掛程式,通過其提供的withcredentials步驟就可以在pipeline中使用憑證了。

​ sshuserprivatekey函式還支援以下引數。

​ • usernamevariable:ssh使用者名稱的變數名。

​ • passphrasevariable:ssh key密碼的變數名。

​ secret text:

​ aws-secret-key-id和aws-secret-access-key是我們預先定義的憑證id。creden-tials方法將憑證的值賦給變數後,我們就可以像使用普通環境變數一樣使用它們了,如:echo"$"。

username with password:

​ 與 secret text 不同的是,我們需要通過 bitbucket creds usr 拿到使用者名稱的值,通過bitbucket creds psw拿到密碼的值。而變數bitbucket creds的值則是乙個字串,格式為:<使用者名稱》:<密碼》。

secret file:

credentials helper方法只支援secret text、username with password、secretfile三種憑證。

(1)安裝hashicorp vault外掛程式

(2)新增vault token憑證

(3)配置vault外掛程式

(4) 在pipeline中讀取

我們可以在environment和steps中使用vault步驟。推薦在environment中使用。

vault步驟的引數如下:

• path,儲存鍵值對的路徑。

• key,儲存內容的鍵。

• vaulturl(可選),vault服務位址。

• credentialsid(可選),vault服務認證的憑證。

如果不填vaulturl與credentialsid引數,則使用系統級別的配置。

​ 如果使用的是credentials helper方法或者withcredentials步驟為變數賦值的,那麼這個變數的值是不會被明文列印到jenkins日誌中的。除非使用以下方法:

在沒有使用credential的場景下,我們又該如何在日誌中隱藏變數呢?可以使用masked pass-word外掛程式。通過該外掛程式提供的包裝器,可以隱藏我們指定的敏感資訊。

初次使用 masked password 外掛程式很容易以為是使用 s1 和 s2 作為變數的,如 echo"被隱藏的密文:$ 和 $"。實際上,var引數只是用於方便在自由風格的jenkins專案中區分不同的需要隱藏的密文。在pipeline中使用,它就沒有存在的意義了。但是即使這樣也不能省略它,必須傳乙個值。password引數傳的是真正要隱藏的密文。

那麼,為什麼echo "secret1"這條語句中並沒有使用預定義的變數,secret1也會被隱藏呢?這是由masked password外掛程式的實現方式決定的。

jenkins 提供了 consolelogfilter 介面,可以在日誌列印階段實現我們自己的業務邏輯。masked password 外掛程式實現了 consolelogfilter 介面,然後利用正規表示式將匹配到的文字replaceall成****

通過masked password外掛程式還可以設定全域性級別的密文隱藏,在manage jenkins→configuresystem頁中可以找到,具體配置如圖

jenkins許可權管理

目錄介紹 在研發內部存在多個角色 開發 運維 測試 這些角色往往負責不同的專案,jenkins只提供了簡單的許可權管理。外掛程式role based authorization strategy外掛程式提供了基於角色的許可權管理 安裝外掛程式 系統管理 外掛程式管理 查詢 role based au...

Jenkins外掛程式管理

搜尋jenkins,找到並點選,進入後選中update,然後找到update center,最後將鏈結位址複製到jenkins中 注意外掛程式和jenkins版本需要一致,否則容易導致jenkins不穩定。root localhost wget plugins.tar.gz root localho...

Jenkins使用者許可權管理

外掛程式 role based authorization strategy 進入jenkins後點選系統管理進入全域性安全配置 當外掛程式安裝好的時候,授權策略會多出乙個role based strategy選項,選擇該項並儲存 在系統管理頁面進入 manage and assign roles ...