IIS: IIS のリモート管理を有効にする
Windows PowerShell リモート処理を使うと、リモート サーバーからリモート管理を迅速に有効にすることができます。
Jason Helmick
リモートで IIS サーバーを管理したり、IIS サーバーの構成を変更したり、シンプルな Web サイトを追加できたらよいと思ったことはありませんか。それも、リモートの場所からそうできればよいと思ったことはありませんか。明白なセキュリティ上の理由から、単に IIS マネージャーを起動して、リモート サーバーに接続することはできません。管理対象となる各 IIS サーバーでは、リモート管理が有効に設定および構成され、HTTPS の証明書が割り当てられている必要があります。
GUI ベースの IIS マネージャーを使うと IIS のリモート管理をすばやく簡単に有効にできますが、それができるのは管理する Web サーバーの前に座っているか、リモート デスクトップ プロトコル (RDP) を使っている場合に限られます。リモートで管理しなければならない Web サーバーが複数ある場合や Server Core を使用している場合、GUI ベースの IIS マネージャーは実用的ではないか、使用できない場合もあります。
Windows PowerShell を使うと、任意の数のリモート Web サーバーで、リモート管理を有効にすることが可能で、必要な数の Web サーバーのリモート管理を一括で有効にできます。Windows PowerShell では、Windows PowerShell リモート処理と呼ばれる特別な機能を使用します。
Windows PowerShell リモート処理は、すべての IIS サーバーで有効にする必要があります。それを回避する方法はありません。グループ ポリシー オブジェクト (GPO) を使用するのが、Windows PowerShell リモート処理を有効にする最適な方法です。このやり方がわからない場合や、さらに情報が必要な場合、Don Jones と Dr. Tobias Weltner が執筆した無料の電子ブック『Secrets of PowerShell Remoting』(PowerShell.org、2012 年) をご覧ください。
「リモートで IIS サーバーを管理することは許可されていない」と言う前に、じっくりとこのガイドを読み、テスト環境に IIS サーバーをセットアップし、セキュリティ部門の同僚を招いて検討してもらい、リモート管理を有効にする許可を得ることをお勧めします。Web サーバーで Windows Server 2012 が実行されている場合、Windows PowerShell リモート処理は既に有効になっています。それ以外の OS が実行されている場合は、この記事で説明する手順を試す前に、Windows PowerShell リモート処理を有効にする必要があります。
Windows PowerShell リモート処理は、完全にセキュリティで保護されています。今後、多くの IIS 関連の管理タスクで、Windows PowerShell リモート処理が必要になるでしょう。リモート管理を有効にするプロセスは、複雑ではありませんが、いくつかの手順があります。想定される手順は次のとおりです。
- サーバーごとに Windows PowerShell セッションを作成する
- IIS Web 管理サービス (WMSvc) をインストールする
- IIS WMSvc を有効にする
- IIS WMSvc を開始する
- 一時証明書を置き換える
- IIS マネージャーを使って接続する
この例では、Web1、Web2、Web3、Web4 という名前の 4 台の IIS サーバーに対して一括でリモート管理を有効にします。リモート管理を有効にしたら、一時証明書を Active Directory 証明書サービス (AD CS) から発行された信頼できる証明書で置き換えます。
1. Web サーバーの Windows PowerShell リモート処理セッションを作成する
最初の手順は、Web サーバーの Windows PowerShell リモート処理セッションを作成することです。まず、Web サーバーのコンピューター名を保持する変数 $Servers を作成します。次に、変数 $Sessions にセッションを作成して保存します。
PS> C:\> $Servers = 'web1', 'web2', 'web3', 'web4' PS> C:\> $Sessions = New-PSSession –ComputerName $Servers
この 2 つの変数は、IIS サーバーをリモートで管理する間中ずっと必要となります。これを 1 行のコードに短縮しないでください。Get-ADComputer コマンドレットを使って、テキスト ファイル、CSV ファイル、または Active Directory からデータを取得して、変数 $Servers に設定することもできますが、それは別のトピックとなります。
2. IIS WMSvc をインストールする
IIS WMSvc は IIS に追加する必要がある追加コンポーネントです。リモート処理セッションを使うと、Windows PowerShell で、簡単に IIS WMSvc サービスを追加できます (Windows Server 2012 を使用している場合、1 行目のコードは不要です)。
PS C:\> Invoke-Command –Session $Sessions –ScriptBlock {Import-Module ServerManager} PS C:\> Invoke-Command –Session $Sessions –ScriptBlock {Add-WindowsFeature Web-Mgmt-Service}
これで、IIS WMSvc のインストールは完了です。IIS WMSvc は、次の手順で有効にします。
3. IIS WMSvc を有効にする
IIS WMSvc の既定の設定では、Windows 資格情報を許可し、ポート 8172 を使用し、一時証明書を適用するように設定されており、ここでは、この既定の設定を使い、このプロセスの最後に、一時証明書を信頼できる証明書に置き換えます。IIS WMSvc を有効にするには、リモート Web サーバーでレジストリ キーを変更します。
PS C:\> Invoke-command –Session $Sessions -ScriptBlock{Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1}
これで IIS WMSvc が有効になったので、IIS WMSvc を開始できます。
4. IIS WMSvc を開始する
IIS WMSvc は既定では開始されません。実際、IIS WMSvc は、手動で開始するように設定されています。今後 Web サーバーを再起動しても、IIS WMSvc は開始されません。スタートアップの種類を [自動] に変更し、IIS WMSvc を開始します。
PS C:\> Invoke-command –Session $Sessions -ScriptBlock {Set-Service -name WMSVC -StartupType Automatic} PS C:\> Invoke-command –Session $Sessions -ScriptBlock {Start-service WMSVC}
この時点では、IIS WMSvc が実行されているので、IIS マネージャーを使って Web サービスをリモートで管理できます。唯一の問題は、信頼できない、一時証明書を使用していることなので、この証明書を信頼できる証明書に置き換えます。
5. 一時証明書を置き換える
セントラル証明書ストアに証明書が用意されている IIS 8 の新機能を含め、一時証明書を置き換える方法には、たくさんの選択肢がありますが、ここでは、私のお気に入りの方法を紹介します。
.pfx ファイルから新しい証明書をコピーおよびインストールする短い処理を経て、新しい証明書の Web サイトのバインドを設定します。この例では、ローカル コンピューターの C:\_.Company.loc.pfx に万能な証明書があります。まず、証明書 (.pfx ファイル) をリモートの Web サーバーにコピーしてから、CertUtil.exe を使って証明書をインストールします。
PS C:\> $Servers | Foreach-Object {Copy-Item -Path C:\_.Company.loc.pfx -Destination "\\$_\c$"} PS> c:\> Invoke-Command -Session $Sessions {certutil -p P@ssw0rd -importpfx c:\_.company.loc.pfx}
クリア テキストでパスワードを送信したことに注意してください。Windows PowerShell リモート処理は、完全にセキュリティで保護され、暗号化されています。証明書のインストールが終わったら、Web サーバーから .pfx ファイルを忘れずに削除してください。
PS> $Servers | Foreach-Object {Remove-Item -Path "\\$_\c$\_.Company.loc.pfx"}
この時点で、インストールした証明書の拇印が必要となり、WMSvc のバインドを変更する必要があります。これを行うには、IIS プロバイダーが必要です。まず、リモート Web サーバーに WebAdministration モジュールを読み込みます。
PS C:\> Invoke-Command -Session $Sessions {Import-Module WebAdministration}
新しいバインドを行うために証明書の拇印を取得します。
PS C:\> Invoke-Command -Session $Sessions {$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where {$_.subject -like "*company*"} | Select-Object -ExpandProperty Thumbprint}
古い SSL バインドを削除します。
PS C:\> Invoke-command -Session $Sessions {Remove-Item -Path IIS:\SslBindings\0.0.0.0!8172}
証明書の拇印を使って、新しい SSL バインドを追加します。
PS C:\> Invoke-Command -Session $Sessions {Get-Item -Path "cert:\localmachine\my\$cert" | New-Item -Path IIS:\SslBindings\0.0.0.0!8172}
これで IIS マネージャーを使って、Web サーバーに接続する準備が整いました。
6. IIS マネージャーを使ってリモート Web サーバーに接続する
最後の手順では、IIS マネージャーを起動し、左側のペインで [スタート ページ] をクリックし、中央のペインで [サーバーに接続] を選択します。サーバー名と資格情報を指定すると、IIS マネージャーのナビゲーション ウィンドウに新しい接続が表示されます。
私はこのような処理を頻繁に行うので、上記のコマンドを 1 つのスクリプトにまとめました。このような処理を何度も行う必要があると思うなら (そうなるはずですが)、この処理を自動化することをお勧めします。
Jason Helmick は、IT 業界で、企業コンサルタント、トレーナー、および著者として 20 年以上の経験があります。Interface Technical Training で Windows PowerShell テクノロジのディレクターとして、Active Directory と IIS の自動化に注力しています。IIS の詳細については、近日出版予定の彼の著書『Learn Windows IIS in a Month of Lunches』(Manning Pubns Co、2013 年) を参照してください。