DAT CMS
DAT CMS は証明書を作成し、データベースに保存し、発行・検証サービスに適切な証明書を配信します。プロトコルの動作は DAT CMS 仕様で説明します。
ランタイム設定の作成
DAT 証明書管理サービス
サーバー
実行コマンド
データベース
DAT 証明書
アクセス制御
Docker で実行
コンテナーは non-root ユーザーで実行します。SQLite を使う場合は書き込み可能なデータディレクトリをマウントします。トークンとデータベースパスワードはコマンド履歴ではなく Secret 注入機構で渡します。
docker run --rm --name dat-cms -p 8088:8088 \
--user 10001:10001 \
-v "$PWD/dat-cms-data:/data" \
-e PORT=8088 \
-e DB_URI='sqlite:/data/data.db' \
-e TOKEN_MASTER='replace-with-a-secret' \
-e TOKEN_CERT_FULL='replace-with-a-secret' \
-e TOKEN_CERT_VERIFY='replace-with-a-secret' \
sarolab/dat-cmsデータベース
DB_URI で SQLite、PostgreSQL、MySQL 接続を設定します。MariaDB は MySQL プロトコルで接続します。CMS は証明書クエリ結果をスナップショットとしてキャッシュし、ストレージ更新が一時的に失敗しても最後の成功スナップショットを提供し続けます。
DB_CACHE_SECS はスナップショットの更新間隔、DB_QUERY_TIMEOUT_SECS は更新クエリの制限時間を設定します。成功スナップショットがなくストレージを読み取れない場合、サービスは DAT_STORE_UNAVAILABLE を返します。
アクセスロール
| 環境変数 | 権限 | 使用者 |
|---|---|---|
TOKEN_MASTER | 証明書を登録し、保護されたバージョンを取得 | 運用 |
TOKEN_CERT_FULL | 完全な証明書を取得 | DAT 発行サービス |
TOKEN_CERT_VERIFY | 検証専用証明書を取得 | 検証・復号サービス |
各変数は、カンマ区切りの英数字トークンを受け付けます。ロールのトークンリストが空の場合、そのロールのエンドポイントは公開され、警告がログに記録されます。
証明書の生成
master ロールは、署名アルゴリズム、暗号化アルゴリズム、伝播遅延、発行期間、TTL を指定して証明書を登録します。伝播遅延中に、発行可能になる前の新しい証明書をサービスが同期します。
クライアント統合
- 発行サービスには full トークンと完全証明書エンドポイントを使用します。
- 検証サービスには verify トークンと検証専用オプションを使用します。
- 初回同期の結果を確認し、起動を失敗させる必要がある場合は即時同期 API を呼び出します。
- 自動同期が有効な場合は、アプリケーション終了時にマネージャーを閉じます。
各言語の builder と終了動作については ライブラリガイドを参照してください。
運用チェック
/healthと/version/apiは認証なしで状態を報告します。/versionは、そのロールが設定されている場合に master トークンを必要とします。- 標準出力と標準エラーからログを収集します。
- 終了シグナルを転送し、データベースとスケジューラーが閉じる時間を確保します。
Kubernetes
コンテナーポートと probe をサービスポートに合わせ、non-root ユーザーが書き込めるようデータディレクトリをマウントします。トークンとデータベース接続情報は Secrets で注入します。
securityContext:
runAsNonRoot: true
runAsUser: 10001
runAsGroup: 10001
containers:
- name: dat-cms
image: sarolab/dat-cms
ports: [{ containerPort: 8088 }]
readinessProbe: { httpGet: { path: /health, port: 8088 } }
livenessProbe: { httpGet: { path: /health, port: 8088 } }