メインコンテンツまでスキップ

環境変数・セキュリティパラメータ設定

idp-server の商用デプロイメントにおける環境変数、セキュリティパラメータ、および機密情報管理について説明します。

🎯 SRE向け設定ガイド

最低限設定すべき必須項目 (Priority 1)

🔒 機密情報(厳重管理が必要)

  • IDP_SERVER_API_KEY - 管理API認証キー
  • IDP_SERVER_API_SECRET - 管理API認証シークレット
  • ENCRYPTION_KEY - データ暗号化キー (AES-256)
  • CONTROL_PLANE_DB_WRITER_PASSWORD - Control Plane用DBパスワード
  • DB_WRITER_PASSWORD - アプリケーション用DBパスワード

✅ 基本環境設定

  • DATABASE_TYPE - データベース種類 (POSTGRESQL)
  • DB_WRITER_URL - プライマリDB接続URL
  • DB_READER_URL - レプリカDB接続URL
  • REDIS_HOST - Redis/ElastiCache エンドポイント
  • SESSION_REDIS_ENABLE - Redisセッション有効化 (true推奨)

本番環境で調整すべき項目 (Priority 2)

⚡ パフォーマンス設定

  • DB_WRITER_MAX_POOL_SIZE - 書き込み接続プール (負荷に応じて)
  • DB_READER_MAX_POOL_SIZE - 読み込み接続プール (書き込みの1.5-2倍)
  • REDIS_MAX_TOTAL - Redis接続プール (同時アクセス数に応じて)
  • CACHE_TIME_TO_LIVE_SECOND - キャッシュTTL (業務要件に応じて)

🔒 セキュリティ設定

  • LOGGING_LEVEL_ROOT - 本番は info 推奨(監査・トラブルシューティングに必要)
  • REDIS_SESSION_TIMEOUT - セッションRedis接続タイムアウト

環境規模別推奨値

環境規模想定負荷Writer PoolReader PoolRedis PoolCache TTL
小規模< 100 TPS153050300s
中規模100-500 TPS5080100600s
大規模500+ TPS100150200900s

📝 application.yaml 設定詳細

idp-server の設定は application.yaml で定義され、環境変数で上書き可能です。以下に全設定項目の一覧表と詳細解説を記載します。


📋 設定パラメータ一覧表

idp.configurations (コア設定)

パラメータ環境変数説明デフォルト値本番推奨値
adminTenantIdADMIN_TENANT_ID管理テナントID67e7eae6-62b0-4500-9eff-87459f63fc66本番固有UUID
apiKeyIDP_SERVER_API_KEY管理API認証キーなし (必須)Secrets Manager
apiSecretIDP_SERVER_API_SECRET管理API認証シークレットなし (必須)Secrets Manager
encryptionKeyENCRYPTION_KEYデータ暗号化キー (AES-256)なし (必須)Secrets Manager
databaseTypeDATABASE_TYPEデータベース種類POSTGRESQLPOSTGRESQL

server (サーバーポート設定)

パラメータ環境変数説明デフォルト値本番推奨値
server.portSERVER_PORTHTTPリッスンポート80808080

Note: Spring Bootのデフォルトポート 8080 が使用されます。リバースプロキシ(Nginx、ALB等)からのプロキシ先ポートとして指定してください。通常は変更不要です。

idp.server (サーバー設定)

パラメータ環境変数説明デフォルト値本番推奨値
shutdown.delayIDP_SERVER_SHUTDOWN_DELAYGraceful shutdown遅延時間5s5s (負荷に応じて調整)

Graceful Shutdown説明:

  • アプリケーション停止時に新規リクエストを受け付けず、既存リクエストの完了を待つ
  • Kubernetes等のオーケストレータでのローリングアップデート時に重要
  • delayは、終了シグナル受信後、既存リクエスト完了を待つ時間

idp.auth-session (認証セッションCookie設定)

パラメータ環境変数説明デフォルト値本番推奨値
same-siteIDP_AUTH_SESSION_SAME_SITECookie SameSite属性 (Lax/None)LaxLax
secureIDP_AUTH_SESSION_SECURECookie Secure フラグtruetrue

SameSite属性説明:

  • Lax: 同一オリジンからのリクエストでCookieを送信(推奨)
  • None: クロスオリジンでもCookieを送信(HTTPS必須。クロスドメイン構成時に使用)

idp.session (セッション管理設定)

パラメータ環境変数説明デフォルト値本番推奨値
enabledSESSION_REDIS_ENABLERedisセッション有効化truetrue
redis.hostREDIS_HOSTRedis ホストlocalhostElastiCache エンドポイント
redis.portREDIS_PORTRedis ポート63796379
redis.databaseREDIS_SESSION_DATABASERedis データベース番号00
redis.timeoutREDIS_SESSION_TIMEOUT接続タイムアウト (ミリ秒)100005000
redis.passwordREDIS_SESSION_PASSWORDRedis パスワード(空)Secrets Manager
redis.maxTotalREDIS_SESSION_MAX_TOTAL最大接続数20100
redis.maxIdleREDIS_SESSION_MAX_IDLE最大アイドル接続数310
redis.minIdleREDIS_SESSION_MIN_IDLE最小アイドル接続数25

idp.time (タイムゾーン設定)

パラメータ環境変数説明デフォルト値本番推奨値
zoneTIME_ZONEアプリケーションタイムゾーンUTCUTC

idp.datasource.control-plane (Control Plane用データベース)

Writer 設定

パラメータ環境変数説明デフォルト値本番推奨値
urlCONTROL_PLANE_DB_WRITER_URL書き込み用DB接続URLjdbc:postgresql://localhost:5432/idpserverRDS Primary エンドポイント
usernameCONTROL_PLANE_DB_WRITER_USER_NAMEControl Plane用DBユーザー必須(デフォルトなし)idp_admin
passwordCONTROL_PLANE_DB_WRITER_PASSWORDControl Plane用DBパスワード必須(デフォルトなし)Secrets Manager
connection-timeoutCONTROL_PLANE_DB_WRITER_TIMEOUT接続タイムアウト (ms)3000030000
maximum-pool-sizeCONTROL_PLANE_DB_WRITER_MAX_POOL_SIZE最大接続プールサイズ1015
minimum-idleCONTROL_PLANE_DB_WRITER_MIN_IDLE最小アイドル接続数55
idle-timeoutCONTROL_PLANE_DB_WRITER_IDLE_TIMEOUTアイドル接続タイムアウト (ms)600000600000
max-lifetimeCONTROL_PLANE_DB_WRITER_MAX_LIFETIME接続の最大生存時間 (ms)18000001800000
keepalive-timeCONTROL_PLANE_DB_WRITER_KEEPALIVE_TIMEKeepalive間隔 (ms)180000180000
validation-timeoutCONTROL_PLANE_DB_WRITER_VALIDATION_TIMEOUT接続検証タイムアウト (ms)50005000

Reader 設定

パラメータ環境変数説明デフォルト値本番推奨値
urlCONTROL_PLANE_DB_READER_URL読み込み用DB接続URLjdbc:postgresql://localhost:5433/idpserverRDS Replica エンドポイント
usernameCONTROL_PLANE_DB_READER_USER_NAMEControl Plane用読み込み専用DBユーザー必須(デフォルトなし)idp_admin_ro
passwordCONTROL_PLANE_DB_READER_PASSWORDControl Plane用読み込み専用DBパスワード必須(デフォルトなし)Secrets Manager
connection-timeoutCONTROL_PLANE_DB_READER_TIMEOUT接続タイムアウト (ms)3000030000
maximum-pool-sizeCONTROL_PLANE_DB_READER_MAX_POOL_SIZE最大接続プールサイズ1020
minimum-idleCONTROL_PLANE_DB_READER_MIN_IDLE最小アイドル接続数58
idle-timeoutCONTROL_PLANE_DB_READER_IDLE_TIMEOUTアイドル接続タイムアウト (ms)600000600000
max-lifetimeCONTROL_PLANE_DB_READER_MAX_LIFETIME接続の最大生存時間 (ms)18000001800000
keepalive-timeCONTROL_PLANE_DB_READER_KEEPALIVE_TIMEKeepalive間隔 (ms)180000180000
validation-timeoutCONTROL_PLANE_DB_READER_VALIDATION_TIMEOUT接続検証タイムアウト (ms)50005000

idp.datasource.app (アプリケーション用データベース)

Writer 設定

パラメータ環境変数説明デフォルト値本番推奨値
urlDB_WRITER_URL書き込み用DB接続URLjdbc:postgresql://localhost:5432/idpserverRDS Primary エンドポイント
usernameDB_WRITER_USER_NAMEアプリ用DBユーザー必須(デフォルトなし)idp_app_user
passwordDB_WRITER_PASSWORDアプリ用DBパスワード必須(デフォルトなし)Secrets Manager
connection-timeoutDB_WRITER_TIMEOUT接続タイムアウト (ms)3000030000
maximum-pool-sizeDB_WRITER_MAX_POOL_SIZE最大接続プールサイズ3050
minimum-idleDB_WRITER_MIN_IDLE最小アイドル接続数1015
idle-timeoutDB_WRITER_IDLE_TIMEOUTアイドル接続タイムアウト (ms)600000600000
max-lifetimeDB_WRITER_MAX_LIFETIME接続の最大生存時間 (ms)18000001800000
keepalive-timeDB_WRITER_KEEPALIVE_TIMEKeepalive間隔 (ms)180000180000
validation-timeoutDB_WRITER_VALIDATION_TIMEOUT接続検証タイムアウト (ms)50005000

Reader 設定

パラメータ環境変数説明デフォルト値本番推奨値
urlDB_READER_URL読み込み用DB接続URLjdbc:postgresql://localhost:5433/idpserverRDS Replica エンドポイント
usernameDB_READER_USER_NAMEアプリ用読み込み専用DBユーザー必須(デフォルトなし)idp_app_user_ro
passwordDB_READER_PASSWORDアプリ用読み込み専用DBパスワード必須(デフォルトなし)Secrets Manager
connection-timeoutDB_READER_TIMEOUT接続タイムアウト (ms)3000030000
maximum-pool-sizeDB_READER_MAX_POOL_SIZE最大接続プールサイズ3080
minimum-idleDB_READER_MIN_IDLE最小アイドル接続数1025
idle-timeoutDB_READER_IDLE_TIMEOUTアイドル接続タイムアウト (ms)600000600000
max-lifetimeDB_READER_MAX_LIFETIME接続の最大生存時間 (ms)18000001800000
keepalive-timeDB_READER_KEEPALIVE_TIMEKeepalive間隔 (ms)180000180000
validation-timeoutDB_READER_VALIDATION_TIMEOUT接続検証タイムアウト (ms)50005000

注意: DATABASE_TYPE環境変数(POSTGRESQL/MYSQL)により実行時にデータベース種別が切り替わります。環境変数は同じものを使用するため、接続先URLで適切なJDBCプレフィックスを指定してください。

idp.cache (Redis キャッシュ設定)

パラメータ環境変数説明デフォルト値本番推奨値
enabledCACHE_ENABLEキャッシュ有効化truetrue
timeToLiveSecondCACHE_TIME_TO_LIVE_SECONDキャッシュTTL (秒)300600
redis.hostREDIS_HOSTRedis ホストlocalhostElastiCache エンドポイント
redis.portREDIS_PORTRedis ポート63796379
redis.databaseREDIS_CACHE_DATABASERedis データベース番号01 (セッションと分離推奨)
redis.timeoutREDIS_CACHE_TIMEOUT接続タイムアウト (ミリ秒)100005000
redis.passwordREDIS_CACHE_PASSWORDRedis パスワード(空)Secrets Manager
redis.maxTotalREDIS_MAX_TOTAL最大接続数20100
redis.maxIdleREDIS_MAX_IDLE最大アイドル接続数310
redis.minIdleREDIS_MIN_IDLE最小アイドル接続数25

トークンキャッシュ設定

パラメータ環境変数説明デフォルト値本番推奨値
-TOKEN_CACHE_ENABLEDトークンイントロスペクションのRedisキャッシュ有効化falsetrue(高負荷環境)

注意: CACHE_ENABLE=true(Redis有効)が前提条件。TOKEN_CACHE_ENABLED=true に設定すると、アクセストークンのイントロスペクション結果をRedisにキャッシュ(TTL 60秒)し、DB負荷を軽減します。中〜高負荷環境(100+ VU)でIntrospection p95が63-74%改善されます。

logging.level (ログレベル設定)

パラメータ環境変数説明デフォルト値本番推奨値
rootLOGGING_LEVEL_ROOTルートログレベルinfoinfo
webLOGGING_LEVEL_WEBWebレイヤーログレベルinfoinfo
platformLOGGING_LEVEL_IDP_SERVER_PLATFORMプラットフォームログレベルinfoinfo
authenticationLOGGING_LEVEL_IDP_SERVER_AUTHENTICATION_INTERACTORS認証処理ログレベルinfoinfo
control_planeLOGGING_LEVEL_IDP_SERVER_CONTROL_PLANEコントロールプレーンログレベルinfoinfo
core.oidcLOGGING_LEVEL_IDP_SERVER_CORE_OIDCOIDC コアログレベルinfoinfo
core.openidLOGGING_LEVEL_IDP_SERVER_CORE_OPENIDOpenID コアログレベルinfoinfo
core.adaptersLOGGING_LEVEL_IDP_SERVER_CORE_ADAPTERSコアアダプターログレベルinfoinfo
core.extensionLOGGING_LEVEL_IDP_SERVER_CORE_EXTENSIONコア拡張ログレベルinfoinfo
email.awsLOGGING_LEVEL_IDP_SERVER_EMAIL_AWSAWS Email サービスログレベルinfoinfo
federationLOGGING_LEVEL_IDP_SERVER_FEDERATIONフェデレーションログレベルinfoinfo
notification.push.fcmLOGGING_LEVEL_IDP_SERVER_NOTIFICATION_PUSH_FCMFCM プッシュ通知ログレベルinfoinfo
security.event.hook.ssfLOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOK_SSFSSF セキュリティイベントログレベルinfoinfo
security.event.hooksLOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOKSセキュリティイベントログレベルinfoinfo
adapters.springbootLOGGING_LEVEL_IDP_SERVER_ADAPTERS_SPRING_BOOTSpring Boot アダプターログレベルinfoinfo
usecasesLOGGING_LEVEL_IDP_SERVER_USECASESユースケースログレベルinfoinfo
authenticators.webauthn4jLOGGING_LEVEL_IDP_SERVER_AUTHENTICATORS_WEBAUTHN4JWebAuthn4J 認証ログレベルinfoinfo
http.request.executorLOGGING_LEVEL_IDP_SERVER_HTTP_REQUEST_EXECUTORHTTP リクエスト実行ログレベルinfoinfo
request.response.loggingLOGGING_LEVEL_REQUEST_RESPONSE_LOGGING_FILTERリクエスト/レスポンスログレベルinfoinfo (デバッグ時のみ debug)

idp.logging.request-response (リクエスト/レスポンスデバッグログ設定)

パラメータ環境変数説明デフォルト値本番推奨値
enabledIDP_LOGGING_REQUEST_RESPONSE_ENABLEDリクエスト/レスポンスログ有効化falsefalse (デバッグ時のみ true)
mask-tokensIDP_LOGGING_REQUEST_RESPONSE_MASK_TOKENSトークンマスキング有効化truetrue
max-body-sizeIDP_LOGGING_REQUEST_RESPONSE_MAX_BODY_SIZEログ出力する最大ボディサイズ (バイト)1000010000
endpointsIDP_LOGGING_REQUEST_RESPONSE_ENDPOINTSログ対象エンドポイント (カンマ区切り)/v1/tokens,/v1/authorizations,/v1/backchannel/authentications,/v1/userinfo必要なエンドポイントのみ指定

用途:

  • OAuth/OIDCエンドポイントのHTTPリクエスト/レスポンスをDEBUGレベルで詳細ログ出力
  • 結合テスト時のパラメータ認識齟齬のデバッグに有用
  • authorization_details、カスタムスコープ等の実際の送受信内容を確認可能

セキュリティ対策:

  • 多層防御: Property (enabled) + LogLevel (debug) + Masking (mask-tokens)
  • デフォルト無効: enabled=false で本番環境での誤動作を防止
  • 自動マスキング: access_token, refresh_token, id_token, client_secret, password を自動マスク
  • 選択的ログ: 特定エンドポイントのみログ出力可能

設定例:

# デバッグ時(開発・結合テスト環境)
IDP_LOGGING_REQUEST_RESPONSE_ENABLED=true
LOGGING_LEVEL_REQUEST_RESPONSE_LOGGING_FILTER=debug

# マスキング無効(結合テスト専用)
IDP_LOGGING_REQUEST_RESPONSE_MASK_TOKENS=false

# 本番環境(必ず無効化)
IDP_LOGGING_REQUEST_RESPONSE_ENABLED=false

idp.async (非同期処理スレッドプール設定)

非同期処理(セキュリティイベント、ユーザーライフサイクルイベント、監査ログ)用のスレッドプール設定です。

Security Event スレッドプール

パラメータ環境変数説明デフォルト値本番推奨値
core-pool-sizeSECURITY_EVENT_CORE_POOL_SIZEコアスレッド数55
max-pool-sizeSECURITY_EVENT_MAX_POOL_SIZE最大スレッド数3030
queue-capacitySECURITY_EVENT_QUEUE_CAPACITYキュー容量50005000
retry-queue-capacitySECURITY_EVENT_RETRY_QUEUE_CAPACITYリトライキュー容量50005000

User Lifecycle Event スレッドプール

パラメータ環境変数説明デフォルト値本番推奨値
core-pool-sizeUSER_LIFECYCLE_EVENT_CORE_POOL_SIZEコアスレッド数55
max-pool-sizeUSER_LIFECYCLE_EVENT_MAX_POOL_SIZE最大スレッド数1010
queue-capacityUSER_LIFECYCLE_EVENT_QUEUE_CAPACITYキュー容量10001000

Audit Log スレッドプール

パラメータ環境変数説明デフォルト値本番推奨値
core-pool-sizeAUDIT_LOG_CORE_POOL_SIZEコアスレッド数55
max-pool-sizeAUDIT_LOG_MAX_POOL_SIZE最大スレッド数3030
queue-capacityAUDIT_LOG_QUEUE_CAPACITYキュー容量50005000

設計思想:

  • Security Event / Audit Log: 高負荷になりやすいため、大きなプールサイズとキュー容量を確保
  • User Lifecycle: 比較的低頻度のため、コンパクトなプールサイズ
  • キュー容量: バーストトラフィックを吸収するためのバッファ

server (Tomcat サーバー設定)

パラメータ環境変数説明デフォルト値本番推奨値
shutdown-Shutdown モードgracefulgraceful(変更不可)
tomcat.threads.maxSERVER_TOMCAT_THREADS_MAX最大スレッド数300500
tomcat.threads.min-spareSERVER_TOMCAT_THREADS_MIN_SPARE最小予備スレッド数50100

Note: 以下の設定は application.yaml で固定値として設定されており、環境変数での変更はサポートされていません:

  • Graceful shutdown: 有効(30秒)
  • Kubernetes ヘルスチェック(Readiness/Liveness): 有効
  • 公開エンドポイント: health,info のみ(メトリクス有効化は 運用ガイダンス 参照)

🔍 詳細解説

1. セキュリティパラメータ設定

API認証キー・シークレット設定

# API Key (UUID v4 形式推奨)
IDP_SERVER_API_KEY=30113151-4ee1-4f6a-a1ac-cc1be9eaf695

# API Secret (Base64エンコード推奨、最低32文字)
IDP_SERVER_API_SECRET=MTY5YjM3NmYtOTY0ZC00Nzg0LWIyOTMtOWQyNDhjMTkyNmIwCg==

生成方法:

# API Key生成 (UUID v4)
API_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "IDP_SERVER_API_KEY=$API_KEY"

# API Secret生成 (Base64エンコード)
API_SECRET=$(uuidgen | tr 'A-Z' 'a-z' | base64)
echo "IDP_SERVER_API_SECRET=$API_SECRET"

用途:

  • 管理API認証: /v1/admin/* エンドポイントへのアクセス制御
  • Basic認証形式: Authorization: Basic base64(API_KEY:API_SECRET)
  • テナント管理: テナント作成、ユーザー管理、設定変更
  • 監査ログアクセス: セキュリティイベント・監査ログ取得

データ暗号化キー設定

# AES-256暗号化キー (32バイト = 256bit)
ENCRYPTION_KEY=JjN9c6N4STeA+g9d+TtBGp5MC3sbqOWs+S9qzJG42iY=

生成方法:

# AES-256キー生成 (32バイト、Base64エンコード)
ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
echo "ENCRYPTION_KEY=$ENCRYPTION_KEY"

# 検証: Base64デコード後が32バイトであること
echo $ENCRYPTION_KEY | base64 -d | wc -c
# 結果: 32

用途:

  • OAuthトークン暗号化: アクセストークン・リフレッシュトークンのDB保存時の暗号化

暗号化キーローテーション

⚠️ 重要: 暗号化キーローテーション機能は現在未実装です。

暗号化キーを変更すると、既存の全トークンが無効化されます。

  • 既存のアクセストークン・リフレッシュトークンが復号不可能になります
  • 全ユーザーが強制ログアウトされます
  • 全ユーザーが再ログインする必要があります

通常運用では暗号化キーの変更は推奨されません。 セキュリティインシデント(キー漏洩など)の緊急時のみ実施してください。

詳細な実装計画については Issue #439: 暗号化キーローテーション機能の実装 を参照してください


2. 本番環境での機密情報管理

必須機密情報項目:

  • IDP_SERVER_API_KEY - 管理API認証キー
  • IDP_SERVER_API_SECRET - 管理API認証シークレット
  • ENCRYPTION_KEY - データ暗号化キー (AES-256)
  • CONTROL_PLANE_DB_WRITER_PASSWORD - Control Plane用DB認証情報
  • DB_WRITER_PASSWORD - アプリケーション用DB認証情報

セキュリティ要件:

  • 平文での保存・ログ出力禁止
  • アクセス制御・監査ログ記録
  • 定期的なローテーション実施
  • 暗号化キーは32バイト Base64エンコード必須

💡 実装方法: 組織のセキュリティポリシーに応じてSecrets管理ソリューション(AWS Secrets Manager、HashiCorp Vault、Kubernetes Secrets等)を選択・実装してください。

2. データベース接続プール設定の考え方

Control Plane用 vs アプリケーション用の分離理由

# Control Plane用 - 小規模・安定
control-plane:
writer:
maximum-pool-size: 15 # Control Plane操作は頻度低、小さめ
reader:
maximum-pool-size: 20 # 管理画面の表示用

# アプリケーション用 - 大規模・高負荷
app:
writer:
maximum-pool-size: 50 # 認証処理の書き込み
reader:
maximum-pool-size: 80 # UserInfo、トークン検証等の読み込み

設計思想:

  • Control Plane用: システム管理者が使用、低頻度・高信頼性重視
  • アプリケーション用: エンドユーザーが使用、高頻度・スケーラビリティ重視

接続プールサイズの算出方法

推奨最大接続プールサイズ = (CPU コア数 × 2) + 実効スピンドル数

例: ECS タスク (4vCPU):

  • Writer: (4 × 2) + 1 = 9 → 本番推奨 50 (余裕を持った設定)
  • Reader: 読み込み重視のため Writer の 1.5~2倍

2. Redis データベース分離とパスワード認証

セッションとキャッシュでRedisデータベースを分離する理由

設計思想:

  • データ分離: セッションデータ (idp.session.redis) とキャッシュデータ (idp.cache.redis) を異なるRedisデータベースで管理
  • 運用の柔軟性: それぞれ異なるTTL、タイムアウト設定が可能
  • セキュリティ: 本番環境(AWS ElastiCache、Azure Cache for Redis等)での認証対応

使用例

ローカル開発環境(認証なし):

# デフォルト設定で動作(設定不要)
# Session: DB 0, 認証なし
# Cache: DB 0, 認証なし

AWS ElastiCache(認証あり、DB分離):

# Session用
export REDIS_HOST=my-elasticache.abc123.cache.amazonaws.com
export REDIS_SESSION_DATABASE=0
export REDIS_SESSION_PASSWORD=my_secure_password
export REDIS_SESSION_TIMEOUT=5000

# Cache用(同じRedis、異なるDB)
export REDIS_CACHE_DATABASE=1
export REDIS_CACHE_PASSWORD=my_secure_password
export REDIS_CACHE_TIMEOUT=3000

Azure Cache for Redis(認証あり):

# Session用
export REDIS_HOST=myapp.redis.cache.windows.net
export REDIS_SESSION_DATABASE=0
export REDIS_SESSION_PASSWORD=primary_key_from_azure
export REDIS_SESSION_TIMEOUT=5000

# Cache用
export REDIS_CACHE_DATABASE=2
export REDIS_CACHE_PASSWORD=primary_key_from_azure
export REDIS_CACHE_TIMEOUT=5000

セキュリティ考慮事項

パスワード管理:

  • 環境変数で渡す(平文をapplication.yamlに記載しない)
  • AWS Secrets Manager、HashiCorp Vaultなどのシークレット管理サービス使用推奨
  • Kubernetes Secretsでの管理

空文字列の扱い:

# 空文字列 or 指定なし = 認証なし(ローカル開発環境)
export REDIS_SESSION_PASSWORD=
export REDIS_CACHE_PASSWORD=

# パスワード指定 = 認証あり(本番環境)
export REDIS_SESSION_PASSWORD=my_secure_password
export REDIS_CACHE_PASSWORD=cache_specific_password

3. Redis 設定の最適化

キャッシュTTL設定指針

timeToLiveSecond: 600  # 10分

設定根拠:

  • OAuth トークン検証: 頻繁にアクセス、中程度のTTL
  • ユーザー情報: 変更頻度低、長めのTTL可
  • 設定情報: ほぼ静的、長めのTTL可

Redis 接続プール設定

maxTotal: 100    # アプリケーション負荷に応じて調整
maxIdle: 10 # maxTotal の 10% 程度
minIdle: 5 # maxIdle の 50% 程度

4. ログレベル設定の戦略

本番環境ログレベル方針

# セキュリティ重要 → info 維持
LOGGING_LEVEL_IDP_SERVER_AUTHENTICATION_INTERACTORS=info
LOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOKS=info

# ルートログレベル(監査・トラブルシューティングに必要)
LOGGING_LEVEL_ROOT=info

# 開発用詳細ログ → info に変更
LOGGING_LEVEL_IDP_SERVER_HTTP_REQUEST_EXECUTOR=info

ログ量とパフォーマンスのバランス:

  • 監査要件: 認証・認可ログは info 維持
  • パフォーマンス: 大量ログは warn 以上
  • トラブルシューティング: 必要最小限の debug ログ

5. セッション管理設定

Redisセッション有効化

idp:
session:
enabled: true # SESSION_REDIS_ENABLE
redis:
host: localhost
port: 6379
database: 0
timeout: 10000
password: ""

設計:

  • SESSION_REDIS_ENABLE=true: Redis を使用したセッション管理(本番・マルチインスタンス環境推奨)
  • SESSION_REDIS_ENABLE=false: Redis セッション無効化(ローカル開発・単一インスタンス向け)

⚙️ 本番環境設定チェックリスト

Phase 1: 必須セキュリティ設定 🔒

# 1. 認証キー生成・設定
export IDP_SERVER_API_KEY=$(uuidgen | tr 'A-Z' 'a-z')
export IDP_SERVER_API_SECRET=$(uuidgen | tr 'A-Z' 'a-z' | base64)
export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)

# 2. データベース認証設定
export CONTROL_PLANE_DB_WRITER_PASSWORD="<strong-password>"
export DB_WRITER_PASSWORD="<strong-password>"

# 3. 基本環境設定
export DATABASE_TYPE="POSTGRESQL"
export DB_WRITER_URL="jdbc:postgresql://rds-primary:5432/idpserver"
export DB_READER_URL="jdbc:postgresql://rds-replica:5432/idpserver"
export REDIS_HOST="elasticache-cluster.xxxxx.cache.amazonaws.com"
export SESSION_REDIS_ENABLE=true

# 4. Redis設定(認証あり環境)
export REDIS_SESSION_DATABASE=0
export REDIS_SESSION_PASSWORD="<redis-password>"
export REDIS_CACHE_DATABASE=1
export REDIS_CACHE_PASSWORD="<redis-password>"
export REDIS_CACHE_TIMEOUT=5000

Phase 2: パフォーマンス調整 ⚡

# 環境規模に応じて選択 (小規模/中規模/大規模)

# 中規模環境 (100-500 TPS) の例
export DB_WRITER_MAX_POOL_SIZE=50
export DB_READER_MAX_POOL_SIZE=80
export REDIS_MAX_TOTAL=100
export CACHE_TIME_TO_LIVE_SECOND=600

Phase 3: 運用・監視設定 📊

# ログレベル設定(監査・トラブルシューティング用)
export LOGGING_LEVEL_ROOT=info
export LOGGING_LEVEL_IDP_SERVER_AUTHENTICATION_INTERACTORS=info
export LOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOKS=info

# セッション管理
export REDIS_SESSION_TIMEOUT=5000

✅ 設定完了確認

  • API Key/Secret: AWS Secrets Manager に保存完了
  • 暗号化キー: 32バイト Base64エンコード確認
  • DB接続: Primary/Replica 接続テスト成功
  • Redis接続: ElastiCache クラスター接続成功
  • Redis認証: パスワード設定・認証テスト成功(本番環境)
  • RedisDB分離: セッション (DB 0) とキャッシュ (DB 1) の分離確認
  • 負荷テスト: 想定TPS での接続プール動作確認

🔗 関連ドキュメント