ONTAPでKerberosが想定されている場合にNTLMを使用するクライアント
環境
- ONTAP 9(すべてのバージョン)
- CIFS / SMB
- Kerberos認証を使用したWindows Active Directory
- AFF / FASシステム
問題
クライアントは、Kerberos 認証が想定される場面で認証形式 NTLM を使用しています。これには以下のシナリオが含まれます。
- クライアント側のパケットトレースには、
KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN - グループポリシーオブジェクト(GPO)がNTLMをブロックし、Kerberos認証を強制するように構成された後、Windowsクライアントでアクセスエラーが発生します。
klistWindowsクライアントでは、CIFSサーバー用のKerberosチケットが取得されていないことが示されます。- イベントビューアーは、NetApp CIFSサーバーのNTLMフォールバックがブロックされた、またはKerberosネゴシエーションの失敗イベントをログに記録します。
- SPN関連のGPO変更を適用した後も、ネットワークドライブのマッピングが引き続き失敗します。
原因
クライアントがキー配布センター(KDC)に連絡してサービスのチケットを要求すると、KDCはCIFSサーバーマシンアカウントのサービスプリンシパル名(SPN)内で一致するホスト名、IPv4、またはIPv6を検索します。一致するものがない場合、KDCはKRB5KDC_ERR_S_PRINCIPAL_UNKNOWNを返し、クライアントはNTLMにフォールバックする可能性があります。
一般的なトリガー:
- Active Directory の CIFS サーバーマシンアカウントに
HOST/<short-hostname>またはHOST/<FQDN>の SPN エントリが存在しない - ドライブマッピングでは短いホスト名(例:
\\sdf\share)が使用されているが、登録されているのは FQDN SPN のみである - Kerberos を強制するために GPO 経由で NTLM がブロックされている場合、SPN が存在しないと Kerberos が失敗し、NTLM フォールバックもブロックされるため、アクセスが完全に失敗する
- SPN を更新せずにクラスターまたは SVM の名前を変更する
解決策
ストレージへのアクセスに使用されるホスト名、エイリアス、またはFQDNを特定します。このホスト名は、SVMが所有する1つ以上のLIFに解決される必要があります。CIFSサーバーマシンアカウントに、目的のホスト名をSPNとして設定します。
ステップ 1:CIFS マシンアカウントの現在の SPN を一覧表示する
Active Directoryのアクセス許可を持つドメイン参加済みのWindowsホストから:
setspn -L <CIFS-machine-account>HOST/<short-hostname> と HOST/<FQDN> のエントリを確認してください。どちらかが欠けている場合は、手順2に進んでください。
ステップ2:不足しているSPNエントリを追加する
-Sスイッチを使用して、重複チェック付きでSPNを追加します:
setspn -S HOST/<short-hostname><CIFS-machine-account>
setspn -S HOST/<FQDN><CIFS-machine-account>ステップ3:クライアントのKerberosキャッシュをフラッシュして確認する
Active Directory のレプリケーションが完了するまで数分待ってから、Windows クライアントで次の操作を行います。
klist purge
net use * /delete
net use \\<server>\<share> /persistent:yes
klistklistの出力には、cifs/<FQDN>のKerberosチケットが表示されるはずです。
注:IPアドレスを使用するドライブマッピングは、常にNTLMにフォールバックします。Kerberosにはホスト名またはFQDNが必要です。ドライブマッピングを適切に更新してください。
パートナーノート
partnerNotes_text
追加情報
SPN に IP アドレスを使用するにはいくつかの要件がありますが、手順は Microsoft が概説しているものと似ています — setspn CLI コマンドの構文。
接続クライアントごとの認証方法を ONTAP から確認するには:
vserver cifs session show -fields auth-mechanismCIFSサーバー名がsetspnで使用されているマシンアカウントと一致することを確認するには:
vserver cifs show -vserver <svm-name>内部情報
内部情報