設定您的 GitHub 儲存庫

Git Repos and Issue Tracking 工具整合以 Github 為基礎,Github 是 Git 倉庫 (repos) 的網頁式託管服務。 您可以同時具有儲存庫的本端及遠端副本。 如需瞭解更多資訊,請參閱 Git Repos and Issue Tracking{: external}。

分支保護原則會施行安全、協同作業,並協助確保您的團隊遵循程式碼品質和變更管理標準。 本主題協助您設定及管理分支原則。 DevSecOps 需要您配置您的分支保護規則GitHub儲存庫。

GitHub 現在支援定義分支保護的規則集- 一種在儲存庫層級定義保護和策略的更細粒度和靈活的機制。 如需詳細資訊,請參閱「關於規則集

分公司保護的好處

  • 改良的程式碼品質和協同作業: 透過分支保護來要求取回要求和核准,可加強程式碼品質和協同作業。 這可確保程式碼一致性及符合團隊的編碼標準。 變更會進行檢閱,並協助及早捕捉錯誤和錯誤,以產生更可靠且可維護的程式碼。

  • 提高變更的可見性: 要求取回要求可提高程式碼變更的可見性。 此步驟可簡化追蹤修改及識別潛在問題。

  • 確保程式碼完整性: 取回要求狀態-在可以合併取回要求之前,針對預先定義的標準和 linters 執行自動化測試,以驗證程式碼。 此步驟透過在開發週期早期捕捉錯誤及其他問題來維護程式碼完整性。

規則集的優點

  • 細緻的目標定位:使用強大的 fnmatch 模式 (例如 release/**、refs/tags/v*),將規則套用至分支和標籤

  • 集中化管理:從單一介面設定和管理所有分支及標籤保護。 GitHub UI 和 API 提供明確的規則關聯和執行細節,以提高透明度。

  • 更高的彈性:與傳統的分支保護(每個分支只允許一個規則)不同,規則集可定義多個分層規則集,使用模式適用於多個分支。 單一分支可擁有多個適用的規則集,允許精細的控制、跨分支的可重用政策,以及更好地與複雜的工作流程協調。

在 GitHub

若要在 GitHub 中為您的儲存庫設定規則集,請遵循下列步驟:

存取規則集設定

  1. 導覽至 GitHub上儲存庫的 設定 標籤。
  2. 在左側欄的 Rules 下按一下 Rulesets,以存取 Ruleset 設定頁。
  3. 點擊綠色按鈕 “New Branch RuleSet
  4. 新增定義規則集所需的資訊,然後按一下建立

GitHub 儲存庫規則集 儲存庫規則集
GitHub

在規則集中新增保護規則

按一下綠色按鈕「新增分支規則集」後,會出現填寫規則集詳細資料的頁面。

建立規則集
建立規則集

  1. 命名您的 RuleSet,並從啟用狀態下拉選單中選擇啟用/停用/評估規則集

命名並啟用規則集
命名並啟用規則集

  1. 按一下新增目標,設定目標分支。 選擇「包括、「排除****」、「預設」或「全部」,以設定分支目標條件。 GitHub 支援 fnmatch 語法,用於基於模式的目標定位。

選擇目標分支
選擇目標分支

  1. 按一下新增旁路,在旁路清單下設定旁路權限。 您可以新增可以繞過檢查的所需角色。 您可以將清單留空(這等同於在傳統的分支保護設定中啟用不允許繞過這些設定 )。

新增旁路演員
新增旁路演員

  1. 啟用分支規則下的合併前需要拉取請求選項。

  2. 啟用 需要核准 選項,並將 在合併之前需要核准的數目 設為至少 1 或您團隊中需要核准的數目。

  3. 啟用 推送新確定時解除舊取回要求核准 選項,以檢閱所有最新變更,然後才能將它合併至另一個分支。

新增分支規則
新增分支規則

限制

目前,bypass actor 清單只能從儲存庫層級的規則集中擷取。 如果規則集定義在組織層級,則根據標準權限,無法從這些規則集中擷取這些資訊。

若要從組織層級的規則集擷取旁路演員清單,請檢閱所需的存取權限,並授予執行管道的功能 ID/GitHub 帳戶提升權限(組織的所有者存取權限 )。 這是由於 GitHub's 權限模型,它限制了對組織層級規則集的可見性, 在沒有適當授權的情況下繞過參與者元數據,以防止敏感資訊的洩露。

如需詳細資訊,請參閱 GitHub 有關 組織規則集和旁路作用者的官方文件。

設定規則集的狀態檢查

  1. 啟用 Require status checks to pass before merging 選項。

為了能夠將它們設為必要的狀態檢查,首先您需要事先觸發 PR/CI 管線 (使用者介面上只會列出現有的狀態檢查)。

啟用 Require status checks to pass before merging 選項之後,您需要配置在合併取回要求之前必須通過的特定狀態檢查。

  1. 在可用的狀態檢查清單中,啟用下列檢查選項:
  • tekton/code-branch-protection
  • tekton/code-cis-check
  • tekton/code-detect-secrets
  • tekton/code-unit-tests
  • tekton/code-vulnerability-scan

這些檢查是管道中預設的預期 pull request 狀態檢查。

狀態檢查
狀態檢查

新增所有預設規則集(完整設定)

此 CURL 指令會設定預設所需的狀態檢查和拉取請求審查設定。

curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/rulesets" \
    -XPUT -d '{
  "name": "Branch Protection Equivalent Ruleset",
  "target": "branch",
  "enforcement": "active",
  "bypass_actors": [], // as the list is empty no one can bypass which is equivalent to enforce_admins: true with no restriction
  "conditions": {
    "ref_name": {
      "include": ["refs/heads/master"],
      "exclude": []
    }
  },
  "rules": [
    {
      "type": "required_status_checks",
      "parameters": {
        "strict_required_status_checks_policy": true,
        "required_status_checks": [
          {
            "context": "tekton/code-unit-tests"
          },
          {
            "context": "tekton/code-branch-protection"
          },
          {
            "context": "tekton/code-cis-check"
          },
          {
            "context": "tekton/code-vulnerability-scan"
          },
          {
            "context": "tekton/code-detect-secrets"
          }
        ]
      }
    },
    {
      "type": "pull_request",
      "parameters": {
        "required_approving_review_count": 1,
        "dismiss_stale_reviews_on_push": true,
        "require_code_owner_review": false,
        "require_last_push_approval": false,
        "required_review_thread_resolution": false
      }
    }
  ]
}'

在 GitHub 中配置分支保護規則

若要在 GitHub 中配置儲存庫的分支保護規則,請遵循下列步驟:

存取分支保護設定

  1. 導覽至 GitHub上儲存庫的 設定 標籤。
  2. 在左側資訊看板中,按一下 分支 以存取分支設定頁面。
  3. 向下捲動至 分支保護規則 區段。
  4. 找出您要配置的分支 (通常是「主要」分支)。
  5. 選取分支名稱旁的 編輯 按鈕,以修改其保護規則。

GitHub儲存庫設定
GitHub儲存庫設定

新增分支保護規則

如果未設定現有規則,請按一下 新增規則 按鈕,並在 **Branch name pattern** 欄位中輸入對應的分支名稱。 然後,繼續執行下列步驟:

  1. 啟用 合併之前需要取回要求 選項。
  2. 啟用 需要核准 選項,並將 在合併之前需要核准的數目 設為至少 1 或您團隊中需要核准的數目。
  3. 啟用 推送新確定時解除舊取回要求核准 選項,以檢閱所有最新變更,然後才能將它合併至另一個分支。

分支保護規則
分支保護規則

  1. 啟用選項 Do not allow bypassing the settings(不允許繞過設定 ),以防止擁有 bypass branch protections(繞過分支保護 )權限的管理員和自訂角色繞過所需的分支保護檢查。

分支保護規則
不允許繞過上述設定

目前,如果未啟用 Do not allow bypassing these settings 檢查,警告會浮現在日誌中。 在 3 月中旬強制進行檢查之前,它不會無法通過分支保護檢查。 請於三月中前啟用檢查功能,以防止管道故障。

「取回要求」必須 核准,然後才能將它們合併至主要分支。 此規則可確保變更會接受團隊成員的檢閱及審查,促進協同作業、程式碼品質及遵守專案標準。

配置狀態檢查

需要進行狀態檢查DevSecOps對程式碼執行一套全面的品質和安全措施。 這可確保程式碼變更在合併至受保護分支之前是安全且可靠的。 透過要求在合併之前通過狀態檢查,您可以防止中斷或未測試的程式碼部署至正式作業。

提交取回要求時,PR/CI 管線會自動觸發一系列測試、驗證及其他檢查,以驗證提議的變更。

只有在所有必要的狀態檢查都順利通過時,才會將取回要求視為符合合併至受保護分支的資格。

透過利用內部狀態檢查DevSecOps,在將變更合併到專案的受保護分支之前,您可以保持程式碼品質、遵守編碼標準並確保不存在漏洞或嚴重缺陷。

如需配置狀態檢查的相關資訊,請參閱 僅配置狀態檢查(狀態檢查配置) 一節,以取得參照實作。

  1. 啟用 Require status checks to pass before merging 選項。

為了能夠將它們設為必要的狀態檢查,首先您需要事先觸發 PR/CI 管線 (使用者介面上只會列出現有的狀態檢查)。

啟用 Require status checks to pass before merging 選項之後,您需要配置在合併取回要求之前必須通過的特定狀態檢查。

  1. 在可用的狀態檢查清單中,啟用下列檢查選項:
  • tekton/code-branch-protection
  • tekton/code-cis-check
  • tekton/code-detect-secrets
  • tekton/code-unit-tests
  • tekton/code-vulnerability-scan

狀態檢查
狀態檢查

在合併取回要求之前,所顯示的狀態檢查必須通過。

這些檢查是管道中預設的預期 pull request 狀態檢查。

設定自訂的相符性檢查清單

您也可以帶入您自己的狀態檢查清單,以由管線進行驗證。 若要達到此目的,請先在儲存庫中設定您的必要狀態檢查清單,同時將 branch-protection-rules-path 值設定為包含相同清單狀態檢查 (相對於應用程式儲存庫) 的 JSON 檔案的路徑。

|branch-protection-rules-path |text | 設定 JSON 檔案的路徑,該檔案包含相對於整合應用程式儲存庫的必要相符性檢查自訂清單。 | 選用 |

JSON 檔案採用此格式

[{
  "type": "branch-protection",
  "name": "code-review",
  "params": {
    "checks": [
      "tekton/code-branch-protection",
      "tekton/code-unit-tests",
      "tekton/code-cis-check",
      "tekton/code-vulnerability-scan",
      "tekton/code-detect-secrets"
    ]
  }
}]

筆記:DevSecOps預設情況下,分支保護檢查的結果將取決於具有以下條件的狀態檢查的結果:tekton/ 字首。

設定相符性檢查的自訂字首

如果您想更改 tekton 中其他內容的前綴GitHub,你應該設定一個值 branch-protection-status-check-prefix 管道中的環境屬性。

|branch-protection-status-check-prefix |text | 分支保護狀態檢查的字首文字 (預設為 tekton) | 選用 |

配置分支保護設定之後,除非符合必要條件,否則任何將取回要求合併至受保護分支的嘗試都會被拒絕。

選用設定

除了上述設定之外,您還可以選擇為分支保護規則配置下列其他設定。 請注意,狀態檢查由DevSecOps不會驗證或強制執行這些設定。

  • 需要已簽署的確定: 這項設定需要簽署受保護分支的所有確定,以防止對程式碼進行惡意變更。

  • 需要線性歷程: 此設定要求受保護分支的所有確定都具有線性歷程。 這表示任何合併至受保護分支的取回要求都必須使用擠壓合併或重設基線合併。 嚴格線性確定歷程可協助團隊更輕鬆地反轉變更。

這些其他設定是選用的,可以根據您的特定需求和喜好設定來自訂。

透過 CURL 指令設定分支保護規則

新增所有分支保護規則 (完整配置)

在取代 $GH_TOKEN$OWNER$APP_API_URL $REPO$BRANCH 變數之後,也可以使用下列 curl 指令來設定分支保護規則。

curl -u ":$GH_TOKEN" $APP_API_URL/repos/$OWNER/$REPO/branches/$BRANCH/protection -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'

這個 CURL 指令會設定必要的狀態檢查和取回要求檢閱設定。

配置這些設定之後,除非至少有一位其他使用者核准取回要求,否則任何將取回要求合併至 $BRANCH 的嘗試都會被拒絕。

僅配置狀態檢查 (狀態檢查配置)

如果您只想配置必要的狀態檢查,則可以使用下列 CURL 指令作為參照:

curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/branches/master/protection" \
    -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'

在我們的參照實作中,我們已提供 hello-compliance-app 儲存庫的範例配置,因此您可以使用它作為起點,並根據您的需求來自訂它。

遵循先前的範例,以確保程式碼品質及遵循儲存庫的安全措施。 為了確保發生這種情況,請配置必要的分支保護規則和狀態檢查。