ソースコード管理プラットフォーム設定のベストプラクティス
(このページは 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のどちらかに適用可能であることを示し、もし詳細についてのベストプラクティスがあればそのリンクを示しています。
GitHubまたはGitLabにのみ適用される推奨事項については、以下のページのいずれかをご覧ください。
4.1 継続的インテグレーション/継続的デリバリー
- プルリクエストの承認をワークフローで許可すべきではない GitHub
- GitHub Actionsは特定のレポジトリに限定すべきである GitHub
- GitHub Actionsは検証済みまたは明確に信頼できるアクションに限定すべきである GitHub
- デフォルトのワークフローのトークンのパーミッションは読み取り専用であるべきである GitHub
- ランナー グループはプライベート リポジトリに限定されるべきである GitHub
- ランナー グループは特定のリポジトリに限定すべきである GitHub
4.2 企業での利用
- 企業では二要素認証の利用を推奨する GitHub
- 企業ではメンバーに公開リポジトリの作成を許可すべきではない GitHub
- 企業ではメンバーに外部の共同作業者の招待を許可すべきではない GitHub
- 企業ではリポジトリの公開範囲をメンバーに変更させるべきではない GitHub
- 企業ではシングルサインオンの利用を推奨する GitHub
- 企業では社内または非公開リポジトリのフォークをメンバーに許可すべきではない GitHub
- 二要素認証はグループで強制されるべきである GitLab
- 外部名前空間へのリポジトリのフォークは無効にすべきである GitLab
- グループはブランチ保護を強制すべきである GitLab
- WebフックはSSLを使うように設定すべきである GitLab
4.3 メンバー、アクセスコントロール、パーミッション
- 組織のオーナーは3人以下とするべきである GitHub
- 組織の管理者は過去6ヶ月に管理者としての活動実績が必要である GitHub
- 組織メンバーは過去6ヶ月にメンバーとしての活動実績が必要である GitHub
- 共同作業者へ二要素認証を有効にすべきである GitLab
- 外部共同作業者へ二要素認証を有効にすべきである GitLab
- 管理者は過去6ヶ月に管理者としての活動実績が必要である GitLab
4.4 リポジトリ
- リポジトリは少なくとも3ヶ月に1回は更新されるべきである GitHub
- プル リクエストの承認をワークフローで許可すべきではない GitHub
- デフォルト ブランチはコードレビューが必要である GitHub GitLab
- デフォルトのワークフローのトークンのパーミッションは読み取り専用であるべきである GitHub
- デフォルト ブランチは保護されるべきである GitHub GitLab
- デフォルト ブランチは強制プッシュを許可すべきではない GitHub GitLab
- デフォルト ブランチは、少なくとも2人のレビュアーによるコードレビューが必要である GitHub GitLab
- 脆弱性アラートは有効にすべき GitHub
- OpenSSF Scorecardのスコアは7以上が望ましい GitHub
- GitHub Advanced Security – リポジトリに対して依存関係のレビューを有効にする必要がある GitHub
- デフォルト ブランチの削除保護機能は有効にするべきである GitHub
- デフォルト ブランチはリニア ヒストリーが必要である GitHub
- デフォルト ブランチはマージ前にすべてのチェックを通過する必要がある GitHub
- デフォルト ブランチはマージ前にブランチが最新であることを要求すべきである GitHub
- リポジトリの管理者は3人以下にすべき GitHub
- デフォルト ブランチはプッシュできる人を制限すべき GitHub
- デフォルト ブランチはすべてのコミットに署名する必要がある GitHub GitLab
- Webフックはシークレットを用いて設定すべき GitHub
- WebフックはSSLを使うように設定すべきである GitHub
- デフォルト ブランチでは、マージ前にすべての会話を解決する必要がある GitHub
- デフォルト ブランチは、レビューを却下できる人を制限すべき GitHub
- デフォルト ブランチは、承認後の新しいコード変更を再承認する必要がある GitHub GitLab
- デフォルト ブランチはコードレビューをコード所有者に限定すべき GitHub GitLab
- このリポジトリではフォークを許可しない GitHub
- プロジェクトは少なくとも3ヶ月に1回は更新されるべきである GitLab
- リポジトリはレビュー依頼者が自分の依頼を承認できるようにすべきではない GitLab
- マージ リクエストの作成者は承認者リストを上書きできるようにすべきではない GitLab
- プロジェクトが成功するためにはすべてのパイプラインが必要である GitLab
- フォークは許されるべきではない GitLab
- プロジェクトはマージする前にすべての会話を解決する必要がある GitLab
- リポジトリはコミッターの承認を許可すべきではない GitLab
- SSLの妥当性チェックを行わない設定のWebフックについて GitLab
- プロジェクトのオーナーは3人以下が望ましい GitLab
4.5 操作
一般的な推奨事項
- 組織管理は中央のアカウントに統合されるべきである。(Applies to: GitHub)
- 組織のメンバー管理は関連するスタッフに限定すべきである。(Applies to: GitHub)
- セキュリティの方針と手順を少なくとも年に一度は見直す。(Applies to: GitHub GitLab)
- 明確なコミュニケーションとインシデント対応の計画を立てる。(Applies to: GitHub GitLab)
- 定期的なセキュリティ監査と脆弱性評価を実施する。(Applies to: GitHub GitLab)
- Insightsを使ってリポジトリや組織の活動を追跡する。(Applies to: GitHub)
- APIをベースに構築されたツールを使ってタスクを自動化し特権の昇格を必要としないようにする。 (Applies to: GitHub GitLab)
- リポジトリを公開する前に設定を見直す。(Applies to: GitHub GitLab)
- リポジトリを組織に移管した後に設定を確認する。(Applies to: GitHub GitLab)
- 継続的にコンプライアンスを保証するための自動化されたアラートとツールを提供する。(Applies to: GitHub GitLab)
- リポジトリや組織の活動や変更を追跡するために監査ログをレビューする。(Applies to: GitHub)
- グループのメンバー管理は、関連する組織のスタッフに限定すべきである。(Applies to: GitHub)
- 監査イベントをレビューしてプロジェクトとグループのアクティビティと変更を追跡する。 (Applies to: GitHub)
具体的な要件に対する推奨事項
- 組織のために二要素認証を導入すべき GitHub
- 組織はシングルサインオンを使うべき GitHub
- デフォルトのメンバー権限は制限されるべきである GitHub
- 管理者だけが公開リポジトリを作成できるようにすべきである GitHub
- WebフックはSSLを使うように設定すべきである GitHub GitLab
- Webフックはシークレットを用いて設定すべき GitHub
- 組織またはリポジトリ レベルでセキュリティ アラートと脆弱性スキャンを設定する。(Applies to: GitHub)
- GitHub Advanced Security機能をプライベート リポジトリと内部リポジトリで有効にする。(Applies to: GitHub)
- 二要素認証はグループで強制されるべきである GitLab
- グループはシングルサインオンを使用するべきである (Applies to: GitLab)
- 管理者だけが公開プロジェクトとグループを作成できるようにする。(Applies to: GitLab)
5. 謝辞
このガイダンスは以下のメンバーにご協力いただきました。
- Avishay Balter, Microsoft
- Chris de Almeida, IBM
- Christine Abernathy, F5 – project lead
- Daniel Appelquist, Snyk – project lead
- Noam Dotan, Legit Security – project lead
- David A. Wheeler, The Linux Foundation
翻訳協力:松本央