Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShell JEA(Just Enough Administration)で管理者以外のユーザーに特権を委任する方法

PowerShell Just Enough Administration(JEA)とは?

Just Enough Administration(JEA)は、PowerShell 5.0以降で利用できる機能で、PowerShellで管理可能なあらゆる対象に対して管理特権を委任できます。JEAの主な目的は特権の制限です。管理者権限を持たないユーザーに対して、サーバーや各種サービス(AD、Exchange、SharePointなど)の管理者権限を与えることなく、特定の管理タスクだけを実行できるようになります。JEAを使えば、どのユーザーがどのコマンドレット・関数・スクリプトを管理者権限で実行できるかを細かく設定でき、すべての操作をログとして記録することも可能です。

JEAの実装方法

管理者は、ユーザーが実行できるコマンドを含むPowerShellセッション構成ファイルをサーバー上に作成します。このファイルをもとにJEAエンドポイントが作成され、ユーザーはそのエンドポイントに接続して、許可されたコマンドやプログラムを実行できるようになります。

ここでは例として、管理者以外のユーザーに「ドメインコントローラーの再起動」と「DNSサービス・AD DSサービスの再起動」を許可する手順を紹介します。

この場合、ドメインコントローラーへのRDPアクセス権の付与、ADでの管理権限の委任、Windowsサービスやサーバー再起動に関する個別の権限設定などは一切不要です。必要な制限はすべてJust Enough Administrationの構成内で完結します。

1. PowerShellセッション構成ファイル(.pssc)の作成

まず、PowerShellセッション構成ファイル(*.pssc)を作成します。ドメインコントローラー上で次のコマンドを実行してください。

New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'

作成されたPSSCファイルをメモ帳で開きます。

PSSCファイルでは、「このJEAエンドポイントに誰が接続できるか」そして「JEAセッション内のコマンドがどのアカウントで実行されるか」を定義します。

2. PSSCファイルの編集

以下の値を変更します。

  • SessionType:DefaultからRestrictedRemoteServerへ変更します。このモードでは、Clear-Host、Exit-PSSession、Get-Command、Get-FormatData、Get-Help、Measure-Object、Out-Default、Select-Objectといった基本コマンドレットのみが使用可能になります。
  • TranscriptDirectory:専用フォルダを作成して指定します。ここにJEAユーザーの全操作ログが記録されます。
    TranscriptDirectory = C:\PS\JEA_logs
  • RunAsVirtualAccount:仮想管理者アカウント(ローカルのAdministratorsグループまたはDomain Adminsグループのメンバー相当)としてコマンドを実行できます。
    RunAsVirtualAccount = $true

ネットワークリソースへのアクセスが必要な場合は、グループ管理サービスアカウント(gMSA)も利用できます。
GroupManagedServiceAccount = 'woshub\gMSAJEAUser'

RoleDefinitionsディレクティブでは、PowerShellセッションへの接続を許可するADセキュリティグループと、JEAロール名(後で作成するPSRCファイル名と一致させる必要があります)を指定します。

記述例:

RoleDefinitions = @{‘woshub.com\HelpDesk' = @{ RoleCapabilities = 'HelpDesk_admins' }}

編集が完了したら、セッション構成ファイルを保存します。

3. 構成ファイルの検証

次のステップに進む前に、構成ファイルにエラーがないことを確認しておきましょう。

Test-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'

4. ロール機能ファイル(.psrc)の作成

JEA構成ファイルを格納するための新しいディレクトリを作成します。

New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities' -ItemType Directory

PSRCファイルは、必ず対応するモジュールのRoleCapabilitiesサブフォルダ内に配置しなければなりません。

続いて、ロールの内容を記述するPSRC構成ファイルを作成します(PSSC構成で指定したファイル名を使用します)。

New-PSRoleCapabilityFile -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'

PSRCファイルでは、そのJEAセッション内で何が許可されるかを定義します。VisibleCmdletsディレクティブでは、対象ユーザーグループに使用を許可するコマンドレット(および有効なパラメーター)を指定できます。

また、VisibleExternalCommandsオプションでは、実行を許可する外部コマンドやEXEファイルを指定できます。

たとえば、次の構成ではHelpDeskユーザーに対して、shutdownコマンドまたはRestart-Computerコマンドレットによるドメインコントローラーの再起動と、Restart-ServiceコマンドレットによるDNSServerおよびActive Directoryドメインサービスの再起動が許可されます。

VisibleCmdlets = 'Restart-Computer', @{ Name = 'Restart-Service'; Parameters = @{ Name = 'Name'; ValidateSet = 'DNS', 'NTDS' }}
VisibleExternalCommands = 'c:\windows\system32\shutdown.exe'

編集後、PSRCファイルを保存します。

5. セッション構成の登録とWinRMの再起動

PSSCファイル用に新しいPSSession構成を登録します。

Register-PSSessionConfiguration –Name testHelpDesk -Path 'C:\Program Files\WindowsPowerShell\dc_manage.pssc'

その後、WinRMサービスを再起動します。

Restart-Service WinRM

利用可能なJEAエンドポイントの一覧は、次のコマンドで確認できます。

Get-PSSessionConfiguration | ft name

JEA構成の動作確認

それでは、作成したJust Enough Administration(JEA)構成が実際にどう動作するか確認してみましょう。構成ファイルで指定したセキュリティグループに属するユーザーアカウントで、JEAエンドポイントに接続できます。PowerShellリモーティングを使ってドメインコントローラーに接続する際は、JEAエンドポイント名の指定が必要です。

Enter-PSSession -ComputerName dc01 -ConfigurationName testHelpDesk

セッション内で利用可能なコマンドレットの一覧を表示します。

Get-Command

ご覧のとおり、Restart-ServiceやRestart-Computerを含むごく一部のコマンドしか利用できません。ユーザーは許可された操作しか実行できない仕組みです。

試しにDNSサービスを再起動してみます。

Restart-Service DNS

サービスは正常に再起動されました。このコマンドは、ドメイン管理者権限を持つ特権ユーザーとして自動的に実行されています。

一方、JEA構成ファイルに記述されていない他のサービスを再起動しようとすると、次のようなエラーが表示されて拒否されます。

Cannot validate argument on parameter 'Name'. The argument "spooler" does not belong to the set "DNS,NTDS" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
+ CategoryInfo : InvalidData: (:) [Restart-Service], ParameterBindingValidationException

JEA PowerShellセッションにおけるユーザーの全操作履歴は、C:\PS\JEA_logsフォルダ内のファイルに記録されます。これにより、誰がいつ何を実行したかを事後的に監査することも可能です。

このように、JEAを活用すれば、ユーザーに対して特定のPowerShellコマンドレット、スクリプト、プログラムを「管理者として」実行する権限を、最小限かつきめ細かく付与できます。過剰な権限を与えるリスクを抑えながら、運用作業を安全に委任したい環境で非常に有効なソリューションです。

  1. 【保存版】PowerShellでBIOS設定を表示・変更する方法(HP/Lenovo/Dell対応)

    Windowsが動作するPCでは、PowerShellを使ってBIOS設定の表示や変更を行うことができます。本記事では、WMIクラス(Windows Management Instrumentation)を通じて、HP、Lenovo、Dellといった主要ベンダーのPCのBIOS設定を取得・変更するための具体的なコマンド例を詳しく解説します。 Win32_BIOSクラスでBIOS情報を表示する まず、Win32_BIOSクラスとGet-WmiObjectコマンドレットを使って、基本的なBIOS情報を確認する方法から見ていきましょう。以下のコマンドを実行すると、コンピューターのBIOS基本パラメー

  2. Windows PowerShellでローカルユーザーとグループを管理する方法

    Windows PowerShellは、ローカルユーザーとグループの管理にも活用できます。これは、Windows 10がマルチユーザー対応のオペレーティングシステムであることを裏付ける機能の一つです。ローカルユーザーとグループの管理にはGUIベースのツールもいくつかありますが、コマンドラインから操作したいと考えるシステム管理者も少なくありません。このガイドでは、その具体的な方法について詳しく解説します。 Windows PowerShellでローカルユーザーとグループを管理する このガイドは、以下の2つのパートに分けて説明します。 ローカルユーザーの管理 ユーザーグループの管理 作業を始