環境変数・セキュリティパラメータ設定
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接続URLDB_READER_URL- レプリカDB接続URLREDIS_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 Pool | Reader Pool | Redis Pool | Cache TTL |
|---|---|---|---|---|---|
| 小規模 | < 100 TPS | 15 | 30 | 50 | 300s |
| 中規模 | 100-500 TPS | 50 | 80 | 100 | 600s |
| 大規模 | 500+ TPS | 100 | 150 | 200 | 900s |
📝 application.yaml 設定詳細
idp-server の設定は application.yaml で定義され、環境変数で上書き可能です。以下に全設定項目の一覧表と詳細解説を記載します。
📋 設定パラメータ一覧表
idp.configurations (コア設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
adminTenantId | ADMIN_TENANT_ID | 管理テナントID | 67e7eae6-62b0-4500-9eff-87459f63fc66 | 本番固有UUID |
apiKey | IDP_SERVER_API_KEY | 管理API認証キー | なし (必須) | Secrets Manager |
apiSecret | IDP_SERVER_API_SECRET | 管理API認証シークレット | なし (必須) | Secrets Manager |
encryptionKey | ENCRYPTION_KEY | データ暗号化キー (AES-256) | なし (必須) | Secrets Manager |
databaseType | DATABASE_TYPE | データベース種類 | POSTGRESQL | POSTGRESQL |
server (サーバーポート設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
server.port | SERVER_PORT | HTTPリッスンポート | 8080 | 8080 |
Note: Spring Bootのデフォルトポート 8080 が使用されます。リバースプロキシ(Nginx、ALB等)からのプロキシ先ポートとして指定してください。通常は変更不要です。
idp.server (サーバー設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
shutdown.delay | IDP_SERVER_SHUTDOWN_DELAY | Graceful shutdown遅延時間 | 5s | 5s (負荷に応じて調整) |
Graceful Shutdown説明:
- アプリケーション停止時に新規リクエストを受け付けず、既存リクエストの完了を待つ
- Kubernetes等のオーケストレータでのローリングアップデート時に重要
delayは、終了シグナル受信後、既存リクエスト完了を待つ時間
idp.auth-session (認証セッションCookie設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
same-site | IDP_AUTH_SESSION_SAME_SITE | Cookie SameSite属性 (Lax/None) | Lax | Lax |
secure | IDP_AUTH_SESSION_SECURE | Cookie Secure フラグ | true | true |
SameSite属性説明:
- Lax: 同一オリジンからのリクエストでCookieを送信(推奨)
- None: クロスオリジンでもCookieを送信(HTTPS必須。クロスドメイン構成時に使用)
idp.session (セッション管理設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
enabled | SESSION_REDIS_ENABLE | Redisセッション有効化 | true | true |
redis.host | REDIS_HOST | Redis ホスト | localhost | ElastiCache エンドポイント |
redis.port | REDIS_PORT | Redis ポート | 6379 | 6379 |
redis.database | REDIS_SESSION_DATABASE | Redis データベース番号 | 0 | 0 |
redis.timeout | REDIS_SESSION_TIMEOUT | 接続タイムアウト (ミリ秒) | 10000 | 5000 |
redis.password | REDIS_SESSION_PASSWORD | Redis パスワード | (空) | Secrets Manager |
redis.maxTotal | REDIS_SESSION_MAX_TOTAL | 最大接続数 | 20 | 100 |
redis.maxIdle | REDIS_SESSION_MAX_IDLE | 最大アイドル接続数 | 3 | 10 |
redis.minIdle | REDIS_SESSION_MIN_IDLE | 最小アイドル接続数 | 2 | 5 |
idp.time (タイムゾーン設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
zone | TIME_ZONE | アプリケーションタイムゾーン | UTC | UTC |
idp.datasource.control-plane (Control Plane用データベース)
Writer 設定
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
url | CONTROL_PLANE_DB_WRITER_URL | 書き込み用DB接続URL | jdbc:postgresql://localhost:5432/idpserver | RDS Primary エンドポイント |
username | CONTROL_PLANE_DB_WRITER_USER_NAME | Control Plane用DBユーザー | 必須(デフォルトなし) | idp_admin |
password | CONTROL_PLANE_DB_WRITER_PASSWORD | Control Plane用DBパスワード | 必須(デフォルトなし) | Secrets Manager |
connection-timeout | CONTROL_PLANE_DB_WRITER_TIMEOUT | 接続タイムアウト (ms) | 30000 | 30000 |
maximum-pool-size | CONTROL_PLANE_DB_WRITER_MAX_POOL_SIZE | 最大接続プールサイズ | 10 | 15 |
minimum-idle | CONTROL_PLANE_DB_WRITER_MIN_IDLE | 最小アイドル接続数 | 5 | 5 |
idle-timeout | CONTROL_PLANE_DB_WRITER_IDLE_TIMEOUT | アイド ル接続タイムアウト (ms) | 600000 | 600000 |
max-lifetime | CONTROL_PLANE_DB_WRITER_MAX_LIFETIME | 接続の最大生存時間 (ms) | 1800000 | 1800000 |
keepalive-time | CONTROL_PLANE_DB_WRITER_KEEPALIVE_TIME | Keepalive間隔 (ms) | 180000 | 180000 |
validation-timeout | CONTROL_PLANE_DB_WRITER_VALIDATION_TIMEOUT | 接続検証タイムアウト (ms) | 5000 | 5000 |
Reader 設定
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
url | CONTROL_PLANE_DB_READER_URL | 読み込み用DB接続URL | jdbc:postgresql://localhost:5433/idpserver | RDS Replica エンドポイント |
username | CONTROL_PLANE_DB_READER_USER_NAME | Control Plane用読み込み専用DBユーザー | 必須(デフォルトなし) | idp_admin_ro |
password | CONTROL_PLANE_DB_READER_PASSWORD | Control Plane用読み込み専用DBパスワード | 必須(デフォルトなし) | Secrets Manager |
connection-timeout | CONTROL_PLANE_DB_READER_TIMEOUT | 接続タイムアウト (ms) | 30000 | 30000 |
maximum-pool-size | CONTROL_PLANE_DB_READER_MAX_POOL_SIZE | 最大接続プールサイズ | 10 | 20 |
minimum-idle | CONTROL_PLANE_DB_READER_MIN_IDLE | 最小アイドル接続数 | 5 | 8 |
idle-timeout | CONTROL_PLANE_DB_READER_IDLE_TIMEOUT | アイドル接続タイムアウト (ms) | 600000 | 600000 |
max-lifetime | CONTROL_PLANE_DB_READER_MAX_LIFETIME | 接続の最大生存時間 (ms) | 1800000 | 1800000 |
keepalive-time | CONTROL_PLANE_DB_READER_KEEPALIVE_TIME | Keepalive間隔 (ms) | 180000 | 180000 |
validation-timeout | CONTROL_PLANE_DB_READER_VALIDATION_TIMEOUT | 接続検証タイムアウト (ms) | 5000 | 5000 |
idp.datasource.app (アプリケーション用データベース)
Writer 設定
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
url | DB_WRITER_URL | 書き込み用DB接続URL | jdbc:postgresql://localhost:5432/idpserver | RDS Primary エンドポイント |
username | DB_WRITER_USER_NAME | アプリ用DBユーザー | 必須(デフォルトなし) | idp_app_user |
password | DB_WRITER_PASSWORD | アプリ用DBパスワード | 必須(デフォルトなし) | Secrets Manager |
connection-timeout | DB_WRITER_TIMEOUT | 接続タイムアウト (ms) | 30000 | 30000 |
maximum-pool-size | DB_WRITER_MAX_POOL_SIZE | 最大接続プールサイズ | 30 | 50 |
minimum-idle | DB_WRITER_MIN_IDLE | 最小アイドル接続数 | 10 | 15 |
idle-timeout | DB_WRITER_IDLE_TIMEOUT | アイドル接続タイムアウト (ms) | 600000 | 600000 |
max-lifetime | DB_WRITER_MAX_LIFETIME | 接続の最大生存時間 (ms) | 1800000 | 1800000 |
keepalive-time | DB_WRITER_KEEPALIVE_TIME | Keepalive間隔 (ms) | 180000 | 180000 |
validation-timeout | DB_WRITER_VALIDATION_TIMEOUT | 接続検証タイムアウト (ms) | 5000 | 5000 |
Reader 設定
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
url | DB_READER_URL | 読み込み用DB接続URL | jdbc:postgresql://localhost:5433/idpserver | RDS Replica エンドポイント |
username | DB_READER_USER_NAME | アプリ用読み込み専用DBユーザー | 必須(デフォルトなし) | idp_app_user_ro |
password | DB_READER_PASSWORD | アプリ用読み込み専用DBパスワード | 必須(デフォルトなし) | Secrets Manager |
connection-timeout | DB_READER_TIMEOUT | 接続タイムアウト (ms) | 30000 | 30000 |
maximum-pool-size | DB_READER_MAX_POOL_SIZE | 最大接続プールサイズ | 30 | 80 |
minimum-idle | DB_READER_MIN_IDLE | 最小アイドル接続数 | 10 | 25 |
idle-timeout | DB_READER_IDLE_TIMEOUT | アイドル接続タイムアウト (ms) | 600000 | 600000 |
max-lifetime | DB_READER_MAX_LIFETIME | 接続の最大生存時間 (ms) | 1800000 | 1800000 |
keepalive-time | DB_READER_KEEPALIVE_TIME | Keepalive間隔 (ms) | 180000 | 180000 |
validation-timeout | DB_READER_VALIDATION_TIMEOUT | 接続検 証タイムアウト (ms) | 5000 | 5000 |
注意: DATABASE_TYPE環境変数(POSTGRESQL/MYSQL)により実行時にデータベース種別が切り替わります。環境変数は同じものを使用するため、接続先URLで適切なJDBCプレフィックスを指定してください。
idp.cache (Redis キャッシュ設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
enabled | CACHE_ENABLE | キャッシュ有効化 | true | true |
timeToLiveSecond | CACHE_TIME_TO_LIVE_SECOND | キャッシュTTL (秒) | 300 | 600 |
redis.host | REDIS_HOST | Redis ホスト | localhost | ElastiCache エンドポイント |
redis.port | REDIS_PORT | Redis ポート | 6379 | 6379 |
redis.database | REDIS_CACHE_DATABASE | Redis データベース番号 | 0 | 1 (セッションと分離推奨) |
redis.timeout | REDIS_CACHE_TIMEOUT | 接続タイムアウト (ミリ秒) | 10000 | 5000 |
redis.password | REDIS_CACHE_PASSWORD | Redis パスワード | (空) | Secrets Manager |
redis.maxTotal | REDIS_MAX_TOTAL | 最大接続数 | 20 | 100 |
redis.maxIdle | REDIS_MAX_IDLE | 最大アイドル接続数 | 3 | 10 |
redis.minIdle | REDIS_MIN_IDLE | 最小アイドル接続数 | 2 | 5 |
トークンキャッシュ設定
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
| - | TOKEN_CACHE_ENABLED | トークンイントロスペクションのRedisキャッシュ有効化 | true | true |
注意: CACHE_ENABLE=true(Redis有効)が前提条件(CACHE_ENABLE=false の場合は no-op に縮退)。有効時は (1) トークン発行時に writer 接続の INSERT と並行に Redis へ write-through し、(2) イントロスペクション時に cache-aside で参照します(TTL 60秒)。発行直後のイントロスペクションも Redis から返るため、reader 接続のレプリケーション遅延(read-after-write 不整合)を踏みません。レプリカ遅延は Aurora で典型 10〜20ms・書き込みピーク時に増加し、非 Aurora レプリカでは秒単位になり得るため、レプリカ構成では正しさの観点で有効のままにしてください。無効化する場合は明示的に TOKEN_CACHE_ENABLED=false を設定します(opt-out)。中〜高負荷環境(100+ VU)でIntrospection p95が63-74%改善されます。
logging.level (ログレベル設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
root | LOGGING_LEVEL_ROOT | ルートログレベル | info | info |
web | LOGGING_LEVEL_WEB | Webレイヤーログレベル | info | info |
platform | LOGGING_LEVEL_IDP_SERVER_PLATFORM | プラットフォームログレベル | info | info |
authentication | LOGGING_LEVEL_IDP_SERVER_AUTHENTICATION_INTERACTORS | 認証処理ログレベル | info | info |
control_plane | LOGGING_LEVEL_IDP_SERVER_CONTROL_PLANE | コントロールプレーンログレベル | info | info |
core.oidc | LOGGING_LEVEL_IDP_SERVER_CORE_OIDC | OIDC コアログレベル | info | info |
core.openid | LOGGING_LEVEL_IDP_SERVER_CORE_OPENID | OpenID コアログレベル | info | info |
core.adapters | LOGGING_LEVEL_IDP_SERVER_CORE_ADAPTERS | コアアダプターログレベル | info | info |
core.extension | LOGGING_LEVEL_IDP_SERVER_CORE_EXTENSION | コア拡張ログレベル | info | info |
email.aws | LOGGING_LEVEL_IDP_SERVER_EMAIL_AWS | AWS Email サービスログレベル | info | info |
federation | LOGGING_LEVEL_IDP_SERVER_FEDERATION | フェデレーションログレベル | info | info |
notification.push.fcm | LOGGING_LEVEL_IDP_SERVER_NOTIFICATION_PUSH_FCM | FCM プッシュ通知ログレベル | info | info |
security.event.hook.ssf | LOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOK_SSF | SSF セキュリティイベントログレベル | info | info |
security.event.hooks | LOGGING_LEVEL_IDP_SERVER_SECURITY_EVENT_HOOKS | セキュリティイベントログレベル | info | info |
adapters.springboot | LOGGING_LEVEL_IDP_SERVER_ADAPTERS_SPRING_BOOT | Spring Boot アダプターログレベル | info | info |
usecases | LOGGING_LEVEL_IDP_SERVER_USECASES | ユースケースログレベル | info | info |
authenticators.webauthn4j | LOGGING_LEVEL_IDP_SERVER_AUTHENTICATORS_WEBAUTHN4J | WebAuthn4J 認証ログレベル | info | info |
http.request.executor | LOGGING_LEVEL_IDP_SERVER_HTTP_REQUEST_EXECUTOR | HTTP リクエスト実行ログレベル | info | info |
request.response.logging | LOGGING_LEVEL_REQUEST_RESPONSE_LOGGING_FILTER | リクエスト/レスポンスログレベル | info | info (デバッグ時のみ debug) |
idp.logging.request-response (リクエスト/レスポンスデバッグログ設定)
| パラメータ | 環境変数 | 説明 | デフォルト値 | 本番推奨値 |
|---|---|---|---|---|
enabled | IDP_LOGGING_REQUEST_RESPONSE_ENABLED | リクエスト/レスポンスログ有効化 | false | false (デバッグ時のみ true) |
mask-tokens | IDP_LOGGING_REQUEST_RESPONSE_MASK_TOKENS | トークンマスキング有効化 | true | true |
max-body-size | IDP_LOGGING_REQUEST_RESPONSE_MAX_BODY_SIZE | ログ出力する最大ボディサイズ (バイト) | 10000 | 10000 |
endpoints | IDP_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 (非同期処理スレッドプール設定)
非同期処理(セキュリティイベント、ユーザーライフサイクルイベント、監査ログ)用のスレッドプール設定です。