コンテンツにスキップ

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

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


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

Section titled “8.1 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 は設定ファイルで管理します。

.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["即座にバージョンアップ
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["開発者が
誤って 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
サービス検知対象
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
スキャン"} 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 は、コード内の セキュリティ脆弱性バグ
静的解析で自動検出する機能です。
GitHub の 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
.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
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 Protectionpush 前の機密情報混入Settings → Code security
Code Scanningコードのセキュリティ脆弱性GitHub Actions (CodeQL)