GitHub Actions是GitHub內建的持續整合和持續交付(CI/CD)平臺,使開發團隊能夠實現工作流程的自動化,包括構建、測試和部署管道。
使用GitHub Actions的一個缺點是,你的日誌是公開的,任何人都可以通過必要的許可權訪問它們。
為了防止敏感資料暴露在GitHub Actions的日誌中,你應該使用加密的環境變數來安全儲存敏感資料。這些加密的環境變數被稱為GitHub Actions Secrets。
本文告訴你如何使用GitHub Actions Secrets來防止敏感資訊出現在GitHub Actions日誌中。
先決條件
要學習本教程:
如何保持GitHub操作日誌的安全性
當你使用GitHub Actions構建工作流程時,任何訪問你倉庫的人都可以檢視日誌,所以它們不應該包括敏感資訊。然而,你不能就這樣刪除你的令牌、密碼和其他敏感資訊–你需要它們來進行測試和讓你的應用程式正常執行。
解決方案是用 ::add-mask::
工作流命令來隱藏它們,該命令將星號(*)放在它所應用的敏感資料的位置上。
下面的部分向你展示瞭如何遮蔽日誌。
如何遮蔽日誌
首先,在你的文字編輯器中開啟克隆的版本庫。
在版本庫的根部建立.github/workflows/目錄,以儲存你的工作流檔案。然後,在.github/workflows目錄中建立一個名為hide-secrets.yml的新檔案,並在其中新增以下程式碼:
name: Hide Sensitive Information on: push jobs: print-secret-token: runs-on: ubuntu-latest steps: - name: echo a secret run: echo "your secret token is verySecretToken"
提交修改並推送到你的GitHub倉庫。更新後的GitHub操作工作流程是啟用的,每當你推送一個新的改動時,就會觸發。
在GitHub上開啟你的倉庫,選擇Actions標籤來檢視日誌。你的工作流程應該顯示如下:
預覽你的工作流程
檢查工作流程的日誌,你會發現列印在日誌上的 verySecretToken
字串。點選你的工作流程,然後點選任務名稱(print-secret-token)來檢視日誌。它應該看起來像這樣:
檢查你的GitHub動作日誌
要隱藏它,使用 ::add-mask::
命令,編輯hide-secrets.yml檔案,並在 print-secret-token
工作中新增一個新步驟:
name: Hide Sensitive Information on: push jobs: print-secret-token: runs-on: ubuntu-latest steps: - name: Add Mask run: echo "::add-mask::verySecretToken" - name: echo a secret run: echo "your secret token is verySecretToken"
你應該在頂部新增 Add Mask
的步驟,因為掩碼只在 ::add-mask::
執行後適用。如果你把Secret的 verySecretToken
放在 Add Mask
步驟之前,它仍然會出現未被掩碼。因此,為了確保該值被遮蔽,必須儘快使用 ::add-mask::
。
一旦你提交併釋出你的修改到你的GitHub倉庫,字串 verySecretToken
將被星號(*)取代,無論它出現在你的日誌中:
製作普通文字
雖然這解決了遮蔽的問題,但卻引入了一個新的問題。你的 verySecretToken
仍然在工作流檔案中,所以任何能夠訪問原始碼的人都可以看到它。
遮蔽純文字的另一個缺點是,只遮蔽一個詞的一部分會隱藏它的所有例項。例如,以下面的句子為例: “Programming is great, but my most productive days are those when I do not write a program”。如果你遮蔽了 “program” 這個詞,它不僅會遮蔽句子末尾的這個詞,還會遮蔽它出現的任何地方,比如 “programming” 中。
如果你試圖遮蔽純文字,你會得到這樣的結果:
遮蔽純文字的問題
在GitHub動作日誌中隱藏敏感資料的更好方法是使用GitHub Actions Secrets,如下節所示。
如何使用GitHub Actions Secrets
你可以使用GitHub Actions Secrets來儲存任何你想在GitHub操作工作流程中使用的私人資料。Secret是在倉庫或組織層面以鍵/值對的形式建立的。
倉庫只能訪問在倉庫級別建立的Secret,而在組織級別建立的Secret則由組織內的所有倉庫共享。
在儲存庫級別建立的Secret可供任何有合作者角色許可權的人在操作中使用。你可以在任何時候改變你的Secret的值。然而,Secret不能被用於分支版本庫的工作流。
以下準則適用於命名Secret:
- Secret名稱不能包含空格。
- Secret名稱不區分大小寫。
- Secret名稱不能以數字開頭。
- Secret名稱不能以字首
GITHUB_
開頭。 - Secret名稱必須是唯一的 – 具有相同名稱的祕密不能存在於同一級別。
你可以在GitHub操作的工作流程中使用這些Secret,只需在Secret名稱前新增 secrets
作為YML變數,如下所示:
${{ secrets.MY_SECRET_TOKEN }}
你也可以掩蓋Secret,以獲得更多的安全性,如下所示。
如何遮蔽secret
首先,建立一個GitHub secret。在你的 GitHub 倉庫中,點選設定標籤,從左邊的側邊欄中選擇Secrets > Actions,然後點選New repository secret來新增一個新的secret:
建立一個新的版本庫secret
給你的secret一個名字和一個secret值,然後點選Add secret:
新增一個新的GitHub Secret
現在你已經建立了你的secret,並給了它 verySecretToken
值,你可以在你的工作流檔案中使用它。開啟你的 hide-secrets.yml 檔案,做如下修改:
name: Hide Sensitive Information on: push jobs: print-secret-token: runs-on: ubuntu-latest steps: - name: Add Mask run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}" - name: Echo a secret run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"
這與之前的程式碼唯一的區別是,你用新建立的GitHub secret ” ${{secrets.MY_SECRET_TOKEN }}
” 替換了Secret令牌。
一旦你提交了程式碼並將修改推送到你的GitHub倉庫,你的Secret就被遮蔽了:
遮蔽的GitHub操作私鑰
小結
你不能在你的GitHub操作日誌中洩露任何敏感資訊。純文字遮蔽是隱藏資料的一種方式,但任何訪問工作流檔案的人都可以看到你試圖隱藏的資訊。
正如本教程所展示的,GitHub Actions Secret是一種更安全的方法,可以保護你的敏感資料,然後將其遮蔽。
評論留言