第4章 Ceph の伝送時暗号化

messenger バージョン 2 プロトコルを使用して、ネットワーク経由ですべての Ceph トラフィックの暗号化を有効にできます。メッセンジャー v2 の secure モード設定は、Ceph デーモンと Ceph クライアント間の通信を暗号化し、エンドツーエンドの暗号化を提供します。

Ceph の有線プロトコルの 2 つ目のバージョンである msgr2 には、以下の新機能が含まれています。

  • 安全なモードは、ネットワークを介したすべてのデータの移動を暗号化します。
  • 認証ペイロードのカプセル化による改善。
  • 機能のアドバタイズおよびネゴシエーションの改善。

Ceph デーモンは、レガシー、v1 互換、および新しい v2 互換の Ceph クライアントを同じストレージクラスターに接続することができるように、複数のポートにバインドします。Ceph Monitor デーモンに接続する Ceph クライアントまたはその他の Ceph デーモンは、まず v2 プロトコルの使用を試みますが、可能でない場合は古い v1 プロトコルが使用されます。デフォルトでは、メッセンジャープロトコル v1v2 の両方が有効です。新規の v2 ポートは 3300 で、レガシー v1 ポートはデフォルトで 6789 になります。

messenger v2 プロトコルには、v1 プロトコルまたは v2 プロトコルを使用するかどうかを制御する 2 つの設定オプションがあります。

  • ms_bind_msgr1 - このオプションは、デーモンが v1 プロトコルと通信するポートにバインドするかどうかを制御します。デフォルトでは true です。
  • ms_bind_msgr2 - このオプションは、デーモンが v2 プロトコルと通信するポートにバインドするかどうかを制御します。デフォルトでは true です。

同様に、使用する IPv4 アドレスと IPv6 アドレスに基づいて 2 つのオプションを制御します。

  • ms_bind_ipv4 - このオプションは、デーモンが IPv4 アドレスにバインドするかどうかを制御します。デフォルトでは true です。
  • ms_bind_ipv6 - このオプションは、デーモンが IPv6 アドレスにバインドするかどうかを制御します。デフォルトでは true です。
注記

メッセンジャープロトコル v1 または v2 を使用する Ceph デーモンまたはクライアントは、スロットル、つまりメッセージキューの増大を制限する機能を実装できます。まれに、デーモンまたはクライアントがスロットルを超えて、メッセージ処理に遅延が生じることがあります。スロットル制限に達すると、次の低レベルの警告メッセージが表示されます。

Throttler Limit has been hit.
Some message processing may be significantly delayed.

msgr2 プロトコルは、以下の 2 つの接続モードをサポートします。

  • crc

    • cephx で接続を確立すると、強固な初期認証を提供します。
    • ビットフリップから保護する crc32c 整合性チェックを提供します。
    • 悪意のある中間者攻撃に対する保護を提供しません。
    • 盗聴者がすべての認証後のトラフィックを見るのを妨げません。
  • secure

    • cephx で接続を確立すると、強固な初期認証を提供します。
    • 認証後トラフィックをすべて完全に暗号化します。
    • 暗号化整合性チェックを提供します。

デフォルトのモードは crc です。

Red Hat Ceph Storage クラスターを計画するときは、暗号化のオーバーヘッドを含めるために、クラスターの CPU 要件を必ず考慮してください。

重要

現在、secure なモードの使用は、Red Hat Enterprise Linux 上の CephFS や krbd など、Ceph カーネルクライアントでサポートされています。secure モードの使用は、OpenStack Nova、Glance、Cinder などの librbd を使用する Ceph クライアントでサポートされています。

アドレスの変更

メッセンジャープロトコルの両方のバージョンが、同じストレージクラスターに共存するために、アドレスのフォーマットが変更されました。

  • 古いアドレスの形式は、IP_ADDR: PORT / CLIENT_ID です (例: 1.2.3.4:5678/91011)。
  • 新しいアドレスの形式は、PROTOCOL_VERSION : IP_ADDR : PORT / CLIENT_ID です (例: v2:1.2.3.4:5678/91011)。たとえば、PROTOCOL_VERSIONv1 または v2 のいずれかになります。

Ceph デーモンは複数のポートにバインドするようになったため、デーモンは単一のアドレスではなく複数のアドレスを表示します。モニターマップのダンプの例を以下に示します。

epoch 1
fsid 50fcf227-be32-4bcb-8b41-34ca8370bd17
last_changed 2021-12-12 11:10:46.700821
created 2021-12-12 11:10:46.700821
min_mon_release 14 (nautilus)
0: [v2:10.0.0.10:3300/0,v1:10.0.0.10:6789/0] mon.a
1: [v2:10.0.0.11:3300/0,v1:10.0.0.11:6789/0] mon.b
2: [v2:10.0.0.12:3300/0,v1:10.0.0.12:6789/0] mon.c

また、mon_host 設定オプション、-m を使用してコマンドラインでアドレスを指定することで、新しいアドレス形式がサポートされます。

接続フェーズ

暗号化された接続を確立するには、以下の 4 つのフェーズがあります。

バナー
接続で、クライアントとサーバーの両方がバナーを送信します。現在、Ceph バナーは ceph 0 0n です。
認証エクスチェンジ
送信または受信されたすべてのデータは、接続の間、フレームに含まれます。サーバーは、認証が完了したかどうかについて、および接続モードについて決定します。フレームフォーマットは修正され、使用される認証フラグに応じて 3 つの異なる形式にすることができます。
メッセージフローハンドシェイクエクスチェンジ
ピアは相互に識別し、セッションを確立します。クライアントは最初のメッセージを送信し、サーバーは同じメッセージで応答します。クライアントが誤ったデーモンと通信すると、サーバーが接続を閉じることがあります。新しいセッションの場合、クライアントとサーバーはメッセージのエクスチェンジに進みます。クライアントのクッキーはセッションを識別するために使用され、既存のセッションに再接続できます。
メッセージエクスチェンジ
クライアントおよびサーバーは、接続が閉じられるまで、メッセージのエクスチェンジを開始します。

関連情報