変更要約: GH-500 第4章を新規作成(アプローチと設定=CodeQL[純正・データフロー SAST]・サードパーティと SARIF 取り込み・Actions デフォルト/外部 CI 有効化・ワークフローテンプレート・matrix ビルド・スキャン頻度、分析と最適化=データフロー source→sink レビュー・重大度/カテゴリ(CWE)・アラートライフサイクルと autofix[要検証]・高度な構成/クエリスイート・スキャン失敗(ビルド/言語/リソース)と性能トラブルシュート)
4.1Code Security のアプローチと設定
ネイティブ(CodeQL)とサードパーティのコードスキャン、CodeQL とサードパーティ解析の選択、SARIF ファイルの取り込みと相互運用、そして GitHub Actions や外部 CI での有効化・ワークフローテンプレート・マトリックスビルド・スキャン頻度を理解します。
Code Security(製品名。コード解析の機能は code scanning/CodeQL)は、ソースコードを 静的解析(SAST) して脆弱性を見つけます。中核エンジンが CodeQL で、コードを データベース化 し、クエリ で「危険なデータの流れ(dataflow)」を探します。GitHub 純正の CodeQL に加え、サードパーティの解析ツール の結果も取り込めます。
4.1.1CodeQL とサードパーティ・SARIF
CodeQL は GitHub 純正で、多言語に対応し、強力な データフロー解析 で脆弱性を検出します。一方、組織が既存の サードパーティ SAST を使っている場合や、CodeQL 非対応の言語/観点を補いたい場合は、サードパーティツールの結果を取り込めます。その共通フォーマットが SARIF(Static Analysis Results Interchange Format) です。サードパーティツールが出力した SARIF を GitHub に アップロード すると、Code Scanning アラートとして 同じ UI で一元管理 できます。「CodeQL を使うか、サードパーティを SARIF で取り込むか」を要件で選びます。
4.1.2有効化 — Actions と外部 CI
Code Scanning は主に 2 通りで動かします。
①GitHub Actions のワークフロー(CodeQL のスターター/ワークフローテンプレート)で実行する方法——最も手軽で、デフォルトセットアップ なら数クリックで有効化できます。
②外部 CI システム で CodeQL CLI(や他ツール)を走らせ、結果(SARIF)をアップロードする方法。多言語リポでは マトリックスビルド で言語ごとに並列スキャンします。スキャン頻度 は、push/PR ごと・定期(schedule)など、コストと鮮度のバランスで設定します。
頻出:
①Code Security = CodeQL(純正・データフロー解析の SAST)。
②サードパーティ解析の結果は SARIF で取り込み、同じ UI で一元管理。
③有効化=GitHub Actions(デフォルトセットアップ/ワークフローテンプレート) か 外部 CI で CodeQL CLI→SARIF アップロード。
④多言語は matrix ビルドで並列、スキャン頻度は push/PR・定期で調整。
混同・注意:
①CodeQL(純正)とサードパーティ SAST は排他でなく、SARIF で共存できる。
②SARIF は「結果の交換フォーマット」であり解析エンジンそのものではない。
③デフォルトセットアップ(手軽)と高度セットアップ(ワークフロー YAML を編集)を取り違えない。
④多言語リポで言語指定を誤ると一部言語が未スキャンになる——matrix とビルド設定を確認。
4.1.3この節のまとめ
- Code Security=CodeQL(純正・データフロー解析の SAST)。サードパーティ結果は SARIF で取り込み一元管理
- 有効化:GitHub Actions(デフォルトセットアップ/テンプレート)か 外部 CI で CodeQL CLI→SARIF
- 多言語は matrix ビルドで並列、スキャン頻度は push/PR・定期で調整
- CodeQL とサードパーティは SARIF で共存可能、SARIF は交換フォーマット
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. GitHub 純正で、コードをデータベース化しデータフロー解析で脆弱性を検出する SAST エンジンはどれですか?
Q2. 組織が既存のサードパーティ SAST の結果を GitHub の Code Scanning アラートとして一元管理したいです。使う共通フォーマットは?
Q3. 最も手軽に Code Scanning(CodeQL)を有効化する方法はどれですか?
Q4. 多言語リポジトリで各言語を並列にスキャンしたいです。ワークフローで使うものは?
Q5. CodeQL とサードパーティ SAST の関係として正しいものはどれですか?
Q6. スキャン頻度の設定として適切な考え方はどれですか?

