セキュリティベストプラクティス
プライベートリポジトリでも、機密情報の取り扱いには注意が必要です。
機密情報の管理
Section titled “機密情報の管理”してはいけないこと
Section titled “してはいけないこと”- APIキー、パスワード、秘密鍵を直接コミットしない
- サービスアカウントの認証情報をリポジトリに含めない
- データベースの接続文字列をハードコーディングしない
推奨される方法
Section titled “推奨される方法”-
環境変数の使用
Terminal window # .env.local(.gitignoreに含める)API_KEY=your-secret-keyDATABASE_URL=your-connection-string -
シークレット管理サービスの活用
- GitHub Secrets(GitHub Actions用)
- Google Secret Manager
- AWS Secrets Manager
- HashiCorp Vault
-
設定ファイルのテンプレート化
Terminal window # config.example.json(コミット可){"apiKey": "YOUR_API_KEY_HERE","endpoint": "https://api.example.com"}# config.json(.gitignoreに含める)# 実際の値を含むファイル
.gitignoreの設定
Section titled “.gitignoreの設定”以下のパターンを.gitignoreに追加することを推奨:
# 環境変数.env.env.*
# 認証情報*.key*.pemservice-account*.jsoncredentials/secrets/
# プライベート設定*-private.json*-secret.jsonconfig/private/既存のコミットから機密情報を削除
Section titled “既存のコミットから機密情報を削除”誤って機密情報をコミットしてしまった場合:
# BFG Repo-Cleanerを使用bfg --delete-files YOUR-FILE-WITH-SECRETS.txtgit reflog expire --expire=now --allgit 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チームでの共有方法
Section titled “チームでの共有方法”-
パスワードマネージャー
- 1Password for Teams
- Bitwarden
- LastPass
-
暗号化されたファイル共有
- git-crypt
- age
- sops
-
環境別の設定管理
config/├── base.json # 共通設定(コミット可)├── dev.json # 開発環境(コミット可)├── prod.json # 本番環境(テンプレートのみ)└── secrets/ # .gitignoreに含める├── dev.json # 開発環境の機密情報└── prod.json # 本番環境の機密情報
定期的な監査
Section titled “定期的な監査”- GitGuardianやTruffleHogなどのツールで定期的にスキャン
- 定期的なアクセスキーのローテーション
- 不要になった認証情報の削除