一般的なKerberos例外

症状:

  • ユーザー認証がGSS交渉の失敗またはサービスログインの失敗(サーバーまたはElasticsearch httpクライアントのいずれか)により失敗します。一般的な例外のいくつかは、以下に示すように、解決のためのヒントとともにリストされています。

解決策:

  • Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
  • HTTPクライアント側でこのエラーメッセージが表示される場合、これは不正なパスワードに関連している可能性があります。
    Elasticsearchサーバーログでこのエラーメッセージが表示される場合、これはElasticsearchサービスのkeytabに関連している可能性があります。keytabファイルは存在しますが、ユーザーとしてログインできませんでした。keytabの有効期限を確認してください。また、keytabに最新の資格情報が含まれているかどうかを確認してください。含まれていない場合は、置き換えてください。
    klistktabのようなツールを使用して、keytab内のプリンシパルをリストし、それらを検証できます。kinitを使用して、keytabを使用して初期チケットを取得できるかどうかを確認できます。Kerberos環境内のツールとそのドキュメントを確認してください。
    Kerberosは適切なホスト名解決に依存しているため、DNSインフラストラクチャを確認してください。不正なDNS設定、DNS SRVレコード、またはkrb5.confのKDCサーバーの構成は、ホスト名解決に問題を引き起こす可能性があります。
  • Failure unspecified at GSS-API level (Mechanism level: Request is a replay (34))
  • Failure unspecified at GSS-API level (Mechanism level: Clock skew too great (37))
  • リプレイ攻撃を防ぐために、Kerberos V5はコンピュータの時計の同期に対して最大許容値を設定しており、通常は5分です。ドメイン内のマシンの時間が同期しているかどうかを確認してください。
  • gss_init_sec_context() failed: An unsupported mechanism was requested
  • No credential found for: 1.2.840.113554.1.2.2 usage: Accept
  • 通常、curlを使用してElasticsearch Kerberos設定をテストする際に、クライアント側でこのエラーメッセージが表示されます。たとえば、クライアントで古いバージョンのcurlを使用している場合、Kerberos Spnegoサポートが欠落しているため、これらのメッセージが発生します。ElasticsearchのKerberos領域はSpengoメカニズム(Oid 1.3.6.1.5.5.2)のみをサポートしており、Kerberosメカニズム(Oid 1.2.840.113554.1.2.2)はまだサポートしていません。
    次のことを確認してください:
    • curlのバージョン7.49以上をインストールしていること。古いバージョンのcurlには既知のKerberosバグがあります。
    • マシンにインストールされているcurlには、コマンドcurl -Vを呼び出すとGSS-APIKerberos、およびSPNEGO機能がリストされます。そうでない場合は、このサポートを持つcurlバージョンをコンパイルする必要があります。
      最新のcurlバージョンをダウンロードするには、https://curl.haxx.se/download.htmlを訪問してください。

Kerberosのログはしばしば暗号的であり、DNSやNTPなどの外部サービスに依存しているため、多くのことが間違っている可能性があります。問題の根本原因を特定するために、追加のデバッグログを有効にする必要があるかもしれません。

Elasticsearchは、Kerberosサポートを提供するためにJAAS(Java Authentication and Authorization Service)Kerberosログインモジュールを使用します。ログインモジュールのためにElasticsearchでデバッグログを有効にするには、次のKerberos領域設定を使用します:

Yaml

  1. xpack.security.authc.realms.kerberos.<realm-name>.krb.debug: true

詳細情報については、Kerberos領域設定を参照してください。

時には、SPNEGO GSSコンテキスト交渉中の問題を理解するために深く掘り下げる必要があるか、Kerberosメッセージの交換を確認する必要があります。JVMでKerberos/SPNEGOデバッグログを有効にするには、次のJVMシステムプロパティを追加します:

  1. `````-Dsun.security.spnego.debug=true

JVMシステムプロパティの詳細については、JVMオプションの設定を参照してください。