web-dev-qa-db-ja.com

SQL ServerレポートでPowerShellリモート処理とSPNの両方を有効にするにはどうすればよいですか?

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

実行中に問題はありません。 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 char: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をリセットすると、しばらくするとコマンドが再び失敗します。

一部のReporting Servicesは資格情報を転送できる必要があるので、誰かがこのジレンマを解決するのを手伝ってくれるといいのですが。

6
Carsten Hynne

私たちは解決策を見つけたと思います。 HTTP SPNを介したReporting ServicesとWinRMの競合を回避するために、次のように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

デフォルトのポート80でSSRSを実行しています。この環境には80台のサーバーがあり、そのうち3台はSSRSです。最初に、WinRM HTTP SPNを5985および5986ポートに登録しました。

setspn -s HTTP/ServerName:4985
setspn -s HTTP/ServerName:4986
setspn -s HTTP/ServerName.DomainName:4985
setspn -s HTTP/ServerName.DomainName:4986

その後、私は以下を機能させることができました:

Invoke-Command -ComputerName $Servers_WithSpecialSPN -ScriptBlock { Get-Process | Select -First 10 } -SessionOption (New-PSSessionOption -IncludePortInSPN)
Invoke-Command -ComputerName $Servers_WithoutSpecialSPN -ScriptBlock { Get-Process | Select -First 10 }

私はこれを将来的に説明する必要があるとは思わなかったので、SSRS SPNを最初から必要とする必要がなく、それがなぜなのかわからなくなるまで、私たちは機能しているように見える別の方向に進みました。作成した。別の方向には、ポートを持つWinRM SPNではなく、ポートを持つSSRS SPNの再登録(ドロップおよび再作成)が含まれていました。

setspn -s HTTP/ServerName:Port Domain\Account
setspn -s HTTP/ServerName.DomainName:Port Domain\Account

SPNを取り除くことができたので、SPNが機能したとは言いがたいですが、機能しているように見えました。私がこれを投稿しているのは、私たちの環境に望ましい解決策を見つけるのに苦労したためです。これが他の人に役立つことを願っています。

0
Sam Bryant
  1. メソッド:マシン/ホスト名の代わりにIPアドレスを使用できます。また、(デフォルトではなく)認証ネゴシエートを使用する必要があります。
Invoke-Command `
   -ComputerName *172.24.253.58* `
   -Command {Get-Service} `
   -Authentication Negotiate
  1. メソッド:WinRMの代わりに[〜#〜] dcom [〜#〜]を使用できます:
$sOpt = New-CimSessionOption -Protocol DCOM

$Cs = New-CimSession -ComputerName *machine* -SessionOption $sOpt

Get-CimInstance `
   -Query "Select * From Win32_OperatingSystem" `
   -CimSession $Cs
0
Radim Bárta

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

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

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

0
MichelZ

@MichelZと@ carsten-hynneの指示に感謝します。私はこの問題に苦労していましたが、これらの答えは本当に役に立ちました。私を助けてくれるもう少し情報を追加したかったのですが。

まず、これを実現する最も簡単な方法は、$PSSessionOption環境変数。 Enter-PSSessionまたはInvoke-Commandを使用する既存のスクリプトがある場合、それらを変更する必要がないため、これはうまく機能します。

PS C:\> $PSSessionOption = New-PSSessionOption -OpenTimeOut 120000

New-PSSessionOption の例5を参照してください

次に、PowerShell Remotingの代わりにWebサイトのSPNを変更することについて疑問に思いました。私の場合、それはカスタムのIIS Webアプリケーションですが、SQL Reporting Servicesであるかどうかは元の質問です。なぜWebサイトのSPN:ポートを作成しないのですか。これは間違いなく可能ですが、 、私の環境では、多くのクライアントマシンに変更を加える必要があるため、追跡しないことにしました。SPNにポートを含めるようにInternet Explorerを構成する必要があります。一部の環境では、これが優先されることがわかりました。特に、アプリケーションプールIDに異なるサービスアカウントを使用する1台のマシンですべての複数のWebサイトをホストし、PowerShellリモーティングはデフォルトの構成で動作します。

このプロセスを詳しく説明している以下の3つのリンクを見つけてください。 MSはこの動作をIEとPowerShellの両方でデフォルトにする必要があると思います。ポートなしでSPNを試してみてください。それでも機能しない場合は、ポートで試してください...そしてはい、あなたはそれを正しく読んでいます、これはIE6に戻ります...

  1. Internet Explorer 6は、Kerberos認証プロトコルを使用して、Windowsの非標準ポートを使用するWebサイトに接続することはできませんXPおよびWindows Server 20
  2. Kerberosおよび非標準ポート番号
  3. Internet ExplorerおよびSPN
0
k3yz101