コンテンツにスキップ

セキュリティベストプラクティス

プライベートリポジトリでも、機密情報の取り扱いには注意が必要です。

  • APIキー、パスワード、秘密鍵を直接コミットしない
  • サービスアカウントの認証情報をリポジトリに含めない
  • データベースの接続文字列をハードコーディングしない
  1. 環境変数の使用

    Terminal window
    # .env.local(.gitignoreに含める)
    API_KEY=your-secret-key
    DATABASE_URL=your-connection-string
  2. シークレット管理サービスの活用

    • GitHub Secrets(GitHub Actions用)
    • Google Secret Manager
    • AWS Secrets Manager
    • HashiCorp Vault
  3. 設定ファイルのテンプレート化

    Terminal window
    # config.example.json(コミット可)
    {
    "apiKey": "YOUR_API_KEY_HERE",
    "endpoint": "https://api.example.com"
    }
    # config.json(.gitignoreに含める)
    # 実際の値を含むファイル

以下のパターンを.gitignoreに追加することを推奨:

Terminal window
# 環境変数
.env
.env.*
# 認証情報
*.key
*.pem
service-account*.json
credentials/
secrets/
# プライベート設定
*-private.json
*-secret.json
config/private/

既存のコミットから機密情報を削除

Section titled “既存のコミットから機密情報を削除”

誤って機密情報をコミットしてしまった場合:

Terminal window
# BFG Repo-Cleanerを使用
bfg --delete-files YOUR-FILE-WITH-SECRETS.txt
git reflog expire --expire=now --all
git gc --prune=now --aggressive
# または git filter-branchを使用
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE" \
--prune-empty --tag-name-filter cat -- --all
  1. パスワードマネージャー

    • 1Password for Teams
    • Bitwarden
    • LastPass
  2. 暗号化されたファイル共有

    • git-crypt
    • age
    • sops
  3. 環境別の設定管理

    config/
    ├── base.json # 共通設定(コミット可)
    ├── dev.json # 開発環境(コミット可)
    ├── prod.json # 本番環境(テンプレートのみ)
    └── secrets/ # .gitignoreに含める
    ├── dev.json # 開発環境の機密情報
    └── prod.json # 本番環境の機密情報
  • GitGuardianやTruffleHogなどのツールで定期的にスキャン
  • 定期的なアクセスキーのローテーション
  • 不要になった認証情報の削除