Cockpit v2 における DKE 構成
DuoKey Cockpit v2 が提供する Double Key Encryption(DKE 365)の構成機能。
このページでは、DuoKey Cockpit v2 が提供するDKE 365 の構成機能について説明します。レガシーの Cockpit v1 のワークフローについては、本ガイドの Setup および Operations セクションを参照してください。

2種類のエンドポイントファミリー
DKE 365 は2種類のエンドポイントを公開します。
- Cockpit 管理者が DKE サービスをデプロイ、構成、管理するための管理サーフェス。Cockpit のユーザーセッションと、プラットフォームのロールベースアクセス制御によって保護されます。
- Microsoft 365 / Office が直接呼び出す公開 DKE プロトコル:
GetKeyは公開されており、Decryptは構成されている場合に Azure AD ベアラートークンを検証し、バインドされたアクセスポリシーを適用します。
サービスのライフサイクル
Provisioned → Running → Disabled → Stopped (+ Failed)
Running 状態のサービスのみが復号リクエストを処理します。
サービスの管理
Cockpit からは、新しい DKE サービスをデプロイし、鍵が DKE 対応であることを検証し、有効化(Azure AD アプリを自動プロビジョニング)、無効化または停止を行い、オーバーラップウィンドウを伴う鍵ローテーションを実施し、稼働状況とオンボーディング(DNS / CNAME)のガイダンスを監視できます。その後、Microsoft 365 / Office はサービスの公開プロトコルエンドポイント(version、GetKey、Decrypt)を直接呼び出します。

サービス構成フィールド
DKE サービスは、以下の項目で構成されます。
識別とルーティング
name、description、slug(サービス URL の構築に使われる GUID)、key_id(バインドされた RSA-2048/4096 鍵)、key_name(公開される kid URL に露出)、status。
アルゴリズム
algorithm: RSA-OAEP-256(既定)または RS256。
鍵ローテーションのオーバーラップ
cache_duration_hours(既定 24)。ローテーション中は、この期間にわたり以前の鍵が引き続き GetKey + Decrypt を処理します(previous_key_id / previous_key_retires_at)。
Azure AD / Entra
azure_tenant_id、azure_client_id、azure_audience、allowed_domains(B2B パートナードメイン。それぞれがそのテナント固有の有効な発行者にマッピングされます)、identity_provider_id(アプリの自動プロビジョニングに使われる Graph 認証情報)。
任意の mTLS
mtls_enabled、mtls_client_ca_pem、mtls_allowed_subjects、mtls_header_name(既定 X-ARR-ClientCert)。
許容的な復号(Permissive decrypt)
allow_anonymous(ホスト側でも許容モードが有効になっている非本番環境でのみ有効になります。本番環境では絶対に使用してはいけません)。
アクセス制御
access_policy_id は、復号のたびに評価されるアクセスポリシーをバインドします。

サービス構成の例
{
"name": "Contoso DKE",
"slug": "89c3b193-af16-4887-8031-43f88d475d9d",
"key_id": "<rsa-key-uuid>",
"key_name": "dke_key",
"azure_tenant_id": "<azure-tenant-guid>",
"azure_client_id": "<app-guid>",
"azure_audience": "https://89c3b193-af16-4887-8031-43f88d475d9d.duokey365.com",
"allowed_domains": ["partner.com"],
"algorithm": "RSA-OAEP-256",
"cache_duration_hours": 24,
"mtls_enabled": false,
"allow_anonymous": false,
"access_policy_id": "<policy-uuid>",
"identity_provider_id": "<idp-uuid>"
}
GetKey / Decrypt フロー
GetKey
Office はサービスの公開 JWK を取得し、組織の公開鍵の下でコンテンツを暗号化します。公開される鍵は標準的な RSA JWK で、その kid はサービス URL(https://{slug}.{base-domain}/dke/{slug}/{key_name}/{key_id})です。
Decrypt
Office はラップされた鍵を送り返します。Cockpit v2 はサービスを解決し、ステータスが Running であることを要求し、有効な鍵(現行鍵、またはローテーション期間中は以前の鍵)を選択し、任意の mTLS 検証を実行し、Azure AD JWT を検証し、バインドされたアクセスポリシーを適用したうえで、ボールト内で RSA-OAEP による復号を行います。秘密鍵がボールトの外に出ることはありません。
すべての復号は、crypto ティアの下でクライアント IP ごとにレート制限されます(1000 リクエスト/分)。

公開される鍵、およびリクエスト/レスポンスのペイロードは Microsoft の DKE プロトコル形式に従うため、Office と Purview はカスタム構成なしでサービスと相互運用できます。
Azure AD プロビジョニング(サービスの「登録」)
独立した「登録」ステップはありません。登録 = デプロイ → 有効化です。enable 時に、サービスに identity_provider_id が設定されていて、まだ Azure アプリが存在しない場合、Cockpit v2 は Microsoft Graph を呼び出して Azure AD アプリ登録(識別子 URI / オーディエンス、リダイレクト URL)を作成・構成し、生成された azure_client_id、azure_audience、azure_app_object_id を保存します。Graph 認証情報は、サービスの ID プロバイダーから、またはホストの DKE_DEFAULT_GRAPH_* フォールバック(Application.ReadWrite.All が必要)から取得されます。

ホストレベルの DKE 設定(Cockpit v2 環境)
以下の環境変数は Cockpit v2 のサーバー側で設定します。
| 変数 | 用途 |
|---|---|
DKE_BASE_DOMAIN | サービス接続 URL の DNS ベース — 各サービスは https://{slug}.{DKE_BASE_DOMAIN}(ワイルドカード DNS + TLS が必要) |
DKE_AUDIENCE_DOMAIN | JWT オーディエンス / Azure AD 識別子 URI のトップレベル(未設定時は DKE_BASE_DOMAIN にフォールバック) |
DKE_DEFAULT_GRAPH_TENANT_ID / DKE_DEFAULT_GRAPH_CLIENT_ID / DKE_DEFAULT_GRAPH_CLIENT_SECRET | Azure AD 登録の自動プロビジョニングに使われるフォールバック用の Microsoft Graph アプリ |
DKE_ALLOW_PERMISSIVE_MODE | 開発/テスト専用のオプトイン許容的復号 — 本番環境では未設定にする必要があります |
DKE_TENANT_DECRYPT_RPS_MAX | テナントごとの復号レート上限(既定 100) |
DKE_JWKS_CACHE_TTL_SECS | 復号トークン検証用の Azure AD JWKS キャッシュ TTL |
Microsoft Purview
DKE は Purview / MIP の DKE 鍵ストアであり、Double Key Encryption 型の秘密度ラベルは、これらの GetKey / Decrypt エンドポイントを指します(ラベルは Microsoft 側で構成されます — 秘密度ラベル と Microsoft Purview を参照してください)。Cockpit v2 は、データ損失防止連携のための独立したPurview DLP アプリタイプもさらに提供します。
DKE 鍵を誰が、どこから、いつ使用できるかを制御するには、続けて**アクセスポリシー** を参照してください。