この記事は、GitHub Advanced Security の大規模な導入に関するシリーズの一部です。 このシリーズの以前の記事については、「フェーズ 1: ロールアウトの戦略とゴールの調整」を参照してく� さい。
code scanning の有効化の準備
Code scanning は、開発者が GitHub リポジトリ内のコードを分析して、セキュリティの脆弱性とコーディングエラーを見つけることができる機能です。 分析によって特定されたすべての問題はGitHub Enterprise Serverに表示されます。 詳しい情� �については、「code scanning について」を参照してく� さい。
数百のリポジトリに code scanning をロールアウトすることは、特に非効率に行われる� �合、困難なことがあります。 以下の手� �に従うと、効率的なロールアウトとその成功が保証されます。 準備の一環として、チー� と協力し、リポジトリに関するデータの収集を自動化し、code scanning を有効にします。
code scanning のためのチー� の準備
最初に、code scanning を使用するためのチー� の準備を行います。 code scanning を使用するチー� が多いほど、修復プランを推進してロールアウトの進行状況を監視するためのより多くのデータが得られます。 このフェーズでは、API の活用と内部有効化イベントの実行を重点的に取り上げます。
主な目的として、できるかぎり多くのチー� が code scanning を使用できるように準備する必要があります。 修復を適切に行うことをチー� に促すこともできますが、このフェーズでは、イシューの修復よりも code scanning の有効化と使用を優先することをお勧めします。
リポジトリに関する情� �の収集
GitHub Enterprise Server の 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) | 4212 | org/repo org/repo |
Python | 2012 | org/repo org/repo |
Go | 983 | org/repo org/repo |
Java | 412 | org/repo org/repo |
Swift | 111 | org/repo org/repo |
Kotlin | 82 | org/repo org/repo |
C | 12 | org/repo org/repo |
GitHub Advanced Security で現在サポートされていない言語をこのテーブルから除外できます。
複数の言語を使用するリポジトリがある� �合は、次の表示に示すように、GraphQL 結果を書式設定できます。 サポートされていない言語を除外しますが、少なくとも 1 つのサポートされている言語を使用するリポジトリはすべて保持します。 これらのリポジトリで code scanning を有効にすることができ、サポートされているすべての言語がスキャンされます。
言語 | リポジトリの数 | リポジトリ名 |
---|---|---|
JavaScript/Python/Go | 16 | org/repo org/repo |
Rust/TypeScript/Python | 12 | org/repo org/repo |
どのリポジトリでどの言語が使用されているかを把握すると、フェーズ 3 でパイロット プログラ� の候補リポジトリを識別し、フェーズ 5 で、すべてのリポジトリで一度に 1 つの言語に対して code scanning を有効にするための準備を行うのに役立ちます。
アプライアンスに対する code scanning の有効化
パイロット プログラ� と、Enterprise 全体での code scanning の有効化に進む前に、まず、アプライアンスに対して code scanning を有効にする必要があります。 詳しい情� �については、「アプライアンスの code scanning を構成する」を参照してく� さい。
secret scanning を有効にするための準備
プロジェクトで外部サービスと通信する� �合、認証にトークンまたは秘密キーを使用できます。 リポジトリにシークレットをチェックインする� �合、リポジトリへの読み取りアクセスを持つすべてのユーザがシークレットを使用して、自分の権限で外部サービスにアクセスできます。 Secret scanning では、GitHub リポジトリ内に存在するすべてのブランチで Git 履歴全体をスキャンしてシークレットを確認し、プッシュにシークレットが含まれていることを警告するか。 詳細については、「シークレット スキャンについて」を参照してく� さい。
secret scanning を有効にする際の考慮事� �
GitHub Enterprise Server の 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 では、多数の既定のパターンが検出されますが、インフラストラクチャ固有のシークレット形式や、GitHub Enterprise Server の secret scanning では現在検出されないがインテグレーターによって使用されるシークレット形式などのカスタ� パターンを検出するように構成することもできます。 パートナー パターンでサポートされているシークレットの詳しい情� �については、「Secret scanning patterns」を参照してく� さい。
リポジトリを監査し、セキュリティ チー� および開発者チー� に説明する際には、後で secret scanning のカスタ� パターンを構成するために使用するシークレットの種類の一覧を作成します。 詳細については、シークレット スキャンのカスタ� パターンの定義に関する記事を参照してく� さい。
このシリーズの次の記事については、「フェーズ 3: パイロット プログラ� 」を参照してく� さい。