Skip to main content

 

ソースコード管理プラットフォーム設定のベストプラクティス

(このページは Source Code Management Platform Configuration Best Practices の参考訳です。)


by the Open Source Security Foundation (OpenSSF) Best Practices Working Group, 2023-08-29


1. はじめに

共同ソースコード管理プラットフォーム(GitHubやGitLabなど)は、ソースコードの保存、管理、バージョン管理、開発者コミュニティとの共同作業のための中央リポジトリを提供し、現代のソフトウェア開発において重要な役割を果たしています。しかし、適切に設定されていなければ、潜在的なセキュリティ リスクにもなりかねません。このガイドでは、ユーザー認証、アクセス制御、パーミッション、モニタリング、ロギングなどのトピックを取り上げながら、これらのプラットフォームのセキュリティを確保するためのベストプラクティスを探ります。

2. 対象者

このガイドブックは以下の方を対象に書かれています。

  • GitHubリポジトリやGitLabプロジェクトのセキュリティ体制を改善したいメンテナー
  • GitHub組織やGitLabグループのセキュリティ体制を改善したいオーナー
  • 複数のGitHub組織やGitLabグループを担当するOpen Source Program Office (OSPO)(または同様の役割を担うチーム)。
  • これらのプラットフォーム上の資産を管理する業務の一環として、ポリシーの適用を課せられている運用チーム。
  • GitHub/GitLabの企業管理者で、SCM企業のセキュリティ体制を改善したいと考えている方。

3. ツール

以下は、ソースコード リポジトリのレビューを支援するために使用できる可能性のあるツールの一例です。

3.1. Allstar – https://github.com/ossf/allstar

OpenSSFのオープンソース プロジェクトで、GitHub組織の「リポジトリ レベル」の設定ミスをスキャンします。Allstarは、この文書で提案されている「リポジトリ レベル」のポリシーのサブセットを検出します。組織内のすべてのリポジトリ、あるいはそのサブセットをスキャンするように設定することができ、以下のSCMでサポートされています。

  • GitHub クラウド

3.2. Legitify – https://github.com/Legit-Labs/legitify

Legit Securityのオープンソース プロジェクトで、SCM資産をスキャンして、誤った設定、セキュリティ上の問題、およびフォローされていないベストプラクティスを見つけます。Legitifyは、この文書で提案されているすべてのポリシーを検出し、以下のSCMをサポートします。

  • GitHubクラウド
  • GitHubエンタープライズ サーバー
  • GitLabクラウド
  • GitLabサーバー

3.3. Scorecard – https://github.com/ossf/scorecard

OpenSSFのオープンソース プロジェクトで、リポジトリにセキュリティ上の問題がないかスキャンし、セキュリティの健全性の指標を提供します。Scorecardは、この文書で提案されている「リポジトリ レベル」のポリシーの多くを検出し、以下のSCMをサポートしています。

  • GitHubクラウド
  • GitHubエンタープライズ サーバー
  • GitLabクラウド
  • GitLabサーバー

4. 推奨事項

以下の各具体的な推奨事項は、適切なアイコンとテキストを使用しGitHubかGitLabのどちらかに適用可能であることを示し、もし詳細についてのベストプラクティスがあればそのリンクを示しています。

  • (Applies to: GitHub GitHub GitLab GitLab)
    • または
  • GitHub GitHub GitLab GitLab

GitHubまたはGitLabにのみ適用される推奨事項については、以下のページのいずれかをご覧ください。 

4.1 継続的インテグレーション/継続的デリバリー

  • プルリクエストの承認をワークフローで許可すべきではない GitHub GitHub
  • GitHub Actionsは特定のレポジトリに限定すべきである  GitHub GitHub
  • GitHub Actionsは検証済みまたは明確に信頼できるアクションに限定すべきである  GitHub GitHub
  • デフォルトのワークフローのトークンのパーミッションは読み取り専用であるべきである  GitHub GitHub
  • ランナー グループはプライベート リポジトリに限定されるべきである GitHub GitHub
  • ランナー グループは特定のリポジトリに限定すべきである GitHub GitHub

4.2 企業での利用

  • 企業では二要素認証の利用を推奨する  GitHub GitHub 
  • 企業ではメンバーに公開リポジトリの作成を許可すべきではない  GitHub GitHub
  • 企業ではメンバーに外部の共同作業者の招待を許可すべきではない  GitHub GitHub
  • 企業ではリポジトリの公開範囲をメンバーに変更させるべきではない GitHub GitHub
  • 企業ではシングルサインオンの利用を推奨する  GitHub GitHub
  • 企業では社内または非公開リポジトリのフォークをメンバーに許可すべきではない GitHub GitHub
  • 二要素認証はグループで強制されるべきである GitLab GitLab
  • 外部名前空間へのリポジトリのフォークは無効にすべきである GitLab GitLab
  • グループはブランチ保護を強制すべきである GitLab GitLab
  • WebフックはSSLを使うように設定すべきである GitLab GitLab

4.3 メンバー、アクセスコントロール、パーミッション

  • 組織のオーナーは3人以下とするべきである GitHub GitHub
  • 組織の管理者は過去6ヶ月に管理者としての活動実績が必要である GitHub GitHub
  • 組織メンバーは過去6ヶ月にメンバーとしての活動実績が必要である GitHub GitHub
  • 共同作業者へ二要素認証を有効にすべきである GitLab GitLab
  • 外部共同作業者へ二要素認証を有効にすべきである GitLab GitLab
  • 管理者は過去6ヶ月に管理者としての活動実績が必要である GitLab GitLab

4.4 リポジトリ

  • リポジトリは少なくとも3ヶ月に1回は更新されるべきである GitHub GitHub
  • プル リクエストの承認をワークフローで許可すべきではない GitHub GitHub
  • デフォルト ブランチはコードレビューが必要である GitHub GitHub GitLab GitLab
  • デフォルトのワークフローのトークンのパーミッションは読み取り専用であるべきである GitHub GitHub
  • デフォルト ブランチは保護されるべきである GitHub GitHub GitLab GitLab
  • デフォルト ブランチは強制プッシュを許可すべきではない GitHub GitHub GitLab GitLab
  • デフォルト ブランチは、少なくとも2人のレビュアーによるコードレビューが必要である GitHub GitHub GitLab GitLab
  • 脆弱性アラートは有効にすべき GitHub GitHub
  • OpenSSF Scorecardのスコアは7以上が望ましい GitHub GitHub
  • GitHub Advanced Security – リポジトリに対して依存関係のレビューを有効にする必要がある GitHub GitHub
  • デフォルト ブランチの削除保護機能は有効にするべきである GitHub GitHub
  • デフォルト ブランチはリニア ヒストリーが必要である GitHub GitHub
  • デフォルト ブランチはマージ前にすべてのチェックを通過する必要がある GitHub GitHub
  • デフォルト ブランチはマージ前にブランチが最新であることを要求すべきである GitHub GitHub
  • リポジトリの管理者は3人以下にすべき GitHub GitHub
  • デフォルト ブランチはプッシュできる人を制限すべき GitHub GitHub
  • デフォルト ブランチはすべてのコミットに署名する必要がある GitHub GitHub GitLab GitLab
  • Webフックはシークレットを用いて設定すべき GitHub GitHub
  • WebフックはSSLを使うように設定すべきであるGitHub GitHub
  • デフォルト ブランチでは、マージ前にすべての会話を解決する必要がある GitHub GitHub
  • デフォルト ブランチは、レビューを却下できる人を制限すべき GitHub GitHub
  • デフォルト ブランチは、承認後の新しいコード変更を再承認する必要があるGitHub GitHub GitLab GitLab
  • デフォルト ブランチはコードレビューをコード所有者に限定すべき GitHub GitHub GitLab GitLab
  • このリポジトリではフォークを許可しない GitHub GitHub
  • プロジェクトは少なくとも3ヶ月に1回は更新されるべきである GitLab GitLab
  • リポジトリはレビュー依頼者が自分の依頼を承認できるようにすべきではない GitLab GitLab
  • マージ リクエストの作成者は承認者リストを上書きできるようにすべきではない GitLab GitLab
  • プロジェクトが成功するためにはすべてのパイプラインが必要である GitLab GitLab
  • フォークは許されるべきではない GitLab GitLab
  • プロジェクトはマージする前にすべての会話を解決する必要がある GitLab GitLab
  • リポジトリはコミッターの承認を許可すべきではない GitLab GitLab
  • SSLの妥当性チェックを行わない設定のWebフックについて GitLab GitLab
  • プロジェクトのオーナーは3人以下が望ましい GitLab GitLab

4.5 操作

一般的な推奨事項 

  • 組織管理は中央のアカウントに統合されるべきである。(Applies to: GitHub GitHub)
  • 組織のメンバー管理は関連するスタッフに限定すべきである。(Applies to: GitHub GitHub)
  • セキュリティの方針と手順を少なくとも年に一度は見直す。(Applies to: GitHub GitHub GitLab GitLab)
  • 明確なコミュニケーションとインシデント対応の計画を立てる。(Applies to: GitHub GitHub GitLab GitLab)
  • 定期的なセキュリティ監査と脆弱性評価を実施する。(Applies to: GitHub GitHub GitLab GitLab)
  • Insightsを使ってリポジトリや組織の活動を追跡する。(Applies to: GitHub GitHub)
  • APIをベースに構築されたツールを使ってタスクを自動化し特権の昇格を必要としないようにする。 (Applies to: GitHub GitHub GitLab GitLab)
  • リポジトリを公開する前に設定を見直す。(Applies to: GitHub GitHub GitLab GitLab)
  • リポジトリを組織に移管した後に設定を確認する。(Applies to: GitHub GitHub GitLab GitLab)
  • 継続的にコンプライアンスを保証するための自動化されたアラートとツールを提供する。(Applies to: GitHub GitHub GitLab GitLab)
  • リポジトリや組織の活動や変更を追跡するために監査ログをレビューする。(Applies to: GitHub GitHub)
  • グループのメンバー管理は、関連する組織のスタッフに限定すべきである。(Applies to: GitLab GitHub)
  • 監査イベントをレビューしてプロジェクトとグループのアクティビティと変更を追跡する。 (Applies to: GitLab GitHub)

具体的な要件に対する推奨事項 

  • 組織のために二要素認証を導入すべき GitHub GitHub
  • 組織はシングルサインオンを使うべき GitHub GitHub
  • デフォルトのメンバー権限は制限されるべきである GitHub GitHub
  • 管理者だけが公開リポジトリを作成できるようにすべきである GitHub GitHub
  • WebフックはSSLを使うように設定すべきである GitHub GitHub GitLab GitLab
  • Webフックはシークレットを用いて設定すべき GitHub GitHub
  • 組織またはリポジトリ レベルでセキュリティ アラートと脆弱性スキャンを設定する。(Applies to: GitHub GitHub)
  • GitHub Advanced Security機能をプライベート リポジトリと内部リポジトリで有効にする。(Applies to: GitHub GitHub)
  • 二要素認証はグループで強制されるべきである GitLab GitLab
  • グループはシングルサインオンを使用するべきである (Applies to: GitLab GitLab)
  • 管理者だけが公開プロジェクトとグループを作成できるようにする。(Applies to: GitLab GitLab)

5. 謝辞

このガイダンスは以下のメンバーにご協力いただきました。

翻訳協力:松本央