コンテンツにスキップ

第8章 GitHubのコードセキュリティ機能

コードを書くだけでなく、コードの安全性を維持する ことも管理者の重要な仕事です。
GitHub には、脆弱性や機密情報の漏洩を 自動で検知 してくれる機能がいくつも備わっています 🛡️


8.1 Dependabot ─ 依存関係の脆弱性管理

Section titled “8.1 Dependabot ─ 依存関係の脆弱性管理”

Dependabot は、プロジェクトの依存パッケージを監視し、
脆弱性のあるバージョン古くなったバージョン を自動で検知して PR を作成してくれるツールです。

flowchart LR
    A["📦 依存パッケージ<br>(package.json 等)"]
    B["🔍 Dependabot<br>定期的にチェック"]
    C["⚠️ 脆弱性発見!<br>または新バージョン"]
    D["📝 自動でPR作成<br>バージョンアップ提案"]

    A --> B --> C --> D

    style B fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
    style C fill:#FFF9C4,stroke:#F9A825,color:#F57F17
    style D fill:#E8F5E9,stroke:#43A047,color:#1B5E20
機能説明
Dependabot Alerts脆弱性のある依存関係を検知して通知
Dependabot Version Updates依存関係の新バージョンを検知して PR を自動作成

Settings → Code security and analysis で Dependabot alerts を有効化できます。

Version Updates は設定ファイルで管理します。

.github/dependabot.yml
version: 2
updates:
# npm パッケージの更新
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Asia/Tokyo"
open-pull-requests-limit: 10
labels:
- "dependencies"
reviewers:
- "your-org/devops-team"
# マイナー・パッチはまとめる
groups:
minor-and-patch:
update-types:
- "minor"
- "patch"
# GitHub Actions の更新
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "ci"
# Docker イメージの更新
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"
flowchart TD
    A["⚠️ Dependabot Alert"] --> B{"深刻度は?"}
    B -- "Critical / High" --> C["即座にバージョンアップ<br>PR をレビュー → マージ"]
    B -- "Medium" --> D["スプリント内で対応"]
    B -- "Low" --> E["次回の定期メンテで対応"]
    C --> F["修正を本番にデプロイ"]

    style A fill:#FFEBEE,stroke:#E53935,color:#B71C1C
    style C fill:#FFEBEE,stroke:#E53935,color:#B71C1C
    style F fill:#E8F5E9,stroke:#43A047,color:#1B5E20

8.2 Secret Scanning ─ シークレット漏洩検知

Section titled “8.2 Secret Scanning ─ シークレット漏洩検知”

コードに API キー、トークン、パスワード などの機密情報が
誤ってコミットされていないかを 自動で検知 する機能です。

flowchart LR
    A["開発者が<br>誤って API Key を<br>コミット 😱"]
    B["🔍 Secret Scanning<br>自動検知"]
    C["⚠️ アラート通知<br>管理者 + 開発者"]
    D["🔄 対応<br>キーの無効化 + ローテーション"]

    A --> B --> C --> D

    style A fill:#FFEBEE,stroke:#E53935,color:#B71C1C
    style B fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
    style D fill:#E8F5E9,stroke:#43A047,color:#1B5E20
サービス検知対象
AWSAccess Key ID / Secret Access Key
GitHubPersonal Access Token
SlackWebhook URL / Bot Token
StripeAPI Key
Google CloudService Account Key
AzureConnection String
その他200以上のパターンに対応

Push Protection を有効にすると、シークレットを含むコミットの push を 事前にブロック できます。

Settings → Code security and analysis → Secret scanning → Push protection を有効化

flowchart LR
    A["git push"] --> B{"Push Protection<br>スキャン"}
    B -- "シークレット検出 ❌" --> C["push をブロック<br>メッセージで理由を通知"]
    B -- "問題なし ✅" --> D["push 成功"]

    style C fill:#FFEBEE,stroke:#E53935,color:#B71C1C
    style D fill:#E8F5E9,stroke:#43A047,color:#1B5E20

シークレットが漏洩した場合の対応

Section titled “シークレットが漏洩した場合の対応”

8.3 Code Scanning ─ コード脆弱性の検出

Section titled “8.3 Code Scanning ─ コード脆弱性の検出”

Code Scanning は、コード内の セキュリティ脆弱性バグ
静的解析で自動検出する機能です。
GitHub の CodeQL が分析エンジンとして使われます。

flowchart TD
    A["📝 コードを push / PR"] --> B["🔬 CodeQL で分析"]
    B --> C["脆弱性パターンを検索<br>(SQL Injection, XSS, etc.)"]
    C --> D{"問題あり?"}
    D -- "はい" --> E["⚠️ セキュリティアラート<br>PR にコメント"]
    D -- "いいえ" --> F["✅ 問題なし"]

    style B fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
    style E fill:#FFEBEE,stroke:#E53935,color:#B71C1C
    style F fill:#E8F5E9,stroke:#43A047,color:#1B5E20
.github/workflows/codeql.yml
name: CodeQL
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "0 6 * * 1" # 毎週月曜 6:00 UTC
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
security-events: write
contents: read
strategy:
matrix:
language: ["javascript", "python"]
steps:
- uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
カテゴリ
インジェクションSQL Injection, Command Injection, XSS
認証・認可ハードコードされたパスワード、不適切な認証チェック
暗号化弱い暗号アルゴリズム、ハードコードされた鍵
データ検証未検証の入力、パストラバーサル
エラーハンドリング情報漏洩につながるエラーメッセージ

まとめ:セキュリティ機能の全体像

Section titled “まとめ:セキュリティ機能の全体像”
flowchart TD
    subgraph "予防"
        A["Secret Scanning<br>Push Protection<br>漏洩を事前ブロック"]
        B[".gitignore<br>pre-commit hooks<br>ルールで防ぐ"]
    end
    subgraph "検知"
        C["Dependabot Alerts<br>依存関係の脆弱性"]
        D["Code Scanning<br>コードの脆弱性"]
        E["Secret Scanning<br>漏洩したシークレット"]
    end
    subgraph "対応"
        F["アラート確認<br>優先度判断"]
        G["修正 + デプロイ"]
        H["シークレットの<br>ローテーション"]
    end

    A --> F
    C --> F
    D --> F
    E --> F
    F --> G
    F --> H

    style A fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
    style C fill:#FFF3E0,stroke:#FB8C00,color:#E65100
    style D fill:#FFF3E0,stroke:#FB8C00,color:#E65100
    style G fill:#E8F5E9,stroke:#43A047,color:#1B5E20
機能何を守る?有効化場所
Dependabot依存パッケージの脆弱性Settings → Code security
Secret Scanningコミットされた機密情報Settings → Code security
Push Protectionpush 前の機密情報混入Settings → Code security
Code Scanningコードのセキュリティ脆弱性GitHub Actions (CodeQL)