SQL Server レポートで PowerShell リモート処理と SPN の両方を有効にする方法を教えてください。

SQL Server レポートで PowerShell リモート処理と SPN の両方を有効にする方法を教えてください。

私はStack Exchange - データベース管理者(でこの質問を試しましたhttps://dba.stackexchange.com/q/129286/51925)に問い合わせましたが、回答が得られなかったので、こちらで問い合わせてみます。

SQL Server Reporting Services を使用したリモート サーバーに苦労しています。Reporting Services は個別のドメイン アカウントで実行されており、それらの SPN を設定しました ( HTTP/<Machine> <domain>\<user>)。私が見る限り、WinRM が使用する SPN は Reporting Services が使用するドメイン アカウントを指しているため、PowerShell リモートの使用が事実上無効になっています。

例えば ​​を実行するのに問題はありませんGet-Service -ComputerName <Machine>が、 または を試みるGet-CimInstance Win32_Service -ComputerName <machine>Enter-PsSession <machine>次のようなエラーが発生します。

Get-CimInstance: WinRM は要求を処理できません。Kerberos 認証の使用中に、エラー コード 0x80090322 の次のエラーが発生しました: 不明なセキュリティ エラーが発生しました。
考えられる原因:
- 指定されたユーザー名またはパスワードが無効です。 -
認証方法とユーザー名が指定されていない場合は、Kerberos が使用されます。
- Kerberos はドメイン ユーザー名を受け入れますが、ローカル ユーザー名は受け入れません。
- リモート コンピューター名とポートのサービス プリンシパル名 (SPN) が存在しません。
- クライアントとリモート コンピューターは異なるドメインにあり、2 つのドメイン間に信頼関係がありません。
上記の問題を確認した後、次の操作を試してください。
- イベント ビューアーで認証に関連するイベントを確認します。
- 認証方法を変更します。宛先コンピューターを WinRM TrustedHosts 構成設定に追加するか、HTTPS トランスポートを使用します。TrustedHosts
リスト内のコンピューターは認証されない可能性があることに注意してください。
- WinRM 構成の詳細については、次のコマンドを実行してください: winrm help config。行:1 文字:1
+ Get-CimInstance win32_service -ComputerName <machine>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: AuthenticationError: (root\cimv2:win32_service:String) [Get-CimInstance], CimException
+ FullyQualifiedErrorId : HRESULT 0x8033809d,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand
+ PSComputerName :<machine>

サーバーの 1 つで SPN を削除すると、数秒後 (AD レプリケーションには少し早いでしょうか) に上記のコマンドを使用できるようになりますが、その後 SPN をリセットすると、しばらくするとコマンドが再び失敗します。

一部のレポート サービスでは資格情報を転送する必要があるため、このジレンマを解決するために誰かが助けてくれることを願っています。

皆様、良い一日をお過ごし下さい。

ヒネ

答え1

解決策が見つかったと思います。Reporting Services と WinRM が HTTP SPN をめぐって競合するのを回避するには、次のように WinRM にポート固有の SPN を設定します。

setspn -S HTTP/<Machine>:<port> <Machine>

短いマシン名と FQDN の両方に SPN を作成することをお勧めします。
デフォルトのポートは、HTTP の場合は 5985、HTTPS の場合は 5986 ですが、別のポートを使用するように設定できると思います。

WinRM を使用する場合は、次のようにセッションを設定します。

$CimSessionOption = New-CimSessionOption -EncodePortInServicePrincipalName
$CimSession = New-CimSession -Name ServiceSession -SessionOption $CimSessionOption -ComputerName <Machine>
Get-CimInstance Win32_Service -CimSession $CimSession

良い一日を

ヒネ

答え2

@carsten-hynne の回答に加えて、使用するポートを使用して PowerShell セッションを作成するには、次を使用します。

$option = New-PSSessionOption -IncludePortInSPN
$pssession = New-PSSession -ComputerName MYMACHINE -SessionOption $option

注: @carsten-hynne の回答から PORT SPN を追加したことを確認してください。

関連情報