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

Cockpit 構成

Cockpit は、起動時に一度だけ読み込まれる環境変数のみで構成されます (ローカル用途では .env ファイルもサポートされます)。オンプレミスでは、これらの 変数は External Secrets Operator を通じて OpenBao から解決され、環境変数として Pod に注入されます — イメージに焼き込まれることも、Git にコミットされることもありません。

実際のシークレットは決してコミットしない

ここに示す値はすべてプレースホルダーです。シークレット(データベース DSN、署名・ 暗号化キー、クライアントシークレット、トークン)は決してハードコードしたり Git に コミットしたりしないでください — シークレットエンジンに保存し、デプロイ時に注入します。 シークレットの取得 と シークレットマネージャー統合 を参照してください。

シークレットの取得​

オンプレミスでは、環境固有の構成は OpenBao に保持され、デプロイ時に マテリアライズされるため、シークレット値はシークレットエンジンの中にのみ存在します。

  1. 環境固有の変数一式(実際のシークレット値を含む)を OpenBao に保存します。
  2. デプロイ時に External Secrets Operator がそれを取得し、インメモリ(tmpfs)の Kubernetes Secret をマテリアライズします。
  3. その Secret は、マウントされたファイルとしてではなく、環境変数(envFrom)として Cockpit Pod に公開されます。
  4. 構成を変更するには、OpenBao の値を更新して再デプロイします — イメージ内の編集や Git への保存は一切ありません。

環境変数リファレンス​

本番環境は弱いシークレットでは起動しません

RUST_ENV=production の場合、JWT_SECRET、ENCRYPTION_KEY、HMAC_KEY、 WEBAUTHN_RP_ID、WEBAUTHN_ALLOWED_ORIGINS が欠落・脆弱な場合、または PWNED_PASSWORDS_ENABLED=false の場合、サーバーは起動を拒否します。強力な ランダム値を生成して OpenBao に保存してください — 決してコミットしないでください。

サーバーと TLS​

変数既定値目的
HOST127.0.0.1バインドアドレス(コンテナでは 0.0.0.0 を設定)
PORT3000HTTP ポート
TLS_PORT3443HTTPS ポート(0 で無効化。開発用証明書は自動生成)
TLS_CERT_PATH / TLS_KEY_PATH(未設定)TLS 証明書 / キーの PEM パス
KMIP_TLS_PORT5696KMIP(OASIS TTLV over TLS)リスナー。0 で無効化
PUBLIC_BASE_URLhttps://{host}:{tls_port}API/マシン向けオリジン(DKE サービス URL、JWKS、ACME/EST)
FRONTEND_BASE_URL(導出)SPA/ブラウザ向けオリジン(OIDC リダイレクト、メールリンク)
CORS_ORIGINShttp://localhost:5180許可する CORS オリジン(カンマ区切り)

データベースとキャッシュ​

変数既定値目的
DATABASE_URLpostgres://…/dke_cockpitPostgreSQL DSN(localhost 以外には sslmode=require が自動付与)
REDIS_URLmemorymemory(インプロセス)または redis://host:port — 複数レプリカでは Redis が必須
PostgreSQL のみ

Cockpit のデータストアは PostgreSQL のみです。スキーマのマイグレーションは 起動時に自動実行されます — 初回起動時にはデータベースロールに DDL 権限が必要です。 個別のマイグレーションジョブは不要です。

シークレットと暗号(本番環境で必須)​

変数目的
JWT_SECRETHS256 JWT 署名キー(64 文字以上)
JWT_SECRET_KID / JWT_SECRETS_PREVIOUS現在のキー ID と過去のキー(ローテーション用)
ENCRYPTION_KEY保存データ/資格情報用の AES-256 キー(32 バイト hex)
HMAC_KEY監査ログ完全性用の HMAC-SHA256 キー(32 バイト hex)
RUST_ENVproduction で厳格なフェイルクローズド検査を有効化

認証とパスキー​

変数既定値目的
WEBAUTHN_RP_IDlocalhostWebAuthn Relying Party ID(本番: 必須、localhost 不可)
WEBAUTHN_RP_NAMEDKE Cockpitパスキーのプロンプトに表示される名前
WEBAUTHN_ALLOWED_ORIGINS(開発用リスト)許可オリジン(本番: すべて https://、localhost 不可)
PWNED_PASSWORDS_ENABLEDtrueHIBP 漏えいパスワード検査(本番: false は起動失敗)
DKE_ADMIN_PASSWORD(未設定)初回起動時の管理者パスワード。未設定の場合、強力なランダムパスワードが生成され、起動ログに一度だけ出力されます(初回ログイン時に変更が必要)

外部 IdP(Entra ID、Okta、Keycloak、汎用 OIDC)は環境変数ではなく、 テナントごとに Cockpit コンソールで構成します — アイデンティティと SSO を参照してください。

DKE 365​

変数目的
DKE_BASE_DOMAINDKE サービス URL の DNS ベース — 各サービスは https://{slug}.{DKE_BASE_DOMAIN}(ワイルドカード DNS + TLS が必要)
DKE_AUDIENCE_DOMAINJWT オーディエンス / Azure AD identifier-URI の頂点(未設定時は DKE_BASE_DOMAIN にフォールバック)
DKE_DEFAULT_GRAPH_TENANT_ID / _CLIENT_ID / _CLIENT_SECRETAzure AD 登録を自動プロビジョニングするフォールバックの Microsoft Graph アプリ
DKE_ALLOW_PERMISSIVE_MODE開発/テスト専用 — 本番では必ず未設定
DKE_TENANT_DECRYPT_RPS_MAXテナントごとの復号レート上限(既定 100)

オブザーバビリティ​

変数既定値目的
RUST_LOGdke_api=infoログレベルフィルター
METRICS_ENABLEDfalseGET /metrics で Prometheus メトリクスを公開
METRICS_BEARER_TOKEN(未設定)/metrics を保護するベアラートークン — 必須。本番でトークンなしにメトリクスを有効化すると無効化されます(フェイルクローズド)

ハードニング​

変数既定値目的
DKE_TRUSTED_PROXY_CIDRS(空)これらの送信元 CIDR のみ cf-connecting-ip / cf-ipcountry を設定可能
DKE_FAIL_CLOSED_AUDIT本番=trueセキュリティ監査の書き込みに失敗した場合に 503 を返す
DKE_AUDIT_WORM_PATH(未設定)任意の Write-Once(WORM)監査シンクのパス

環境の例(本番相当)​

# Environment
RUST_ENV=production
RUST_LOG=dke_api=info

# Database & cache
DATABASE_URL=postgres://user:pass@db-host:5432/dke_cockpit
REDIS_URL=redis://redis-host:6379

# Secrets (all required in production)
JWT_SECRET=<random string, >= 64 chars>
ENCRYPTION_KEY=<64 hex chars = 32 bytes>
HMAC_KEY=<64 hex chars = 32 bytes>

# Server / TLS
HOST=0.0.0.0
PORT=3000
TLS_PORT=3443
TLS_CERT_PATH=/etc/dke/tls/fullchain.pem
TLS_KEY_PATH=/etc/dke/tls/privkey.pem
CORS_ORIGINS=https://cockpit.example.com
PUBLIC_BASE_URL=https://cockpit-api.example.com
FRONTEND_BASE_URL=https://cockpit.example.com

# Passwords / passkeys
PWNED_PASSWORDS_ENABLED=true
WEBAUTHN_RP_ID=cockpit.example.com
WEBAUTHN_RP_NAME=DuoKey Cockpit
WEBAUTHN_ALLOWED_ORIGINS=https://cockpit.example.com

# DKE 365
DKE_BASE_DOMAIN=dke.example.com
DKE_AUDIENCE_DOMAIN=example.com

# Observability
METRICS_ENABLED=true
METRICS_BEARER_TOKEN=<random token>

# Hardening
DKE_TRUSTED_PROXY_CIDRS=10.0.0.0/8,172.16.0.0/12
DKE_FAIL_CLOSED_AUDIT=true
HSM / ボールトの資格情報は環境変数ではありません

ボールト/HSM バックエンド(Securosys、クラウド KMS、ソフトウェアボールト、MPC など)は、 ENCRYPTION_KEY で暗号化された資格情報とともにテナントごとにデータベースへ保存され、 Cockpit の UI から構成します — 環境変数では構成しません。


トラブルシューティング​

症状考えられる原因対処
本番で Pod が即座に終了する必須シークレットが欠落または脆弱(JWT_SECRET、ENCRYPTION_KEY、HMAC_KEY、WEBAUTHN_*)起動ログを確認し、強力な値を生成して OpenBao から再注入
初回起動時にデータベースエラー自動マイグレーションに必要な DDL 権限がデータベースロールにない初回起動用に dke_cockpit データベースへの DDL 権限を付与
1 つのレプリカでしかログインできない複数レプリカで REDIS_URL=memoryREDIS_URL を共有 Redis に向ける
/metrics が何も返さないMETRICS_BEARER_TOKEN なしでメトリクスを有効化(フェイルクローズド)ベアラートークンを設定して再デプロイ
ブラウザで CORS エラーCORS_ORIGINS にフロントエンドのオリジンがない正確な https:// オリジンを追加

続いて セキュリティ → シークレット管理(OpenBao/ESO の セットアップ)へ進むか、インストール に戻ってください。