Drone 是一套以 Docker 容器技術為主的 CI/CD 開源專案,來聊聊 Drone 如何管理專案內的 Secret 資料,首先先來定義什麼是 Secret,舉個簡單例子,Drone 可以輕易完成基本打包+上傳到遠端伺服器,過程中一定會需要用到兩個 Plugin,就是 drone-scp 及 drone-ssh,而使用這兩個 plugin 需要有一組 Password 或是一把金鑰 (Public Key Authentication),在 Drone 可以透過後台 UI 介面將密碼或者是金鑰內容儲存在 Secret 設定頁面。預覽圖如下:
安全性?
但是透過 Drone 後台新增的 Secret 資料不是很安全,因為每個 Steps 都可以直接存取 Secret 資料。
|
|
從上面可以得知,透過 appleboy/golang-testing
或 mhart/alpine-node:9.1.0
都可以存取 test46
變數,這樣哪裡不安全?答案是,假設今天服務的是開源專案,這樣別人是不是可以發個 PR,內容新增一個步驟,將變數內容直接印出來即可。當然你可以把 Drone 的頁面關閉,只有管理者可以存取,但是這樣就失去開源專案的意義,因為貢獻者總該需要看到哪裡編譯錯誤,或者是測試失敗的地方。
透過 drone cli 管理
要解決安全性問題,必須要將 Secret 變數綁定只有特定 Image 才可以存取。而要做到此功能只能透過 drone cli 工具才可以完成。該如何使用 drone secret 指令呢?其實不會很難,drone cli 可以做的比 Web UI 還強大。所以關於 Secret 部分,我幾乎都是用 cli 來管理
先假設 ssh-password
變數需要綁定在 appleboy/drone-ssh
映像檔上面,該如何下指令:
上述例子可以用在存密碼欄位,如果是想存檔案
類型呢?也就是把金鑰 public.pem
給存進變數。這邊可以透過 @檔案路徑
的方式來存取該檔案,並且直接寫入到 Drone 資料庫。注意只要是 @
開頭,後面就必須接實體檔案路徑。
心得
將 Drone 安裝在公司內部,又想要防止團隊成員直接拿到 Pem 資料,就必須透過 drone cli 工具來達成此功能,否則當同事可以輕易拿到這把 Key 時,就可以隨時登入機器惡搞。如果你拿 Drone 管理開源專案,更是要這麼做了。上述教學,我已經錄製成影片檔放在 Udemy 線上課程,如果已經購買的朋友們,可以直接看線上教學。
See also
- 開源專案 Drone CI/CD 平台真的免費嗎?
- Go 1.15 新增 Module cache 環境變數
- Docker 推出官方 GitHub Actions 套件
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境
- 用 Drone 部署靜態檔案到 GitHub Pages
- Drone CI/CD 支援 Auto cancellation 機制
- Ansible 設定 Google Container Registry 搭配 Drone 自動上傳
- 用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry
- 用 10 分鐘安裝好 Drone 搭配 GitLab
- [Drone] 將單一 Job 分配到多台機器,降低部署執行時間