26.2. ノードセキュリティーの設定 (ライブラリーモード)
ライブラリーモードでは、ノード認証は JGroups 設定で直接設定されます。JGroups を設定してノードがクラスターへの参加またはマージの際に相互に認証できるようにします。認証は SASL を使用し、
SASL プロトコルを JGroups XML 設定に追加して有効にされます。
SASL は、認証ハンドシェイクに必要な特定の情報を取得するために、
CallbackHandlers などの JAAS の概念に基づいています。ユーザーはクライアントとサーバーの両サイドに独自の CallbackHandlers を指定する必要があります。
重要
JAAS API はユーザー認証および承認の設定時にのみ利用でき、ノードのセキュリティー用には利用できません。
注記
この例では、
CallbackHandler クラスは例示する目的でのみ使用されており、Red Hat JBoss Data Grid リリースには含まれていません。ユーザーは特定の LDAP 実装に適した CallbackHandler クラスを提供する必要があります。
例26.4 JGroups での SASL 認証のセットアップ
上記の例は、
DIGEST-MD5 メカニズムを使用します。各ノードは、クラスターへの参加時に使用するユーザーとパスワードを宣言する必要があります。
重要
認証を有効にするには、SASL プロトコルを GMS プロトコルの前に配置する必要があります。
26.2.1. 単純な承認コールバックハンドラー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
複雑度の高い Kerberos や LDAP アプローチが不要な場合、
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
SimpleAuthorizingCallbackHandler クラスを使用できます。これを有効にするには、以下の例にあるように server_callback_handler と client_callback_handler の両方を org.jgroups.auth.sasl.SimpleAuthorizingCallbackHandler に設定します。
SimpleAuthorizingCallbackHandler は、java.util.Properties のインスタンスにコンストラクターを渡すプログラムを用いた方法によるか、または -DpropertyName=propertyValue 表記を使用してコマンドラインに設定される標準的な Java システムプロパティーを使用して設定できます。以下のプロパティーを使用できます。
sasl.credentials.properties- principal=password として表されるプリンシパル/クレデンシャルのマッピングが含まれるプロパティーファイルへのパス。sasl.local.principal- ローカルノードを識別するために使用されるプリンシパルの名前。これは sasl.credentials.properties ファイルに存在している必要があります。sasl.roles.properties- (オプション) principal=role1,role2,role3 として表されるプリンシパル/ロールのマッピングが含まれるプロパティーファイルへのパス。sasl.role- (オプション) プリンシパルがある場合にのみノードの参加を承認します (ある場合)。sasl.realm- (オプション) SASL メカニズムが要求し、使用するレルムの名前。
26.2.2. ライブラリーモードのノード認証の設定 (DIGEST-MD5) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ノードの動作は、これがコーディネーターノードか他のノードかに応じて異なります。コーディネーターは SASL サーバーとして機能し、参加またはマージするノードは SASL クライアントとして機能します。ライブラリーモードで DIGEST-MD5 メカニズムを使用する場合、サーバーとクライアントのコールバックを指定し、サーバーとクライアントがクレデンシャルの取得方法を認識できるようにする必要があります。そのため、2 つの
CallbackHandler が必要になります。
server_callback_handler_classはコーディネーターによって使用されます。client_callback_handler_classは他のノードによって使用されます。
以下の例は、3 つの
CallbackHandler を示しています。
例26.5 コールバックハンドラー
JGroups は、すべてのノードがクライアントの動作によってコーディネーターまたはクライアントとして機能できるように設計されています。そのため、現在のコーディネーターノードがダウンする場合、後続チェーンの次のノードがコーディネーターになります。この動作のために、サーバーとクライアントのコールバックハンドラーはどちらも Red Hat JBoss Data Grid 実装の SASL 内で指定される必要があります。
26.2.3. ライブラリーノードのノード認証の設定 (GSSAPI) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
GSSAPI メカニズムを使用してライブラリーモードでノードの認証を実行する際に、
login_module_name を callback の代わりに指定する必要があります。
このログインモジュールは、サーバーに対してクライアントを認証するために使用される、有効な Kerberos チケットを取得するために使用されます。また、クライアントプリンシパルも
jgroups/$server_name@REALM として構成されるため、server_name を指定する必要もあります。
例26.6 コーディネーターノードでのログインモジュールおよびサーバーの指定
<SASL mech="GSSAPI"
server_name="node0/clustered"
login_module_name="krb-node0"
server_callback_handler_class="org.infinispan.test.integration.security.utils.SaslPropCallbackHandler" />
<SASL mech="GSSAPI"
server_name="node0/clustered"
login_module_name="krb-node0"
server_callback_handler_class="org.infinispan.test.integration.security.utils.SaslPropCallbackHandler" />
コーディネーターノードでは、
server_callback_handler_class をノードの承認用に指定する必要があります。これにより、認証された参加ノードがクラスターに参加するパーミッションを持つかどうかが決まります。
注記
サーバーのプリンシパルは常に
jgroups/server_name として構成されるため、Kerberos のサーバープリンシパルも jgroups/server_name である必要があります。たとえば、Kerberos のサーバー名が jgroups/node1/mycache の場合、サーバー名は node1/mycache である必要があります。