Skip to main content

フェーズ 2: 大規模な有効化の準備

このフェーズでは、開発者の準備を行い、チームの準備を確実にするためにリポジトリに関するデータを収集し、パイロット プログラムと、code scanning および secret scanning のロールアウトに必要なすべてのものを用意します。

この記事は、GitHub Advanced Security の大規模な導入に関するシリーズの一部です。 このシリーズの以前の記事については、「フェーズ 1: ロールアウトの戦略とゴールの調整」を参照してください。

code scanning の有効化の準備

Code scanning は、開発者が GitHub リポジトリ内のコードを分析して、セキュリティの脆弱性とコーディングエラーを見つけることができる機能です。 分析によって特定されたすべての問題はGitHub AEに表示されます。 詳しい情報については、「code scanning について」を参照してください。

数百のリポジトリに code scanning をロールアウトすることは、特に非効率に行われる場合、困難なことがあります。 以下の手順に従うと、効率的なロールアウトとその成功が保証されます。 準備の一環として、チームと協力し、リポジトリに関するデータの収集を自動化し、code scanning を有効にします。

code scanning のためのチームの準備

最初に、code scanning を使用するためのチームの準備を行います。 code scanning を使用するチームが多いほど、修復プランを推進してロールアウトの進行状況を監視するためのより多くのデータが得られます。 このフェーズでは、API の活用と内部有効化イベントの実行を重点的に取り上げます。

主な目的として、できるかぎり多くのチームが code scanning を使用できるように準備する必要があります。 修復を適切に行うことをチームに促すこともできますが、このフェーズでは、イシューの修復よりも code scanning の有効化と使用を優先することをお勧めします。

リポジトリに関する情報の収集

GitHub AE の GraphQL API を使用すると、リポジトリで使用されているさまざまなプログラミング言語に関する情報をプログラムで収集し、そのデータを使用して、同じ言語を使用するすべてのリポジトリで code scanning を有効にすることができます。

注: この記事で説明する GraphQL クエリを手動で実行せずにこのデータを収集するには、一般公開されているツールを使用できます。 詳しい情報については、"ghas-enablement ツール" リポジトリを参照してください。

Enterprise 内の複数の Organization に属するリポジトリから情報を収集する必要がある場合、次のクエリを使用して、Organization の名前を取得し、それをリポジトリ クエリにフィードすることができます。 OCTO-ENTERPRISE を自身の Enterprise 名に置き換えます。

query {
  enterprise(slug: "OCTO-ENTERPRISE") {
    organizations(first: 100) {
      totalCount
      nodes {
        name
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

Organization レベルで言語別にリポジトリを照合すると、どのリポジトリでどの言語が使用されているかを識別できます。 次のサンプル GraphQL クエリは、OCTO-ORG を Organization 名に置き換えて変更することができます。

query {
  organization(login: "OCTO-ORG") { 
    repositories(first: 100) {
      totalCount
      nodes {
        nameWithOwner
        languages(first: 100) {
          totalCount
          nodes {
            name
          }
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

GraphQL クエリの実行に関する詳しい情報については、「GraphQL での呼び出しの作成」を参照してください。

次に、データを GraphQL クエリから、テーブルなどの読み取り可能な形式に変換します。

言語リポジトリの数リポジトリ名
JavaScript (TypeScript)4212org/repo
org/repo
Python2012org/repo
org/repo
Go983org/repo
org/repo
Java412org/repo
org/repo
Swift111org/repo
org/repo
Kotlin82org/repo
org/repo
C12org/repo
org/repo

GitHub Advanced Security で現在サポートされていない言語をこのテーブルから除外できます。

複数の言語を使用するリポジトリがある場合は、次の表示に示すように、GraphQL 結果を書式設定できます。 サポートされていない言語を除外しますが、少なくとも 1 つのサポートされている言語を使用するリポジトリはすべて保持します。 これらのリポジトリで code scanning を有効にすることができ、サポートされているすべての言語がスキャンされます。

言語リポジトリの数リポジトリ名
JavaScript/Python/Go16org/repo
org/repo
Rust/TypeScript/Python12org/repo
org/repo

どのリポジトリでどの言語が使用されているかを把握すると、フェーズ 3 でパイロット プログラムの候補リポジトリを識別し、フェーズ 5 で、すべてのリポジトリで一度に 1 つの言語に対して code scanning を有効にするための準備を行うのに役立ちます。

secret scanning を有効にするための準備

プロジェクトで外部サービスと通信する場合、認証にトークンまたは秘密キーを使用できます。 リポジトリにシークレットをチェックインする場合、リポジトリへの読み取りアクセスを持つすべてのユーザがシークレットを使用して、自分の権限で外部サービスにアクセスできます。 Secret scanning では、GitHub リポジトリ内に存在するすべてのブランチで Git 履歴全体をスキャンしてシークレットを確認し、プッシュにシークレットが含まれていることを警告するか。 詳細については、「シークレット スキャンについて」を参照してください。

secret scanning を有効にする際の考慮事項

GitHub AE の secret scanning 機能は、プログラミング言語ごと、またはリポジトリごとに個別の構成を必要とせず、全体的に少ない構成で開始できるため、code scanning とは多少異なります。 つまり、組織レベルで secret scanning を有効にするのは簡単ですが、組織レベルで [すべて有効にする ] をクリックし、 [新しいリポジトリごとに secret scanning を自動的に有効にする] オプションをオンにすると、次のようなダウンストリーム効果が得られます。

  • ライセンスの消費
    すべてのリポジトリに対して secret scanning を有効にすると、code scanning を使用するユーザーがいない場合でもすべてのライセンスが消費されます。 Organization 内のアクティブな開発者の数を増やす予定がない限り、これは問題ありません。 アクティブな開発者の数が今後数か月間に増加する可能性がある場合は、ライセンス制限を超え、新しく作成されたリポジトリで GitHub Advanced Security を使用できなくなる可能性があります。
  • 最初に大量のシークレットが検出される可能性がある
    大規模な Organization で secret scanning を有効にする場合、多数のシークレットが検出されたときに備えて準備を行う必要があります。 場合によっては、これは組織に衝撃を与え、警告が発生します。 一度にすべてのリポジトリで secret scanning を有効にする場合は、Organization 全体での複数のアラートに対応する方法を計画します。

Secret scanning は、個々のリポジトリに対して有効にすることができます。 詳細については、「リポジトリの secret scanning の構成」を参照してください。 また、前述のとおり、Secret scanning は、Organization 内のすべてのリポジトリに対して有効にすることもできます。 すべてのリポジトリに対する有効化の詳しい情報については、「Organization のセキュリティおよび分析の設定の管理」を参照してください。

secret scanning のカスタム パターン

注: secret scanning のカスタム パターンは現在、ベータ版であり、変更される可能性があります。

Secret scanning では、多数の既定のパターンが検出されますが、インフラストラクチャ固有のシークレット形式や、GitHub AE の secret scanning では現在検出されないがインテグレーターによって使用されるシークレット形式などのカスタム パターンを検出するように構成することもできます。 パートナー パターンでサポートされているシークレットの詳しい情報については、「Secret scanning patterns」を参照してください。

リポジトリを監査し、セキュリティ チームおよび開発者チームに説明する際には、後で secret scanning のカスタム パターンを構成するために使用するシークレットの種類の一覧を作成します。 詳細については、シークレット スキャンのカスタム パターンの定義に関する記事を参照してください。

このシリーズの次の記事については、「フェーズ 3: パイロット プログラム」を参照してください。