本番チェックリスト
アプリケーションを本番環境にデプロイする前のチェックリスト。
セキュリティコンセプト
セキュリティアーキテクチャとコア機能の詳細については セキュリティ概要 を参照してください。
デプロイ前チェック
ファイルセキュリティ
- [ ]
.env.productionファイルが存在する - [ ] ファイル権限が
600またはそれより厳格 - [ ] 機密ファイルが
.gitignoreに追加されている - [ ] 設定ファイルにプレースホルダー(
change-me、xxxなど)が含まれていない
bash
# 権限の確認
ls -la .env.production
# 以下のように表示されるべき: -rw------- (600)
# 権限の修正
chmod 600 .env.production設定の検証
- [ ] すべての必須キーが設定されている
- [ ] 機密値が空でない
- [ ] 値のフォーマットが正しい(URL、ポートなど)
- [ ] ハードコードされたシークレットがない
go
cfg := env.ProductionConfig()
cfg.RequiredKeys = []string{
"DB_HOST", "DB_PORT", "DB_USER", "DB_PASSWORD",
"API_KEY", "API_URL",
}
cfg.FailOnMissingFile = trueセキュリティ設定チェック
監査ログ
- [ ] 監査ログが有効になっている
- [ ] ログディレクトリが書き込み可能
- [ ] ログファイルの権限が正しい
go
auditFile, _ := os.OpenFile("/var/log/app/audit.log",
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
cfg.AuditEnabled = true
cfg.AuditHandler = env.NewJSONAuditHandler(auditFile)機密データの処理
- [ ] 機密値に
GetSecureを使用している - [ ]
Close()をタイムリーに呼び出してリソースを解放している - [ ] ログに元の機密値を出力していない
go
secret := loader.GetSecure("DB_PASSWORD")
defer secret.Close()
log.Printf("Password length: %d", secret.Length())アクセス制御
- [ ]
AllowedKeysホワイトリストを設定(推奨) - [ ]
ValidateValuesを有効化 - [ ] サイズ制限を適切に設定
go
cfg.AllowedKeys = []string{"APP_NAME", "DB_HOST", "API_KEY"}
cfg.ValidateValues = true
cfg.MaxVariables = 100デプロイ時チェック
- [ ] 設定ファイルが安全な場所から読み込まれている
- [ ] アプリケーション起動時に設定を検証
- [ ] 設定エラー時にアプリケーションが起動を拒否
- [ ] 機密情報がログに出力されていない
デプロイ後チェック
- [ ] アプリケーションが正常に動作している
- [ ] 監査ログが正常に書き込まれている
- [ ] 機密情報の漏洩がない
- [ ] 設定関連のエラーを監視
クイックチェックスクリプト
bash
#!/bin/bash
# pre-deploy-check.sh
set -e
echo "=== Pre-deployment Config Check ==="
# ファイルの存在確認
[ -f ".env.production" ] || { echo "ERROR: .env.production not found"; exit 1; }
# 権限の確認
PERMS=$(stat -c %a .env.production 2>/dev/null || stat -f %Lp .env.production)
[ "$PERMS" = "600" ] || [ "$PERMS" = "400" ] || echo "WARNING: permissions are $PERMS"
# プレースホルダーの確認
grep -qE "(change-?me|placeholder|xxx|YOUR_)" .env.production && \
{ echo "ERROR: Found placeholder values"; exit 1; }
# 必須キーの確認
for key in DB_HOST DB_PORT DB_USER DB_PASSWORD API_KEY; do
grep -q "^$key=" .env.production || { echo "ERROR: Missing $key"; exit 1; }
done
echo "=== All checks passed ==="関連ドキュメント
- セキュリティ概要 - セキュリティアーキテクチャとコア機能
- SecureValue API - セキュア値の処理
- 定数とエラー - 禁止キーリスト