第8章 GitHubのコードセキュリティ機能
コードを書くだけでなく、コードの安全性を維持する ことも管理者の重要な仕事です。
GitHub には、脆弱性や機密情報の漏洩を 自動で検知 してくれる機能がいくつも備わっています 🛡️
8.1 Dependabot ─ 依存関係の脆弱性管理
Section titled “8.1 Dependabot ─ 依存関係の脆弱性管理”Dependabot とは?
Section titled “Dependabot とは?”Dependabot は、プロジェクトの依存パッケージを監視し、
脆弱性のあるバージョン や 古くなったバージョン を自動で検知して PR を作成してくれるツールです。
flowchart LR
A["📦 依存パッケージ
(package.json 等)"]
B["🔍 Dependabot
定期的にチェック"]
C["⚠️ 脆弱性発見!
または新バージョン"]
D["📝 自動でPR作成
バージョンアップ提案"]
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 は設定ファイルで管理します。
version: 2updates: # 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"Dependabot Alert が来たら
Section titled “Dependabot Alert が来たら”flowchart TD
A["⚠️ Dependabot Alert"] --> B{"深刻度は?"}
B -- "Critical / High" --> C["即座にバージョンアップ
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 ─ シークレット漏洩検知”Secret Scanning とは?
Section titled “Secret Scanning とは?”コードに API キー、トークン、パスワード などの機密情報が
誤ってコミットされていないかを 自動で検知 する機能です。
flowchart LR
A["開発者が
誤って API Key を
コミット 😱"]
B["🔍 Secret Scanning
自動検知"]
C["⚠️ アラート通知
管理者 + 開発者"]
D["🔄 対応
キーの無効化 + ローテーション"]
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
検知されるシークレットの例
Section titled “検知されるシークレットの例”| サービス | 検知対象 |
|---|---|
| AWS | Access Key ID / Secret Access Key |
| GitHub | Personal Access Token |
| Slack | Webhook URL / Bot Token |
| Stripe | API Key |
| Google Cloud | Service Account Key |
| Azure | Connection String |
| その他 | 200以上のパターンに対応 |
Push Protection
Section titled “Push Protection”Push Protection を有効にすると、シークレットを含むコミットの push を 事前にブロック できます。
Settings → Code security and analysis → Secret scanning → Push protection を有効化
flowchart LR
A["git push"] --> B{"Push Protection
スキャン"}
B -- "シークレット検出 ❌" --> C["push をブロック
メッセージで理由を通知"]
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 とは?
Section titled “Code Scanning とは?”Code Scanning は、コード内の セキュリティ脆弱性 や バグ を
静的解析で自動検出する機能です。
GitHub の CodeQL が分析エンジンとして使われます。
CodeQL の仕組み
Section titled “CodeQL の仕組み”flowchart TD
A["📝 コードを push / PR"] --> B["🔬 CodeQL で分析"]
B --> C["脆弱性パターンを検索
(SQL Injection, XSS, etc.)"]
C --> D{"問題あり?"}
D -- "はい" --> E["⚠️ セキュリティアラート
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
基本的なワークフロー
Section titled “基本的なワークフロー”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検出される脆弱性の例
Section titled “検出される脆弱性の例”| カテゴリ | 例 |
|---|---|
| インジェクション | SQL Injection, Command Injection, XSS |
| 認証・認可 | ハードコードされたパスワード、不適切な認証チェック |
| 暗号化 | 弱い暗号アルゴリズム、ハードコードされた鍵 |
| データ検証 | 未検証の入力、パストラバーサル |
| エラーハンドリング | 情報漏洩につながるエラーメッセージ |
まとめ:セキュリティ機能の全体像
Section titled “まとめ:セキュリティ機能の全体像”flowchart TD
subgraph "予防"
A["Secret Scanning
Push Protection
漏洩を事前ブロック"]
B[".gitignore
pre-commit hooks
ルールで防ぐ"]
end
subgraph "検知"
C["Dependabot Alerts
依存関係の脆弱性"]
D["Code Scanning
コードの脆弱性"]
E["Secret Scanning
漏洩したシークレット"]
end
subgraph "対応"
F["アラート確認
優先度判断"]
G["修正 + デプロイ"]
H["シークレットの
ローテーション"]
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 Protection | push 前の機密情報混入 | Settings → Code security |
| Code Scanning | コードのセキュリティ脆弱性 | GitHub Actions (CodeQL) |