Allstar 是一款 GitHub 應用程序,可持續監控 GitHub 組織或儲存庫是否遵守安全最佳實踐。如果 Allstar 偵測到違反安全策略的行為,它會建立一個問題來警告儲存庫或組織擁有者。對於某些安全策略,Allstar 還可以自動更改導致違規的項目設置,將其恢復到預期狀態。
Allstar 的目標是讓您對影響專案安全的文件和設定進行精細控制。您可以選擇在組織和儲存庫層級監視哪些安全性策略,以及如何處理策略違規。您也可以製定或貢獻新政策。
Allstar 是作為 OpenSSF Scorecard 專案的一部分開發的。
如果您遇到 Allstar 創建的不需要的問題,請按照以下說明選擇退出。
Allstar 具有高度可配置性。控制主要分為三個等級:
這些配置是在組織的.allstar
儲存庫中完成的。
儲存庫層級:使用 Allstar 的組織中的儲存庫維護者可以選擇將其儲存庫加入或退出組織層級的強制執行。注意:這些儲存庫層級控制項僅在組織層級設定中允許「儲存庫覆蓋」時才起作用。這些配置是在儲存庫的.allstar
目錄中完成的。
策略等級:管理員或維護人員可以選擇在特定儲存庫上啟用哪些策略以及在違反策略時 Allstar 採取哪些操作。這些配置是在組織的.allstar
儲存庫(管理員)或儲存庫的.allstar
目錄(維護者)中的策略 yaml 檔案中完成的。
在組織層級安裝 Allstar 之前,您應該大約決定希望 Allstar 在多少個儲存庫上運行。這將幫助您在選擇加入和退出策略之間進行選擇。
選擇加入策略可讓您手動新增您希望 Allstar 運行的儲存庫。如果您不指定任何儲存庫,Allstar 儘管已安裝,但也不會運作。如果您只想對一小部分儲存庫實施策略,或者想在單一儲存庫上嘗試 Allstar,然後再在更多儲存庫上啟用,請選擇選擇加入策略。從 v4.3 版本開始,支援 glob 來輕鬆新增多個具有相似名稱的儲存庫。
選擇退出策略(建議)在所有儲存庫上啟用 Allstar,並允許您手動選擇儲存庫以選擇退出 Allstar 強制執行。您也可以選擇退出所有公共儲存庫或所有私人儲存庫。如果您想要在組織中的所有儲存庫上執行 Allstar,或者只想選擇退出少量儲存庫或特定類型(即公用與私人)儲存庫,請選擇此選項。從 v4.3 版本開始,支援 glob 來輕鬆新增多個具有相似名稱的儲存庫。
選擇退出(建議) optOutStrategy = true | 選擇加入 optOutStrategy = false | |
---|---|---|
預設行為 | 所有儲存庫均已啟用 | 沒有啟用任何儲存庫 |
手動新增儲存庫 | 手動新增儲存庫會在這些儲存庫上停用 Allstar | 手動新增儲存庫可在這些儲存庫上啟用 Allstar |
附加配置 | optOutRepos:Allstar 將在列出的儲存庫上停用 optOutPrivateRepos:如果為 true,Allstar 將在所有私人儲存庫上停用 optOutPublicRepos:如果為 true,Allstar 將在所有公共儲存庫上停用 (optInRepos:該設定將被忽略) | optInRepos:Allstar 將在列出的儲存庫上啟用 (optOutRepos:該設定將被忽略) |
回購覆蓋 | 如果為真:儲存庫可以使用自己的儲存庫檔案中的設定選擇退出其組織的 Allstar 強制執行。套用於此儲存庫的組織層級選擇加入設定將被忽略。 如果為 false:儲存庫無法選擇退出在組織層級配置的 Allstar 強制執行。 | 如果為 true:即使未在組織層級為儲存庫進行配置,則儲存庫也可以選擇加入其組織的 Allstar 強制執行。套用於該儲存庫的組織層級選擇退出設定將被忽略。 如果為 false:如果未在組織層級配置,則 Repos 無法選擇 Allstar 強制執行。 |
快速啟動和手動安裝選項都涉及安裝 Allstar 應用程式。您可以查看所要求的權限。該應用程式要求對大多數設定和文件內容進行讀取訪問,以檢測安全合規性。它請求對問題的寫入存取權並進行檢查,以便它可以建立問題並允許block
操作。
此安裝選項將在您組織中的所有儲存庫上使用選擇退出策略啟用 Allstar。所有當前策略都將啟用,Allstar 將透過提交問題來提醒您違反策略的情況。這是開始使用 Allstar 的最快、最簡單的方法,您以後仍然可以更改任何配置。
努力:非常容易
步驟:
.allstar
就是這樣!所有目前的 Allstar 策略現已在您的所有儲存庫上啟用。如果違反政策,Allstar 將產生問題。
若要變更任何配置,請參閱手動安裝說明。
此安裝選項將引導您根據選擇加入或選擇退出策略建立設定檔。此選項從一開始就提供對配置的更精細的控制。
努力程度:中等
步驟:
每個策略都可以配置 Allstar 在偵測到儲存庫不合規時將採取的操作。
log
:這是預設操作,實際上對所有操作都會發生。記錄所有策略運行結果和詳細資訊。目前日誌僅對應用程式操作員可見,公開這些日誌的計劃正在討論中。issue
:此操作會建立 GitHub 問題。每個策略僅建立一個問題,文字描述了策略違規的詳細資訊。如果問題已公開,則每 24 小時就會發出一條評論,而無需更新(目前使用者不可設定)。如果政策結果發生變化,則會對該問題留下新的評論並連結到問題正文中。一旦違規問題解決,Allstar 將在 5-10 分鐘內自動關閉該問題。fix
:此操作是特定於策略的。此策略將對 GitHub 設定進行變更以修正策略違規行為。並非所有政策都能支持這一點(見下文)。已提議但尚未實施的行動。將來會新增定義。
block
:Allstar 可以設定 GitHub 狀態檢查,並在檢查失敗時阻止儲存庫中的任何 PR 被合併。email
:Allstar 將向儲存庫管理員發送一封電子郵件。rpc
:Allstar 會將 rpc 傳送到某個組織特定的系統。有兩個設定可用於配置問題操作:
issueLabel
在組織和儲存庫層級可用。設定它將覆蓋 Allstar 使用的預設allstar
標籤來識別其問題。
issueRepo
在組織層級可用。設定它將強制在組織中建立的所有問題在指定的儲存庫中建立。
與 Allstar 應用程式啟用配置類似,所有策略均使用組織的.allstar
儲存庫或儲存庫的.allstar
目錄中的 yaml 檔案啟用和配置。與應用程式一樣,預設情況下策略是選擇加入的,預設log
操作也不會產生可見的結果。啟用所有策略的簡單方法是為每個策略建立一個 yaml 文件,其中包含以下內容:
optConfig:
optOutStrategy: true
action: issue
以下詳細介紹了每個策略的fix
操作如何發揮作用。如果下面省略,則fix
操作不適用。
此策略的設定檔名為branch_protection.yaml
,設定定義位於此處。
分支保護策略檢查 GitHub 的分支保護設定是否根據指定的配置正確設定。問題文字將描述哪個設定不正確。請參閱 GitHub 文件以更正設定。
fix
操作將變更分支保護設定以符合指定的策略配置。
此策略的設定檔名為binary_artifacts.yaml
,設定定義位於此處。
該政策結合了記分卡的檢查。從儲存庫中刪除二進位工件以實現合規性。由於記分卡結果可能很詳細,您可能需要執行記分卡本身才能查看所有詳細資訊。
該策略的設定檔名為codeowners.yaml
,組態定義位於此處。
此策略檢查您的儲存庫中是否存在CODEOWNERS
檔案。
該策略的設定檔名為outside.yaml
,組態定義位於此處。
此策略檢查是否有任何外部協作者對儲存庫具有管理員(預設)或推送(可選)存取權限。只有組織成員才應具有此存取權限,否則不受信任的成員可以更改管理層級設定並提交惡意程式碼。
此策略的設定檔名為security.yaml
,設定定義位於此處。
此策略檢查儲存庫在SECURITY.md
中是否有安全性策略檔案且該檔案不為空。創建的問題將有一個指向 GitHub 選項卡的鏈接,可幫助您將安全性策略提交到儲存庫。
此策略的設定檔名為dangerous_workflow.yaml
,組態定義位於此處。
此策略檢查 GitHub Actions 工作流程設定檔 ( .github/workflows
) 中是否存在與已知危險行為相符的任何模式。有關此檢查的更多信息,請參閱 OpenSSF 記分卡文件。
此策略的設定檔名為scorecard.yaml
,設定定義位於此處。
此策略執行checks
配置中列出的任何記分卡檢查。運行的所有檢查的分數必須等於或高於threshold
設定。有關每項檢查的更多信息,請參閱 OpenSSF 記分卡文件。
此策略的設定檔名為actions.yaml
,設定定義位於此處。
此策略檢查每個儲存庫中的 GitHub Actions 工作流程設定檔 ( .github/workflows
)(以及在某些情況下運行的工作流程),以確保它們符合組織層級配置中定義的規則(例如require、deny )。
此策略的設定檔名為admin.yaml
,設定定義位於此處。
此策略檢查預設情況下所有儲存庫都必須有指定為管理員的使用者或群組。它允許您選擇配置是否允許使用者成為管理員(而不是團隊)。
請參閱此儲存庫作為正在使用的 Allstar 配置的範例。作為組織管理員,請考慮 README.md,其中包含有關如何在組織中使用 Allstar 的一些資訊。
預設情況下,組織級設定檔(例如上面的allstar.yaml
檔案)應位於.allstar
儲存庫中。如果此儲存庫不存在,則.github
儲存庫allstar
目錄將用作輔助位置。澄清一下,對於allstar.yaml
:
優先權 | 儲存庫 | 小路 |
---|---|---|
基本的 | .allstar | allstar.yaml |
中學 | .github | allstar/allstar.yaml |
對於各個策略的組織層級設定檔也是如此,如下所述。
Allstar 也會在組織的.allstar
儲存庫(位於與儲存庫同名的目錄下)中尋找儲存庫層級的策略配置。無論是否停用“repo override”,都會使用此配置。
例如,Allstar 將按以下順序尋找給定儲存庫myapp
的策略配置:
儲存庫 | 小路 | 狀態 |
---|---|---|
myapp | .allstar/branch_protection.yaml | 當允許“回購覆蓋”時。 |
.allstar | myapp/branch_protection.yaml | 所有的時間。 |
.allstar | branch_protection.yaml | 所有的時間。 |
.github | allstar/myapp/branch_protection.yaml | 如果.allstar 儲存庫不存在。 |
.github | allstar/branch_protection.yaml | 如果.allstar 儲存庫不存在。 |
對於組織層級的 Allstar 和策略設定文件,您可以指定欄位baseConfig
以指定包含基本 Allstar 配置的另一個儲存庫。最好用一個例子來解釋這一點。
假設您有多個 GitHub 組織,但想要維護單一 Allstar 配置。您的主要組織是“acme”,儲存庫acme/.allstar
包含allstar.yaml
:
optConfig :
optOutStrategy : true
issueLabel : allstar-acme
issueFooter : Issue created by Acme security team.
您還有一個名為「acme-sat」的衛星 GitHub 組織。您想要重複使用主配置,但透過在某些儲存庫上停用 Allstar 來套用一些變更。儲存庫acme-sat/.allstar
包含allstar.yaml
:
baseConfig : acme/.allstar
optConfig :
optOutRepos :
- acmesat-one
- acmesat-two
這將使用acme/.allstar
中的所有配置作為基本配置,但隨後將目前檔案中的任何變更套用到基本配置之上。所應用的方法被描述為 JSON 合併補丁。 baseConfig
必須是 GitHub <org>/<repository>
。
請參閱 CONTRIBUTING.md