Active DirectoryのGPOでOU内PCのリモートデスクトップを一括有効化し、Windows 11 24H2のグレーアウト問題を解決する手順

Active Directory 環境で OU 単位に「RDP を一括で有効化し、接続できるユーザーを社内グループに限定する」――この運用を、旧来 OS と Windows 11 24H2/Windows 2025 の違いまで踏み込み、実務でそのまま流せる形にまとめました。GPO 設計、Restricted Groups の使い分け、PowerShell スクリプト化、検証・ロールバックまでを網羅します。

目次

前提と設計ゴール

本記事は、ドメイン参加済みの Windows クライアント(主に Windows 10/11)を、Active Directory の GPO で安全にリモートデスクトップ(RDP)接続可能にするための手順書です。狙いは以下の 3 点を OU 単位で一貫配布することです。

  • RDP を OS 上で有効化(fDenyTSConnections = 0
  • 接続許可を特定のセキュリティグループのみに限定(例:RDP-Users
  • ファイアウォール(TCP 3389)を適切に開放、必要なら NLA を必須化
構成要素具体策配布方法ポイント
RDP 有効化レジストリ fDenyTSConnections=0旧来:GPO の RDS ポリシー/24H2 以降:起動スクリプト推奨24H2 以降は UI が「管理対象」で灰色固定になる事象に注意
接続許可の限定RDP-Users → ローカル Remote Desktop Users に編入Restricted Groups(「このグループが所属するグループ」)ローカル「Remote Desktop Users」側を直接上書きしない
ファイアウォールInbound 3389(Remote Desktop – User Mode (TCP-In))を許可Windows Defender ファイアウォールの GPO、または PowerShellプロファイル(ドメイン/プライベート)を確認
NLA「Require user authentication …」を有効、または UserAuthentication=1GPO(旧来)/スクリプト(24H2 以降)クレデンシャル保護・平文 NTLM の回避に有効

OU 内 PC で RDP を有効化し、許可ユーザーを限定する方法

GPO の作成とリンク

  1. ドメイン コントローラーで Group Policy Management Console (GPMC) を起動。
  2. 対象 OU を右クリック → 新規 GPO を作成(例:GPO-RDP-Baseline)。
  3. 作成した GPO を対象 OU にリンク(必要に応じて WMI フィルターやセキュリティ フィルタリングで対象端末を絞り込み)。

RDP を有効化する(旧来 OS 向けの基本設定)

Windows 10 など従来 OS を含む混在環境では、まず教科書的な方法を押さえておきます。

パス:

コンピューターの構成
  └ ポリシー
      └ 管理用テンプレート
          └ Windows コンポーネント
              └ Remote Desktop Services
                  └ Remote Desktop Session Host
                      └ Connections

ポリシー:「Allow users to connect remotely using Remote Desktop Services」= [有効]

併せて NLA を強制するなら、同じツリー内の「Require user authentication for remote connections by using Network Level Authentication」= [有効] を設定します。

接続を許可するグループの指定(Restricted Groups)

OU 内のクライアントにおいて、社内のセキュリティ グループ(例:RDP-Users)だけが RDP できるようにします。推奨の設定は「対象グループをローカル Remote Desktop Users のメンバーに加える」方式です。

パス:

コンピューターの構成
  └ ポリシー
      └ Windows 設定
          └ セキュリティ設定
              └ Restricted Groups

操作:

  1. 「グループの追加」→ RDP-Users(ドメイングループ名)を入力。
  2. 「このグループのメンバー」は 空欄のまま(ここを埋めると RDP-Users のメンバーを上書き管理してしまうため)。
  3. 「このグループが所属するグループ」に Remote Desktop Users を追加。

これにより、OU 内 PC では RDP-Users のメンバーが自動的にローカル Remote Desktop Users へ編入され、RDP の接続権限(Allow log on through Remote Desktop Services)が付与されます。

Windows Defender ファイアウォールの開放

RDP を有効化しても、ファイアウォールで 3389/TCP を閉じていれば到達しません。GPO で以下いずれかを構成します。

  • 「受信の規則」→ Remote Desktop – User Mode (TCP-In) を有効化
  • または「規則グループ」単位で Remote Desktop を有効化

スクリプト派の環境では、以下を組み合わせても構いません。

PowerShell:
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# もしくは
Get-NetFirewallRule -DisplayGroup "Remote Desktop" | Enable-NetFirewallRule

コマンド:
netsh advfirewall firewall set rule group="Remote Desktop" new enable=Yes 

GPO の適用と確認

  • クライアントで gpupdate /force 実行(ドメイン参加直後は再起動推奨)。
  • 結果確認:gpresult /h C:\gp.html → RDP 関連ポリシーが適用されているかを HTML レポートで確認。
  • レジストリ:HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections0 であること。
  • ファイアウォール:Get-NetFirewallRule -DisplayGroup "Remote Desktop"EnabledTrue であること。
  • 到達性:管理端末から Test-NetConnection <PC名> -CommonTCPPort RDP(3389)。
  • ローカル グループ:lusrmgr.msc または net localgroup "Remote Desktop Users"RDP-Users が見えること。

セキュリティ強化の追加ポイント

  • NLA の必須化:中間者攻撃・パスワード推測の面でメリット大。
    レジストリ:HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\UserAuthentication=1
  • ユーザー権利の明示:必要に応じて「ローカル ポリシー > ユーザー権利の割り当て > Allow log on through Remote Desktop Services」に Remote Desktop Users を含める(DC は既定が異なるので注意)。
  • 禁止の明示:「Deny log on through Remote Desktop Services」に対象グループが入っていないか確認(誤登録はありがちなブロック要因)。
  • ドメイン コントローラーには適用しない:DC への RDP は別ポリシー/プロセスで管理。

Windows 11 24H2/Windows 2025 で「RDP スイッチがグレーアウトし OFF のまま」になる問題

症状

  • 設定アプリの [リモート デスクトップ] トグルが灰色で操作不能(「組織によって管理されています」等)。
  • GPO で RDP を「有効」にしているつもりでも、UI 表示は OFF のまま。

原因(推定)

24H2 以降のクライアントでは、RDP の UI とポリシーの関係がハードニングされ、Allow users to connect remotely …[有効] にすると「管理対象」の判定が働き、UI が固定表示(グレーアウト)になる場合があります。結果として、UI は OFF に見えるが内部フラグは期待通りでないなど、運用上の齟齬が生じます。

対処方針の比較

方針概要長所短所おすすめ度
A. 一時的に未構成化RDP ポリシーを [未構成] に戻し、UI で手動 ON即効性ローカル変更でドリフト、再配布で上書き△(暫定対応)
B. 起動スクリプトで直接制御fDenyTSConnections=0 へ設定、FW と NLA もスクリプトでUI 固定問題の影響を受けない、再現性が高いスクリプト整備が必要◎(推奨)
C. MDM/CSP で制御Intune 等のポリシーで RDP/TCP 3389 を統制クラウド管理との一元化オンプレのみ環境では導入コスト○(MDM 環境)
D. ADMX 更新待ち将来のポリシー更新で動作改善を期待標準化タイムラグが長い可能性△(長期)

推奨:PowerShell 起動スクリプトによる恒久対処

GPO の「スクリプト(スタートアップ)」で、以下の PowerShell を配布します。端末起動ごとに収束(コンバージェンス)させる構成なので、手動変更や UI 表示に影響されません。

# RDP を有効化し、NLA とファイアウォールも整える起動スクリプト(例)
# 目的:Windows 11 24H2/2025 以降を含む混在環境で安定的に RDP を許可する
# 実行コンテキスト:コンピューターの起動スクリプト(Local System)

$ErrorActionPreference = 'Stop'

# ドメイン コントローラーなどサーバー役割は対象外(必要に応じてロール条件を調整)
try {
    $cs = Get-CimInstance Win32_ComputerSystem
    if ($cs.DomainRole -ge 4) { return } # 4=BDC, 5=PDC 相当
} catch { }

# RDP 有効化フラグ
$tsReg = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server'
New-Item -Path $tsReg -Force | Out-Null
$current = (Get-ItemProperty -Path $tsReg -Name 'fDenyTSConnections' -ErrorAction SilentlyContinue).fDenyTSConnections
if ($null -eq $current -or $current -ne 0) {
    Set-ItemProperty -Path $tsReg -Name 'fDenyTSConnections' -Type DWord -Value 0
}

# NLA を必須化(不要なら Value を 0)
$rdpTcp = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp'
New-Item -Path $rdpTcp -Force | Out-Null
Set-ItemProperty -Path $rdpTcp -Name 'UserAuthentication' -Type DWord -Value 1

# ファイアウォール(Remote Desktop グループ)を有効化
try {
    Get-NetFirewallRule -DisplayGroup 'Remote Desktop' -ErrorAction Stop | Where-Object Enabled -ne 'True' | Enable-NetFirewallRule
} catch {
    # 古い OS でも動くように netsh でフォールバック
    &amp; netsh advfirewall firewall set rule group='Remote Desktop' new enable=Yes | Out-Null
}

# TermService(Remote Desktop Services)を起動(停止中のみ)
try {
    $svc = Get-Service -Name 'TermService' -ErrorAction Stop
    if ($svc.Status -ne 'Running') { Start-Service -Name 'TermService' }
} catch { }

# ログ(簡易)
$log = 'C:\ProgramData\RDP_Enable.log'
$line = ('{0} RDP enabled. fDenyTSConnections=0, NLA=1, FW=On' -f (Get-Date).ToString('s'))
New-Item -ItemType Directory -Path (Split-Path $log) -Force | Out-Null
Add-Content -Path $log -Value $line

配置手順:対象 GPO の「コンピューターの構成 > ポリシー > Windows の設定 > スクリプト(スタートアップ)」に上記スクリプトを登録します。PowerShell スクリプト用の専用ノード(PowerShell Scripts)がある場合は併用してください。

Restricted Groups とスクリプトの役割分担

  • スクリプト:RDP の有効化フラグ・NLA・ファイアウォール・サービス状態を確実に収束させる。
  • Restricted Groups:「誰が RDP できるか」の権限境界を AD セキュリティ グループで一元管理。

権限は 人(ユーザー/グループ)、設定は 端末(レジストリ/サービス/ファイアウォール) と分離するのが、監査やロールバックの観点で最も安全です。

検証ステップ(推奨手順)

  1. テスト OU を作成し、想定端末 2~3 台を移動。
  2. GPO をリンク(GPO-RDP-ScriptGPO-RDP-RestrictedGroupsGPO-RDP-Firewall の 3 本立て推奨)。
  3. 端末を再起動(起動スクリプト適用のため)。
  4. 管理端末から Test-NetConnection <PC> -CommonTCPPort RDP
  5. ユーザー検証:
    • RDP-Users メンバー → RDP できる。
    • 非メンバー → 「接続許可なし」で拒否される。
  6. イベント ログで確認:
    • TerminalServices-RemoteConnectionManager:ID 1149(認証試行)
    • Security:ID 4624/4625(ログオン成功/失敗)
    • GroupPolicy/Operational:適用状況(GPO のバージョン確認)

ロールバック(無効化)スクリプト例

# RDP を無効化し、FW を閉じる
$ErrorActionPreference = 'Stop'
$tsReg = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server'
Set-ItemProperty -Path $tsReg -Name 'fDenyTSConnections' -Type DWord -Value 1

try {
Get-NetFirewallRule -DisplayGroup 'Remote Desktop' | Disable-NetFirewallRule
} catch {
& netsh advfirewall firewall set rule group='Remote Desktop' new enable=No | Out-Null
}

Add-Content C:\ProgramData\RDP_Enable.log ("{0} RDP disabled." -f (Get-Date).ToString('s')) 

運用のベストプラクティス

GPO を 3 レイヤーに分ける

  1. GPO-RDP-Script:RDP 有効化・NLA・FW の技術設定のみ。
  2. GPO-RDP-RestrictedGroups:グループ編入(RDP-Users → ローカル Remote Desktop Users)。
  3. GPO-RDP-Hardening:「暗号化レベル」「タイムアウト」「セッション制限」など将来の強化設定。

責務分離により、障害切り分けと監査が容易になります。

変更管理と段階展開

段階対象目的成功判定
DevIT 管理部の検証端末スクリプトの収束確認ログ・レジストリ・FW の状態が意図通り
Pilot1~2 部門(10~30 台)ユーザー体験・権限境界の確認接続成功率 > 95%、非メンバー拒否 100%
Prod全社 OU本番リリース障害チケットの発生が許容範囲内

よくある落とし穴と対処

  • 別 GPO で RDP を禁止:上位 OU で「接続拒否」系の設定が競合していないか整理。
  • 「Deny log on through RDS」に Domain Users 等が入っている:優先的に拒否されます。明示的に除外。
  • サードパーティ製 FW/EDR:Windows Defender 以外の層が 3389/TCP を遮断していないか。
  • ポート変更:既に RDP ポートを変更している PC がある場合、HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber を確認。
  • 資格情報/証明書:自己署名 RDP 証明書の名前不一致で警告が出るのは正常。社内 CA の自動配布は別途検討。
  • UAC リモート制限:管理共有(C$)の操作失敗と RDP は別問題。UAC 制限ポリシーを無闇に緩めない。
  • DC への適用:DC は原則 RDP 閉塞または厳格管理。ファイル レプリケーションや権限逸脱のリスクが高い。

トラブルシューティング・チェックリスト

  1. RDP フラグ:fDenyTSConnections=0 か。
  2. NLA:UserAuthentication=1 か。非 NLA クライアントは弾かれる。
  3. FW 規則:ドメイン/プライベート プロファイルで Remote Desktop が有効。
  4. ローカル グループ:Remote Desktop UsersRDP-Users が表示される。
  5. ユーザー権利:「Deny log on through RDS」に対象が入っていない。
  6. イベント:1149(接続試行)、4624/4625(ログオン結果)を追跡。
  7. ネットワーク経路:VPN/ゼロトラスト機器・L3 ACL・社内 FW の 3389/TCP を確認。

実装テンプレート(まとめ)

GPO 1:RDP-Enable(起動スクリプト)

  • 配下:コンピューターの構成 > ポリシー > Windows の設定 > スクリプト(スタートアップ)
  • 内容:本記事の PowerShell。NLA=1、FW=On。

GPO 2:RDP-Auth(Restricted Groups)

  • 配下:コンピューターの構成 > ポリシー > Windows 設定 > セキュリティ設定 > Restricted Groups
  • 設定:RDP-Users を「このグループが所属するグループ」に Remote Desktop Users として追加。

GPO 3:RDP-Firewall(任意)

  • 配下:Windows Defender ファイアウォール の受信規則で Remote Desktop グループを有効化。
  • またはスクリプトで Enable-NetFirewallRule

ケーススタディ:部署横断の段階展開例

情報システム部で 1 週間のパイロットを実施。端末 25 台で起動スクリプトの収束率 100%、RDP-Users 非メンバーの誤許可 0 件を確認のうえ、本番 OU へリンク。以後は運用上の追加要望(非 NLA の旧端末からの接続)を却下し、NLA 必須の姿勢を維持しました。監査ログは SIEM に転送し、イベント ID 1149/4624/4625 を相関分析、ブルートフォース兆候を検知したら自動で RDP-Users から該当ユーザーを一時除外する運用ルールを定義しています。

FAQ

Q1. 「Allow users to connect remotely …」はもう使わないべき?
A. 旧来 OS では引き続き有効な選択肢です。ただし Windows 11 24H2/Windows 2025 では UI ロックや表示の齟齬が起きやすいため、レジストリ+FW をスクリプトで収束させる方が実運用では堅牢です。

Q2. Restricted Groups ではなく、GPP(ローカル ユーザーとグループ)で直接「Remote Desktop Users」に追加してもよい?
A. 可能ですが、誰が誰をどこに入れるかの権限境界が見えづらくなりがちです。組織内の統制・監査の観点では、AD グループ(RDP-Users)を一次ソースとして管理し、それを端末側のローカル グループに編入する方式が推奨です。

Q3. NLA を必須にすると古いクライアントが接続できません。
A. セキュリティと互換性のトレードオフです。どうしても必要な端末は隔離ネットワークに置く等の代替策を検討してください。NLA 無効は例外運用として期間と対象を限定し、別 OU/GPO で管理するのが安全です。

Q4. メンバーシップ変更が即時反映されない。
A. Kerberos トークンの再発行が必要です。ユーザーは一度サインアウト、または klist purge を実行。端末側は gpupdate /force と再ログオンで同期します。

Q5. 監査は何を見ればよい?
A. Security(4624/4625)と TerminalServices-RemoteConnectionManager(1149)を収集し、失敗回数の急増や時間帯の偏りをアラート化します。併せて GroupPolicy/Operational の適用イベントでドリフト検知を行うと堅牢です。

まとめ

  • 旧来 OS:GPO「Allow users to connect remotely …」+ Restricted Groups で安定運用が可能。
  • Windows 11 24H2/Windows 2025:UI グレーアウトや OFF 固定の事象により、起動スクリプトで fDenyTSConnections=0・NLA・FW を収束させる構成が実用的。
  • いずれも、「RDP を有効化」「誰が接続できるか」「FW/NLA」の 3 点を OU 単位で一括配布し、検証→段階展開→監査までをプロセス化することが鍵です。

参考実務メモ(貼って使える断片)

管理者の確認ワンライナー

# RDP 有効&FW 許可&グループ編入の 3 点を概観
"fDenyTSConnections=" + (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections).fDenyTSConnections
Get-NetFirewallRule -DisplayGroup 'Remote Desktop' | Select-Object DisplayName, Enabled | Format-Table -Auto
net localgroup "Remote Desktop Users"

ユーザー権利の確認

# "Allow log on through Remote Desktop Services" の内容を確認(RSOP/ローカル)
# 直接の UI では gpedit.msc &gt; ローカル ポリシー &gt; ユーザー権利の割り当て
secedit /export /cfg C:\secpol.cfg
Select-String -Path C:\secpol.cfg -Pattern "SeRemoteInteractiveLogonRight"

監査イベントの即席抽出

# 直近 24 時間の RDP 関連イベントを拾う
$since = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational'; StartTime=$since} |
  Where-Object Id -eq 1149 |
  Select-Object TimeCreated, Id, Message

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=$since} |
Select-Object TimeCreated, Id, @{n='Account';e={$_.Properties[5].Value}} 

例外 OU(非 NLA/一時許可)を作るときの注意

  • 例外用途の OU を明確に分離し、適用 GPO を最小化する。
  • 終了日・対象端末・責任者をチケット化し、満了時に自動ロールバックする。

以上を踏まえ、「RDP を有効化」「接続許可グループの限定」「FW/NLA」の 3 本柱を OU 単位で確実に収束させれば、混在環境でも安全かつ予測可能な RDP 運用が実現できます。

コメント

コメントする

目次