セキュリティのベストプラクティス
安全なコード管理と機密情報の保護
学習目標
この章を読み終える頃には、GitHubでの安全なコード管理方法を理解し、機密情報の保護、アクセス権限の適切な設定、セキュリティ脅威への対策ができるようになります。
機密情報の管理
APIキーとパスワードの保護
絶対にコミットしてはいけない情報:
- APIキー・トークン
- データベース接続文字列
- パスワード・秘密鍵
- 個人情報
.gitignoreファイルの活用
# 環境変数ファイル
.env
.env.local
.env.production
# 設定ファイル
config/database.yml
config/secrets.yml
# ログファイル
*.log
logs/
# 一時ファイル
*.tmp
*.swp
環境変数の使用
悪い例:
const apiKey = "sk-1234567890abcdef"; // ❌ ハードコーディング
良い例:
const apiKey = process.env.API_KEY; // ✅ 環境変数から取得
アクセス権限の管理
リポジトリの可視性設定
Public vs Private の選択基準:
Publicにすべき場合:
- オープンソースプロジェクト
- 学習用・デモ用コード
- 公開したいポートフォリオ
Privateにすべき場合:
- 商用プロジェクト
- 機密情報を含むコード
- 開発中の未完成プロジェクト
チームメンバーの権限設定
権限レベル:
- Read(読み取り): コードの閲覧のみ
- Write(書き込み): プッシュ・プルリクエスト可能
- Admin(管理者): 設定変更・メンバー管理可能
セキュリティ機能の活用
二要素認証(2FA)の設定
設定手順:
- GitHubアカウントのSettings
- Password and authentication
- Two-factor authentication
- 認証アプリまたはSMSで設定
Personal Access Token
使用場面:
- API経由でのGitHub操作
- CI/CDパイプライン
- 自動化スクリプト
作成手順:
- Settings → Developer settings
- Personal access tokens → Tokens (classic)
- Generate new token
- 必要な権限のみを選択
セキュリティ脅威への対策
依存関係の脆弱性チェック
GitHubの自動セキュリティアラート:
- Dependabot alerts
- Security advisories
- 依存関係の自動更新
コードスキャニング
GitHub Advanced Security(有料プラン):
- CodeQL analysis
- Secret scanning
- 依存関係レビュー
セキュリティインシデントへの対応
機密情報の誤コミット時の対処
即座に実行すべきこと:
- APIキーの無効化: 漏洩したキーを即座に無効化
- 履歴からの削除:
git filter-branch
またはBFG Repo-Cleaner
- 新しいキーの生成: 安全な新しいキーに更新
履歴からの削除例:
# BFG Repo-Cleanerを使用
java -jar bfg.jar --delete-files apikey.txt
git reflog expire --expire=now --all
git gc --prune=now --aggressive
セキュリティ監査の実施
定期的にチェックすべき項目:
- アクセス権限の見直し
- 古いPersonal Access Tokenの削除
- 不要なデプロイキーの削除
- 依存関係の脆弱性確認
ベストプラクティス
開発フロー
- ブランチ保護: mainブランチへの直接プッシュを禁止
- プルリクエストレビュー: 必須レビューの設定
- ステータスチェック: CI/CDでのセキュリティテスト
チームでのセキュリティ文化
セキュリティ教育:
- 新メンバーへのセキュリティ研修
- 定期的なセキュリティ意識向上
- インシデント共有と学習
コードレビューでの観点:
- ハードコーディングされた機密情報
- 入力値検証の不備
- 認証・認可の実装確認
まとめ
セキュリティは「後で考える」ものではなく、開発の最初から組み込むべき重要な要素です。この章で学んだ内容を実践し、安全なコード管理習慣を身につけましょう。
重要なポイント:
- 機密情報は絶対にコミットしない
- 適切なアクセス権限の設定
- 二要素認証の有効化
- 定期的なセキュリティ監査
次の章では、これらのセキュリティ知識を活用した実践的なプロジェクト運用方法について学習します。