Session Recordingでグループ管理サービスアカウント(gMSA)の構成をサポート
Session Recordingは、グループ管理サービスアカウント(gMSA)をサポートしているため、複数のサーバーで実行されているサービスのサービスプリンシパル名(SPN)の管理がシンプルになります。 この機能により、セキュリティが強化され、よりシンプルにサービスアカウントを管理できるようになります。
手順1:ドメインコントローラーにgMSAを作成する
注:
このセクションでは、ドメインコントローラーでサーバーマネージャーを使用してgMSAを作成する方法について説明します。 または、次のスクリプトを実行して同じ目的を達成することもできます:
Add-KdsRootKey -EffectiveImmediately Install-WindowsFeature -Name RSAT-AD-PowerShell NEW-ADGroup –name "gMSA" –path "DC=ajj,DC=test" -GroupCategory Security -groupscope Global Add-ADGroupMember "gMSA" -Members "Server-3$"(The dollar sign $ is must) New-ADServiceAccount IIS1SvC -DNSHostName IIS1Svc.ajj.test -PrincipalsAllowedToRetrieveManagedPassword gMSA <!--NeedCopy-->
有効な時間のパラメーターは、キーが使用される前にすべてのドメインコントローラー(DC)に伝播される時間を許可します。 Add-KdsRootKey -EffectiveImmediatelyを使用すると、キー配布サービス(KDS)ですぐに使用できるように、ターゲットDCにルートキーが追加されます。 ただし、レプリケーションが完了するまで、他のドメインコントローラーはルートキーを使用できません。
-
ドメインコントローラーで、Active Directory管理センターを開きます。
-
ドメインを選択してグループを作成します。
-
グループに名前を付けます(例ではgMSAを使用します)。 [Group type]を[Security]に、[Group scope]を[Global]に設定します。 ここにメンバーサーバーを追加します。 メンバーサーバーには、Session RecordingサーバーとSession Recordingデータベースがインストールされているマシンが含まれます。
たとえば、グループメンバーは以下のように追加されます:
-
セキュリティグループを正常に追加すると、Active Directory管理センターのグローバル検索を使用してそのセキュリティグループを検索できるようになります。 メンバーサーバーを表示し、それらすべてを再起動することを忘れないでください。
-
New-ADServiceAccount PowerShellコマンドレットを使用してgMSAアカウントを作成します。
ドメインコントローラーでWindows PowerShellを開き、次のコマンドを実行してgMSAを作成します:
New-ADServiceAccount $serviceAccountName -DNSHostName $DNSHostName -PrincipalsAllowedToRetrieveManagedPassword $groupName <!--NeedCopy-->
各項目の意味は次のとおりです。
-
$serviceAccountNameはgMSAの名前を指定します。 この記事では、IIS1SvCを例として使用します。
-
$DNSHostName は、$serviceAccountNameの形式でDNSホスト名を指定し、その後にドメインコントローラーのドメイン名が続きます。
-
$groupNameは、管理されたパスワードを取得できるグループを指定します。 この記事では、gMSAを例として使用します。
-
手順2:各メンバーサーバーにgMSAをインストールする
gMSAを使用する各サーバーにgMSAをインストールする必要があります。
-
管理者権限を持つサーバーマネージャーまたはPowerShellを使用して、Windows PowerShell用のActive Directoryモジュールをインストールします。
-
サーバーマネージャーの使用例:
-
管理者権限でPowerShellを使用する場合は、次のコマンドを実行します:
Install-WindowsFeature -Name RSAT-AD-PowerShell <!--NeedCopy-->
-
-
Windows PowerShellを開き、次のようなコマンドを実行してgMSAをインストールします。
Install-ADServiceAccount IIS1SvC <!--NeedCopy-->
次のような「アクセスが拒否されました」エラーが発生した場合は、現在のメンバーサーバーがgMSAの許可リストに追加され、その後サーバーが再起動されていることを確認してください。
-
PowerShellで次のようなコマンドを実行して、gMSAが正常にインストールされたことを確認します。 コマンドがTrueを返す場合、gMSAは正常にインストールされています。
Test-ADServiceAccount IIS1SvC <!--NeedCopy-->
手順3:gMSAがSession RecordingデータベースとSession Recordingログデータベースにアクセスできるようにする
-
gMSAのログインを作成します。 SQL Server Management Studio(SSMS)を使用して、Session RecordingデータベースのSQLインスタンスに接続します。
新しいログインに、<ドメインコントローラーのドメイン名>\<gMSAの名前>の形式で名前を付けます。 次に例を示します:
-
gMSAがSession RecordingデータベースとSession Recordingログデータベースにアクセスできるようにします。
-
レジストリを使用して、Session RecordingデータベースとSession Recordingログデータベースの名前を見つけます。 たとえば、次のレジストリキーをダブルクリックして値データを取得します。
-
gMSAに、Session RecordingデータベースとSession Recordingログデータベースのdb_owner権限を付与します。
注:
db_owner権限の代わりに db_datareaderおよびdb_datawriter権限を付与する場合は、データベースの実行権限もgMSAに付与する必要があります。 次に例を示します:
use SR2311 grant execute to [name of the login created earlier] use SR2311log grant execute to [name of the login created earlier] <!--NeedCopy-->
-
手順3:gMSAがSession Recordingサーバーにアクセスできるようにする
各Session Recordingサーバーで次の手順を実行します:
-
Session Recordingサーバーがインストールされているマシンでインターネットインフォメーション サービス(IIS)マネージャーを開き、アプリケーションプールIDをgMSAに設定して、IISを再起動します。
たとえば、次のアプリケーションプールIDはgMSAに設定されています
注:
または、Windows PowerShellを使用して次のようなコマンドを実行し、アプリケーションプールIDを設定することができます:
Import-Module WebAdministration -ErrorAction Stop $webapps = Get-ChildItem -Path IIS:\AppPools foreach ($webapp in $webapps) { if ($webapp.Name.Contains("SessionRecording")){ $Pool = "IIS:\AppPools\" + $webapp.Name Write-Host $Pool Set-ItemProperty -Path $Pool -Name processModel -Value @{userName="AJJ \IIS1SvC$";identitytype=3} } } <!--NeedCopy-->
-
Session Recordingサーバーがインストールされているマシンでレジストリエディターを開き、Session Recordingサーバーの読み取り権限をgMSAに付与します。
-
サービスアカウントのオブジェクトタイプを見つけます。
-
gMSAの名前を入力します。
-
gMSAに読み取り権限を付与します。
注:
または、次のようなスクリプトを使用して、Session Recordingサーバーの読み取り権限をgMSAに付与することもできます:
$RegistryKey = "HKLM:\SOFTWARE\Citrix\SmartAuditor" $NewAcl = Get-Acl -Path $RegistryKey $identity = "pahl6\IIS1SvC$" $RegistryKeyRights = "ReadPermissions" $type = "Allow" $RegistryKeyAccessRuleArgumentList = $identity, $RegistryKeyRights, $type $RegistryKeyAccessRule = New-Object System.Security.AccessControl.RegistryAccessRule -ArgumentList $RegistryKeyAccessRuleArgumentList $NewAcl.SetAccessRule($RegistryKeyAccessRule) Set-Acl -Path $RegistryKey -AclObject $NewAcl <!--NeedCopy-->
-
-
gMSAをSession Recordingストレージフォルダーに追加し、フォルダーに対する読み取りおよび書き込み権限を付与します。 その後、継承を有効にして、[Replace all child object permission entries with inheritable permission entries from this object]を選択します。
注:
または、次のようなスクリプトを使用して、Session Recordingストレージフォルダーの読み取りおよび書き込み権限をgMSAに付与し、継承を有効にすることができます:
$path = "C:\SessionRecordings" $NewAcl = Get-Acl $path # Set properties $identity = "pahl6\IIS1SvC$" $fileSystemRights = "Modify" $type = "Allow" # Create new rule $fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type $fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $fileSystemAccessRuleArgumentList # Apply new rule $NewAcl.SetAccessRule($fileSystemAccessRule) # enable inherit $isProtected = $false $preserveInheritance = $false $NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance) Set-Acl -Path $path -AclObject $NewAcl <!--NeedCopy-->
-
gMSAをSession Recording承認コンソールに追加します。
-
gMSAのセキュリティ識別子(SID)を見つけます。
-
SIDを<Session Recordingサーバーのインストールパス>\App_Dataの下のSessionRecordingAzManStoreファイルに書き込みます。
-
gMSAにApp-Data フォルダーに対するフルコントロール権限を付与します。
-
gMSAがSession Recording承認コンソールに正常に追加されたことを確認します。
注:
または、次のようなスクリプトを使用して、gMSAをSession Recording承認コンソールに追加できます:
$account = "IIS1SvC" $AccountDetail = Get-ADServiceAccount -Identity $account $accountSid = $AccountDetail.SID.Value write-host $accountSid $path = "C:\Program Files\Citrix\SessionRecording\Server\App_Data\SessionRecordingAzManStore.xml" $doc = [xml](Get-Content $path) $node = $doc.AzAdminManager.AzApplication.AzRole | Where-Object {$_.Name -eq "LoggingWriter"} $element = $doc.CreateElement("Member") $element.InnerText = $accountSid $node.AppendChild($element) $doc.Save($path) <!--NeedCopy-->
-