Kerberos 認証
Elastic Stack のセキュリティ機能を構成して、Elasticsearch でユーザーを認証するための業界標準プロトコルである Kerberos V5 認証をサポートできます。
トランスポートネットワーク層で Kerberos レルムを使用して認証することはできません。
Kerberos でユーザーを認証するには、Kerberos レルムを構成し、ユーザーをロールにマッピングする必要があります。レルム設定の詳細については、Kerberos レルム設定を参照してください。
主要な概念
Kerberos レルムを設定する際に出会ういくつかの用語と概念があります:
- kdc
- キー配布センター。Kerberos チケットを発行するサービス。
- principal
- Kerberos プリンシパルは、Kerberos がチケットを割り当てることができる一意のアイデンティティです。ユーザーまたはサーバーが提供するサービスを識別するために使用できます。
Kerberos V5 プリンシパル名はprimary/instance@REALM
の形式で、primary
はユーザー名です。instance
はオプションの文字列で、プライマリを修飾し、プライマリからスラッシュ(/
)で区切られています。ユーザーの場合、通常は使用されません。サービスホストの場合、ホストの完全修飾ドメイン名です。REALM
は Kerberos レルムです。通常は大文字のドメイン名です。典型的なユーザープリンシパルの例は[email protected]
です。典型的なサービスプリンシパルの例はHTTP/[email protected]
です。 - realm
- レルムは、認証サーバーがユーザーとサービスを認証する権限を持つ管理境界を定義します。
- keytab
- プリンシパルと暗号化キーのペアを保存するファイルです。
このファイルに対する読み取り権限を持つ人は、ネットワーク内で他のサービスにアクセスするために資格情報を使用できるため、適切なファイル権限で保護することが重要です。
- krb5.conf
- デフォルトのレルム名、キー配布センター (KDC) の場所、レルム情報、ドメイン名から Kerberos レルムへのマッピング、およびレルムセッションキー暗号化タイプのデフォルト構成などの Kerberos 構成情報を含むファイルです。
- チケット付与チケット (TGT)
- TGT は、Kerberos 認証サーバーによって生成される認証チケットです。暗号化された認証情報が含まれています。
Kerberos レルムの構成
Kerberos はサービスを保護するために使用され、ユーザーを認証するためのチケットベースの認証プロトコルを使用します。Elasticsearch を構成して、ユーザーを認証するための業界標準プロトコルである Kerberos V5 認証プロトコルを使用できます。このシナリオでは、クライアントは認証のために Kerberos チケットを提示する必要があります。
Kerberos では、ユーザーは認証サービスで認証し、その後チケット付与サービスで TGT (チケット付与チケット) を生成します。このチケットは、認証のためにサービスに提示されます。TGT の取得に関する詳細については、Kerberos インストールドキュメントを参照してください。Elasticsearch クライアントは、最初に TGT を取得し、その後 Elasticsearch との認証プロセスを開始する必要があります。
始める前に
- 1. Kerberos を展開します。
環境に Kerberos インフラストラクチャを設定する必要があります。
Kerberos は、すべてのマシン間の時刻同期や、ドメイン内の正しい順方向および逆方向の DNS マッピングなど、多くの外部サービスが正常に機能するために必要です。詳細については、Kerberos ドキュメントを参照してください。
これらの手順は、Kerberos の展開を設定および構成することをカバーしていません。例が提供されている場合、それは MIT Kerberos V5 展開に関連しています。詳細については、MIT Kerberos ドキュメントを参照してください。 - 2. Java GSS を構成します。
Elasticsearch は、Kerberos 認証のために Java GSS フレームワークサポートを使用します。Kerberos 認証をサポートするために、Elasticsearch は次のファイルが必要です:krb5.conf
、Kerberos 構成ファイル- Elasticsearch サービスプリンシパルの資格情報を含む
keytab
ファイル
構成要件は、Kerberos セットアップに依存します。krb5.conf
ファイルを構成するには、Kerberos ドキュメントを参照してください。
Java GSS に関する詳細については、Java GSS Kerberos 要件を参照してください。
- 3. HTTP 用の TLS を有効にします。
Elasticsearch クラスターが本番モードで動作している場合、Kerberos 認証を有効にする前に、HTTP インターフェースを SSL/TLS を使用するように構成する必要があります。詳細については、Elasticsearch の HTTP クライアント通信を暗号化するを参照してください。
このステップは、Kibana 経由で Kerberos 認証をサポートするために必要です。Elasticsearch Rest API に対する Kerberos 認証には必要ありません。 - 4. トークンサービスを有効にします。
Elasticsearch の Kerberos 実装は、Elasticsearch トークンサービスを利用します。HTTP インターフェースで TLS を構成すると、このサービスは自動的に有効になります。次の設定をelasticsearch.yml
ファイルに追加することで、明示的に構成できます:
Yaml
xpack.security.authc.token.enabled: true
このステップは、Kibana 経由で Kerberos 認証をサポートするために必要です。Elasticsearch Rest API に対する Kerberos 認証には必要ありません。
Kerberos レルムを作成する
Elasticsearch で Kerberos レルムを構成するには:
- 1. Kerberos 構成ファイルを見つけるために JVM を構成します。
Elasticsearch は、シンプルで保護された GSSAPI ネゴシエーションメカニズム (SPNEGO) メカニズムを使用して Kerberos 認証をサポートするために、Java GSS と JAAS Krb5LoginModule を使用します。Kerberos 構成ファイル (krb5.conf
) は、デフォルトのレルム、キー配布センター (KDC)、および Kerberos 認証に必要なその他の構成詳細を提供します。JVM が構成プロパティを必要とする場合、このファイルを見つけて読み込もうとします。ファイルパスを構成するための JVM システムプロパティはjava.security.krb5.conf
です。JVM システムプロパティを構成するには、JVM オプションを設定を参照してください。このシステムプロパティが指定されていない場合、Java は慣例に基づいてファイルを見つけようとします。
このシステムプロパティは、Elasticsearch 用に構成することをお勧めします。このプロパティを設定する方法は、Kerberos インフラストラクチャに依存します。詳細については、Kerberos ドキュメントを参照してください。
詳細については、krb5.confを参照してください。 - 2. Elasticsearch ノードのために keytab を作成します。
keytab は、プリンシパルと暗号化キーのペアを保存するファイルです。Elasticsearch は、ユーザーによって提示されたチケットを復号化するために keytab のキーを使用します。Kerberos 実装によって提供されるツールを使用して、Elasticsearch のために keytab を作成する必要があります。たとえば、keytab を作成するツールには、Windows のktpass.exe
や MIT Kerberos のkadmin
があります。 - 3. keytab ファイルを Elasticsearch 構成ディレクトリに置きます。
この keytab ファイルに読み取り権限があることを確認してください。このファイルには資格情報が含まれているため、適切な保護措置を講じる必要があります。
Elasticsearch は HTTP ネットワーク層で Kerberos を使用するため、すべての Elasticsearch ノードに HTTP サービスプリンシパルのための keytab ファイルが必要です。サービスプリンシパル名はHTTP/[email protected]
の形式である必要があります。keytab ファイルは、ホスト名を含むため、各ノードに対して一意です。Elasticsearch ノードは、構成された keytab にプリンシパルとその資格情報が見つかる限り、クライアントが要求する任意のプリンシパルとして機能できます。 - 4. Kerberos レルムを作成します。
Elasticsearch で Kerberos 認証を有効にするには、レルムチェーンに Kerberos レルムを追加する必要があります。
Elasticsearch ノードでは、1 つの Kerberos レルムのみを構成できます。
Kerberos レルムを構成するには、elasticsearch.yml
構成ファイルにいくつかの必須のレルム設定とその他のオプション設定を構成する必要があります。xpack.security.authc.realms.kerberos
名前空間の下にレルム構成を追加します。
Kerberos レルムの最も一般的な構成は次のとおりです:
Yaml
xpack.security.authc.realms.kerberos.kerb1:
order: 3
keytab.path: es.keytab
remove_realm_name: false
username
は、ユーザーによって提示されたチケットから抽出され、通常は username@REALM
の形式を持ちます。この username
は、ユーザーにロールをマッピングするために使用されます。レルム設定 remove_realm_name
が true
に設定されている場合、レルム部分 (@REALM
) は削除されます。結果として得られる username
はロールマッピングに使用されます。
利用可能なレルム設定の詳細については、Kerberos レルム設定を参照してください。
- 5. Elasticsearch を再起動します。
- 6. Kerberos ユーザーをロールにマッピングします。
kerberos
レルムを使用すると、Kerberos ユーザーをロールにマッピングできます。これらのロールマッピングは、ロールマッピングの作成または更新 APIを使用して構成できます。username
フィールドでユーザーを識別します。
次の例では、ロールマッピング API を使用してuser@REALM
をロールmonitoring
およびuser
にマッピングします:
Python
resp = client.security.put_role_mapping(
name="kerbrolemapping",
roles=[
"monitoring_user"
],
enabled=True,
rules={
"field": {
"username": "user@REALM"
}
},
)
print(resp)
Js
const response = await client.security.putRoleMapping({
name: "kerbrolemapping",
roles: ["monitoring_user"],
enabled: true,
rules: {
field: {
username: "user@REALM",
},
},
});
console.log(response);
Console
POST /_security/role_mapping/kerbrolemapping
{
"roles" : [ "monitoring_user" ],
"enabled": true,
"rules" : {
"field" : { "username" : "user@REALM" }
}
}
Kerberos クロスレルム認証をサポートする場合、Kerberos レルム名に基づいてロールをマッピングする必要があります。そのようなシナリオでは、ロールマッピングに利用可能な追加のユーザーメタデータは次のとおりです: - kerberos_realm
は Kerberos レルム名に設定されます。 - kerberos_user_principal_name
は Kerberos チケットからのユーザープリンシパル名に設定されます。
詳細については、ユーザーとグループをロールにマッピングするを参照してください。
Kerberos レルムは、ロールマッピングの代替として 認可レルム をサポートしています。
Kibana の Kerberos 構成
ブラウザと Kibana 経由で Kerberos を使用して認証する場合、Kibana 構成で関連する認証プロバイダーを有効にする必要があります。Kerberos シングルサインオンを参照してください。