PowerShell Remoting は Windows Server 2012(以降)で標準で有効化されています。多くの IT 環境では潜在的なセキュリティ リスクと見なされがちですが、ベストプラクティスに従えば、PowerShell は実際にサーバー管理の中でも最も安全な方法の1つです。この記事では、Windows Server 2012 R2 を設定して、特定のユーザー グループからのリモート PowerShell 接続のみを許可する方法、および実行できる cmdlet を制限する方法を紹介します。
制限付きエンドポイントとは?
リモート エンドポイントは、PowerShell Remoting によりデバイスへ接続できるユーザー、および認証後にそのユーザーが実行できる操作を決定します。既定の PowerShell エンドポイントでは、組み込みの Administrators および Remote Management Users グループに属するユーザーがリモート接続でき、デバイス上で利用可能なすべての cmdlet と関数が公開されます。
良いニュースは、自分で constrained エンドポイントを作成し、ユーザーが実行できる操作を制限できることです。これにより、管理目的で PowerShell Remoting を許可する際のリスクを最小限に抑えられます。
Windows Server 2012 R2 で制約付きエンドポイント(Constrained Endpoints)を作成する
Windows Server 2012 R2 で自分用の制約付きエンドポイントを作成しましょう。ローカルの管理者権限でログインし、デスクトップのタスクバーにある青い PowerShell アイコンをクリックします。
- サーバー上の既存のエンドポイントを見るには、PowerShell プロンプトで
Get-PSSessionConfigurationと入力し、ENTER を押します。 - PowerShell コンソールで、4つのデフォルトのエンドポイントが表示されるはずです。
制限されたエンドポイントに接続したときに、ユーザーが実行できる cmdlet や関数を制限するには、構成ファイルを作成する必要があります。PowerShell コンソールで、以下に示す cmdlet を入力し、ENTER を押します。 New-PSSessionConfigurationFile は PrintAdmin.pssc という新しい構成ファイルを作成し、さらに、リモート ユーザーを PrintManagement PowerShell モジュールに含まれる関数に制限するなどの制限を設定します。
New-PSSessionConfigurationFile – Path PrintAdmin.pssc – SessionType RestrictedRemoteServer -LanguageMode NoLanguage – ExecutionPolicy Restricted – ModulesToImport PrintManagement -VisibleFunctions Get-Printer
NoLanguage により、ユーザーは cmdlet と関数の実行のみが許可されます。つまり、スクリプト ブロック、変数、演算子は使用できません。–SessionType の値 RestrictedRemoteServer によって、ユーザーは次のプロキシ関数(proxy functions)に制限されます:Exit-PSSession、Get-Command、Get-FormatData、Get-Help、Measure-Object、Out-Default、そして Select-Object 。Restricted は –ExecutionPolicy パラメーターの値としても、スクリプトの実行を防ぎます。さらに、インポートしたいモジュールに cmdlet が含まれている場合に使える –VisibleCmdlets パラメーターもあります。
構成ファイルができたので、Helpdesk という新しいエンドポイントを登録できます。
Register-PSSessionConfiguration -Name Helpdesk -Path PrintAdmin.pssc –ShowSecurityDescriptorUI
新しいエンドポイントを構成するかどうか、WinRM サービスを再起動するかどうか、そしてそのエンドポイントへのアクセス許可を構成するかどうかを確認するよう求められます。この例では、Helpdesk というグループに、新しいエンドポイントでの「Execute (Invoke)」権限を付与します。さらに、リモート デバイス上のプリンターを管理できるように Helpdesk グループに権限を付与するのを忘れないでください。そうしないと get-printer が失敗します。
もう一度 Get-PSSessionConfiguration を実行すると、新しいエンドポイントが一覧に表示されるのを確認できます。
制約付きエンドポイントに接続する
次に、リモート マシンからエンドポイントに接続します。Helpdesk グループ、またはエンドポイントに対して権限を割り当てたグループのメンバーであるユーザーで Windows 8 にログインしてください。PowerShell プロンプトを開き、次のコマンドを実行します。contososrv1 をリモート サーバーの名前に置き換えてください:
Enter-PSSession -ComputerName contososrv1 -ConfigurationName Helpdesk
リモート サーバーに接続すると、リモート デバイスで作業していることを示すため、プロンプトがそれに応じて変更されます。get-command と入力して ENTER を押すと、利用可能な関数と cmdlet の一覧がエンドポイントによって制限されていることが分かります。この例では、RestrictedRemoteServer セッション タイプで許可されている 7 つのプロキシ関数と、エンドポイント構成ファイルで指定された get-printer 関数が残ります。
共有する
もっと詳しく
著者について
Russell Smith
ITコンサルタント
管理およびセキュリティ技術を専門とする IT コンサルタント兼著者です。Russell は IT 分野で 15 年以上の経験があり、Windows セキュリティに関する書籍を執筆し、Microsoft の Official Academic Course(MOAC)シリーズ向けの教材も共著しています。