GitHub リポジトリの設定

Git Repos and Issue Tracking ツールの統合は、 Git リポジトリ(repositories)のウェブベースのホスティングサービスである Github をベースにしている。 リポジトリーのローカルとリモートの両方のコピーを持つことができます。 詳しくは Git Repos and Issue Tracking{: external} をご覧ください。

ブランチ保護ポリシーは、セキュリティーとコラボレーションを実施し、チームがコード品質と変更管理の標準に確実に準拠するようにします。 このトピックは、ブランチ・ポリシーの設定および管理に役立ちます。 DevSecOps ブランチ保護ルールを設定する必要がありますGitHubリポジトリ。

GitHub ブランチ保護用のルールセットの定義がサポートされました。リポジトリレベルで保護とポリシーを定義する、より詳細で柔軟なメカニズムです。 詳しくは ルールセットについてをご覧ください

支店保護の利点

  • コードの品質とコラボレーションの向上: ブランチ保護によるプル要求と承認が必要なため、コードの品質とコラボレーションが向上します。 これにより、コードの一貫性が確保され、チームのコーディング標準に準拠することが保証されます。 変更はレビューされ、早期にバグやエラーをキャッチするのに役立ちます。その結果、コードの信頼性と保守性が向上します。

  • 変更の可視性の向上: プル要求を必要とすると、コード変更に対する可視性が向上します。 このステップにより、変更の追跡と潜在的な問題の特定が簡素化されます。

  • コード保全性の確保: プル要求の状況チェックは、プル要求をマージする前に、事前定義された標準およびリンターに対して自動テストを実行することによって、コードを検証します。 このステップでは、開発サイクルの早い段階でバグやその他の問題をキャッチすることにより、コードの整合性を維持します。

ルールセットの利点

  • きめ細かいターゲティング :強力なfnmatchパターン(release/**、refs/tags/v*など)を使って、ブランチやタグにルールを適用

  • 集中管理 :単一のインターフェイスから、すべてのブランチおよびタグプロテクションを設定および管理します。 GitHub UIと APIは、透明性を高めるために、明確なルールの関連付けと施行の詳細を提供します。

  • より高い柔軟性 :従来のブランチプロテクション(ブランチごとに1つのルールしか使用できない)とは異なり、ルールセットでは、パターンを使用して複数のブランチに適用できる複数のレイヤードルールセットを定義できます。 1つのブランチに複数のルールセットを適用できるため、きめ細かな制御が可能になり、ブランチ間でポリシーを再利用でき、複雑なワークフローとの整合性が向上します。

ルールセットの設定 GitHub

GitHub でリポジトリ用のルールセットを設定するには、以下の手順に従います:

ルールセット設定へのアクセス

  1. GitHubでリポジトリーの 「設定」 タブにナビゲートします。
  2. 左サイドバーの 「ルール」の下にある 「ルールセット 」をクリックして、ルールセット設定ページにアクセスします。
  3. 緑色のボタン 「新しいブランチ RuleSet をクリックします
  4. ルールセットを定義するために必要な情報を追加し、[ Create] をクリックします。

GitHub repository ルールセット repository ルールセット
GitHub

ルールセットに保護ルールを追加する

緑色のボタン「 新規ブランチルールセット 」をクリックすると、ルールセットの詳細を入力するページが表示されます。

ルールセットの作成
ルールセットの作成

  1. RuleSet に名前を付け、 有効化ステータスのドロップダウンから選択して、ルールセットを有効化/無効化/評価します

ルールセットの名前と有効化
ルールセットの名前と有効化

  1. Add targetをクリックして Targetブランチを設定します。 Include**、Exclude****、Default** または Allを選択して、ブランチのターゲット基準を設定します。 GitHub は、パターンベースのターゲティングのための fnmatch 構文をサポートしています。

対象支店を選択
対象支店を選択

  1. バイパスの追加]をクリックして、 [バイパス]リストの下にある[バイパスの許可]を設定します。 チェックを回避できる必要なロールを追加することができます。 リストを空のままにすることもできます(これは、従来のBranch保護設定で [これらの設定のバイパスを許可しない] を有効にするのと同じです)。

迂回アクターの追加
迂回アクターの追加

  1. ブランチルールでマージする前にプルリクエストを要求するオプションを有効にしてください。

  2. 「承認が必要」 オプションを有効にして、 「マージ前に必要な承認の数」1 以上に設定するか、チーム内で必要な承認の数に設定します。

  3. 「新規コミットがプッシュされたときに失効したプル要求の承認を破棄する」 オプションを有効にして、最新のすべての変更を確認してから別のブランチにマージできるようにします。

ブランチ・ルールの追加
ブランチ・ルールの追加

制限

現在、 バイパスアクターリストは リポジトリレベルのルールセットからのみ取得できます。 ルールセットが組織レベルで定義されている場合、標準的な権限では、これらのルールセットからこの情報を取り出すことはできない。

組織レベルのルールセットからバイパスのアクター リストを取得するには、必要なアクセス権を確認し、パイプラインを実行している Functional ID/GitHub アカウントに昇格権限 (組織の所有者アクセス権 )を付与してください。 これは、機密情報の漏洩を防ぐために適切な承認なしに組織レベルのルールセットバイパスアクターのメタデータへの可視性を制限しているGitHub's 権限モデルによるものです。

詳細については、 GitHub の 組織ルールセットとバイパスアクターに関する公式文書を参照のこと。

ルールセットのステータスチェックの設定

  1. Require status checks to pass before merging オプションを有効にします。

必要なステータス・チェックとして設定できるようにするには、まず、PR/CI パイプラインを事前にトリガーする必要があります (既存のステータス・チェックのみが UI にリストされます)。

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

これらのチェックは、パイプラインで期待されるデフォルトのプルリクエストステータスチェックです。

ステータスチェック
ステータスチェック

すべてのデフォルトルールセットの追加(完全な設定)

この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 these settings の確認が有効になっていない場合、警告がログに記録されます。 3月中旬までに検査が義務化されるまでは、支店保護の検査に不合格になることはないだろう。 パイプラインの故障を防ぐため、3月中旬までにチェックを有効にしてください。

Pull Requests は、マスター・ブランチにマージする前に承認する 必要があります。 このルールにより、チーム・メンバーによる変更のレビューと精査が確実に行われ、コラボレーション、コード品質、およびプロジェクト標準への準拠が促進されます。

ステータス検査の構成

ステータスチェックは、DevSecOpsコードに対して包括的な品質およびセキュリティ対策を実施します。 これにより、コード変更は、保護されたブランチにマージされる前に、安全で信頼できるものになります。 マージの前に状況検査に合格するように要求することにより、破損したコードやテストされていないコードが実動にデプロイされないようにすることができます。

プル要求が送信されると、PR/CI パイプラインは、一連のテスト、検証、およびその他のチェックを自動的にトリガーして、提案された変更を検証します。

必要なすべての状況検査が正常に合格した場合にのみ、プル要求は保護されたブランチへのマージに適格であると見なされます。

ステータスチェックを活用することでDevSecOps,プロジェクトの保護されたブランチに変更を組み込む前に、コードの品質を維持し、コーディング標準に準拠し、脆弱性や重大な欠陥がないことを確認できます。

状況検査の構成について詳しくは、参照実装の「 状況検査のみの構成(状況検査構成) 」セクションを参照してください。

  1. Require status checks to pass before merging オプションを有効にします。

必要なステータス・チェックとして設定できるようにするには、まず、PR/CI パイプラインを事前にトリガーする必要があります (既存のステータス・チェックのみが UI にリストされます)。

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

ステータスチェック
ステータスチェック

プル要求をマージする前に、表示されている状況検査に合格する必要があります。

これらのチェックは、パイプラインで期待されるデフォルトのプルリクエストステータスチェックです。

コンプライアンス検査のカスタマイズ・リストの設定

また、パイプラインによって検証される状況チェックの独自のリストを取り込むこともできます。 これを実現するには、まず、必要な状況検査のリストをリポジトリーに設定します。また、 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これらの設定は検証も強制もされません。

  • 署名付きコミットが必要: この設定では、保護されたブランチへのすべてのコミットが署名されている必要があり、コードに悪意のある変更が加えられないようにします。

  • 線形履歴が必要: この設定では、保護されたブランチへのすべてのコミットに線形履歴が必要です。 これは、保護されたブランチにマージされたプル要求はすべて、squash マージまたはリベース・マージを使用する必要があることを意味します。 厳密に線形のコミット履歴を使用すると、チームはより簡単に変更を元に戻すことができます。

これらの追加設定はオプションであり、特定の要件および設定に基づいてカスタマイズできます。

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 コマンドは、必要な状況検査とプル要求のレビュー設定の両方をセットアップします。

これらの設定が構成されると、プル要求が少なくとも 1 人の他のユーザーによって承認されていない限り、プル要求を $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 リポジトリーのサンプル構成が既に提供されているため、それを開始点として使用し、必要に応じてカスタマイズすることができます。

前の例に従って、コードの品質とリポジトリーのセキュリティー対策への準拠を確認します。 これを確実に行うには、必要なブランチ保護ルールおよび状況検査を構成します。