【Active Directory】OU内の特定ユーザーだけにGPOを適用する方法

「同じOUに所属している一部のユーザーだけ、ドライブマップを別の設定にしたい」——Active Directoryを運用していると、必ずこの手の要望が飛んできます。

GPO(グループポリシーオブジェクト)はOUにリンクした時点で、そのOU配下の全ユーザー(全コンピューター)に適用されます。一部だけに絞りたいときに使うのがセキュリティフィルターですが、ここには「設定したはずなのに、誰にも適用されなくなる」という有名な落とし穴があります。

原因は2016年6月の更新プログラム、MS16-072です。

この記事では、セキュリティフィルターの仕組みと設定手順、そしてMS16-072を踏まえた正しい設定方法までをまとめます。

この記事で分かること
  • セキュリティフィルターでOU内の特定ユーザーだけにGPOを適用する手順
  • Authenticated Usersを外すとGPOが適用されなくなるMS16-072の理由と対処
  • Denyによる除外設定、gpresultでの確認方法、WMIフィルターとの使い分け
目次

結論|セキュリティフィルターで特定ユーザーに絞り、委任タブで読み取りを戻す

先に結論だけまとめます。

OU内の一部のユーザーにだけGPOを適用したいときは、GPMC(グループポリシーの管理コンソール)のスコープタブ「セキュリティ フィルター処理」で対象グループを指定します。
ただしAuthenticated Usersを外しただけでは、GPOが誰にも適用されなくなります
委任タブでAuthenticated Users(またはDomain Computers)に「読み取り」権限だけを付け直すところまでがワンセットです。

この「読み取りを戻す」という一手間が必要な理由がMS16-072です。

ここが一番ハマるポイントなので、後半で詳しく解説します。

なぜOUのリンクだけでは絞りきれないのか

GPOのリンク先はサイト/ドメイン/OUの3つしかありません。つまりGPOの適用範囲を分けたいなら、本来はOU構造そのものを分ける必要があります。

しかし現場では、次のような「OU構造とは一致しない例外」が必ず出てきます。

  • 同じ部署なのでOUは分けたくない
  • 特定の担当者だけドライブマップを変えたい
  • 一部の端末だけUSBメモリを許可したい

例外が出るたびにOUを切り刻んでいくと、OU構造はあっという間に崩壊します。そこで登場するのがセキュリティフィルターです。

① OUにリンクしただけ GPO ドライブマップ設定 セキュリティフィルター:なし 既定の Authenticated Users のまま OU:営業部 ユーザーA ✓ 適用される ユーザーB ✓ 適用される ユーザーC ✓ 適用される ユーザーD ✓ 適用される OU配下の全員に適用される ② セキュリティフィルターで絞る GPO ドライブマップ設定 セキュリティフィルターで絞る GPO_DriveMap_Apply OU:営業部 ユーザーA ✓ 適用される ユーザーB ✓ 適用される ユーザーC − 対象外 ユーザーD − 対象外 グループのメンバーだけに適用される
図1:OUにリンクしただけの場合と、セキュリティフィルターで絞った場合の適用範囲の違い

セキュリティフィルターの仕組み

GPOもActive Directory上のオブジェクトなので、ACL(アクセス制御リスト)を持っています。GPOが適用される条件は、対象が次の2つの権限を両方持っていることです。

権限意味
読み取り(Read)GPOの中身を読める
グループポリシーの適用(Apply group policy)実際に適用対象になる

既定ではAuthenticated Usersにこの両方が付いています。だからOUにリンクするだけで、配下の全員に適用されるというわけです。

GPMCの「スコープ」タブにあるセキュリティフィルター処理は、この2つの権限をまとめて操作するUIにすぎません。実体はACLの編集です。仕組みを押さえておくと、後述するMS16-072の話が理解しやすくなります。

「許可と拒否の組み合わせで実効的なアクセス権が決まる」という考え方は、共有フォルダのNTFS権限とまったく同じです。権限まわりの基礎を整理したい方はWindowsファイル共有のセキュリティ設計入門 ─ 共有権限とNTFS権限を正しく理解する ─もあわせてどうぞ。

設定手順

ここでは「営業部OUの中で、GPO_DriveMap_ApplyグループのメンバーにだけGPOを適用する」ケースを例に、GPMC(グループポリシーの管理)での手順を示します。

STEP
適用対象のセキュリティグループを作る

Active Directoryユーザーとコンピューターで、適用対象をまとめるセキュリティグループを作成し、対象ユーザーを所属させます。ここでは GPO_DriveMap_Apply という名前にします。

STEP
スコープタブでAuthenticated Usersを削除する

GPMCで対象のGPOを選択し、スコープタブを開きます。「セキュリティ フィルター処理」の Authenticated Users を選択して削除します。

STEP
適用したいグループを追加する

同じスコープタブの「追加」から、STEP1で作成した GPO_DriveMap_Apply を指定します。これで「読み取り」と「グループポリシーの適用」の両方が付与されます。

STEP
委任タブでAuthenticated Usersに「読み取り」を戻す

委任タブを開き、「追加」から Authenticated Users を追加します。続いて表示されるアクセス許可のプルダウンで「読み取り」を選びます。

このダイアログのプルダウンには「読み取り」「設定の編集」「設定の編集、削除、セキュリティの変更」しかなく、「グループポリシーの適用」という選択肢はそもそも存在しません。つまりここから追加する限り、適用権限が付いてしまう心配はありません。

この手順を飛ばすと、次の章で説明する理由でGPOが誰にも適用されなくなります。STEP2でAuthenticated Usersを削除した直後にこのSTEPまで済ませてしまうと、読み取り権限が無い時間を最小化できます。

STEP
対象ユーザーで再ログオンして確認する

グループへの追加はログオン時に評価されるため、対象ユーザーを一度サインアウトさせてから再ログオンし、gpupdate /forcegpresult /r で適用状況を確認します。

個別ユーザーではなくグループで絞る

セキュリティフィルターにはユーザーオブジェクトを直接指定することもできますが、原則グループを使います

ユーザー直指定にすると、人事異動のたびにGPOそのものを触ることになりますし、「なぜこの人だけ設定が違うのか」がGPOを開かないと分からなくなります。GPO_〇〇_Apply のような命名でグループを作っておけば、後任者が見ても意図を読み取れます。

ハマりどころ|MS16-072でGPOが適用されなくなる

ここが本題です。2016年6月の更新プログラム(MS16-072 / KB3163622)以降、ユーザー構成GPOの取得が、ユーザーのセキュリティコンテキストではなくコンピューターのセキュリティコンテキストで行われるように変更されました。

つまり、GPOを読みに行く主体はログオンユーザーではなくコンピューターアカウントです。ドメイン参加時に自動作成される、末尾に $ が付く PC01$ のようなアカウントを指します(Windowsのアカウント種別の全体像はAdministrator、DefaultAccount、Guestアカウントの違いと役割で整理しています)。

ここでAuthenticated Usersをセキュリティフィルターから完全に削除してしまうと、そこに含まれていたコンピューターアカウントがGPOへの読み取り権限を失います。結果としてGPOを読めない → 対象ユーザーにも適用されないという状態になります。

MS16-072 適用前(〜2016年5月) ログオンユーザー user01 読み取り GPO の ACL Authenticated Users = 読み取り + 適用 ✓ ユーザーに適用される 想定どおりの動作 MS16-072 適用後(2016年6月〜・現在) コンピューターアカウント PC01$ 読み取り GPO の ACL Authenticated Users 削除 = 読み取り権限なし ✕ 誰にも適用されない gpresult にも出てこない 対処 委任タブで Authenticated Users または Domain Computers に「読み取り」のみを付与する ※「グループポリシーの適用」は付けない(付けると絞り込みの意味がなくなる)
図2:MS16-072によるGPO読み取り主体の変化と、フィルター設定時の対処

「フィルターは正しく設定したのに、gpresultに出てこない」というトラブルの大半はこれが原因です。AD側の設定ミスやレプリケーション遅延を疑う前に、まずGPOの読み取り権限を確認してください。

対処|委任タブで「読み取り」だけを付与する

GPOの委任タブで、以下のどちらかに「読み取り」権限のみを付与します。

  • Authenticated Users(コンピューターアカウントも含まれる)
  • Domain Computers(ドメイン参加コンピューターだけに限定したい場合)

「グループポリシーの適用」まで付けてしまうと、結局全員に適用されて絞り込みの意味がなくなります。読み取りだけ、が鉄則です。

Domain Computersを選ぶ場合は、ドメインコントローラーはDomain Computersに所属しない(Domain Controllersグループに入る)点に注意してください。DCに適用するGPOで絞り込みを行うときは、Authenticated Usersを使うか、Domain Controllersにも読み取り権限を付与する必要があります。

PowerShellなら権限の確認と変更が一気にできる

GPMCで「削除して追加し直す」のは手間なので、GroupPolicyモジュールのコマンドレットを使うほうが確実です。

# 現在のGPO権限を一覧で確認する
Get-GPPermission -Name "DriveMap_Sales" -All

# Authenticated Users を「読み取りのみ」に変更する(MS16-072 対策)
Set-GPPermission -Name "DriveMap_Sales" -TargetName "Authenticated Users" -TargetType Group -PermissionLevel GpoRead -Replace

# 適用対象グループに「読み取り+グループポリシーの適用」を付与する
Set-GPPermission -Name "DriveMap_Sales" -TargetName "GPO_DriveMap_Apply" -TargetType Group -PermissionLevel GpoApply

GpoRead が「読み取り」、GpoApply が「読み取り+グループポリシーの適用」に相当します。既存の権限レベルを下げる(GpoApply → GpoRead)場合は -Replace が必要です。付け忘れると既存の権限が残り、意図した絞り込みになりません。

逆に「特定のユーザーだけ除外したい」場合

対象がほぼ全員で、一部だけ外したいケースでは、フィルターで絞るよりもDeny(拒否)を使うほうが素直です。

  1. GPOの委任タブから「詳細設定」を開く
  2. 除外したいグループを追加する
  3. 「グループポリシーの適用」の拒否にチェックを入れる

拒否は許可より優先されるため、そのグループだけが適用対象から外れます。この方法ならセキュリティフィルターはAuthenticated Usersのままでよいので、MS16-072の問題も起きません。

Denyはスコープタブのセキュリティフィルターには表示されません。委任タブの詳細設定を開かないと存在に気づけないため、引き継ぎ時の地雷になりやすい設定です。設定したら必ずドキュメントに残しておきましょう。

適用結果の確認方法

設定後は、対象端末にログオンして次のコマンドで確認します。

# ユーザー側の適用結果を確認
gpresult /r /scope:user

# HTMLレポートで詳細を出力
gpresult /h C:\temp\gpresult.html

# ポリシーの再適用
gpupdate /force

gpresult /r の「適用されなかったグループ ポリシー オブジェクト」に フィルター処理を行いました: 拒否 (セキュリティ) と出ていれば、フィルターが効いている状態です。

問題は、意図して適用したい相手にこの表示が出ている場合です。そのときは設定内容ではなく、MS16-072による読み取り権限の不足をまず疑ってください。

管理者権限で開いたコマンドプロンプトから gpresult /r を実行すると、昇格に使ったアカウントのユーザー設定が表示されます。調べたい対象ユーザーのセッションで実行するか、GPMCの「グループポリシーの結果」ウィザードを使いましょう。ウィザードならリモートの端末とユーザーの組み合わせでも同じ確認ができます。

セキュリティフィルター以外の絞り込み手段

絞り込みの手段はセキュリティフィルターだけではありません。要件によって使い分けます。

手段向いているケース
セキュリティフィルター特定のユーザー/グループに絞る(今回のケース)
WMIフィルターOSバージョン、機種、メモリ容量など端末の属性で絞る
項目レベルのターゲット設定グループポリシーの環境設定内で、設定単位に細かく条件分岐したい
ループバック処理「この端末にログオンした人全員」にユーザー設定を当てたい(共用PC等)

WMIフィルターはポリシー適用のたびに評価が走るため、多用するとログオンや起動が遅くなります。ユーザー単位で分けたいだけなら、セキュリティフィルターのほうが軽量です。

よくある質問

フィルター用グループにユーザーを追加したのに、GPOが適用されません。

グループのメンバーシップはログオン時に取得するアクセストークンに反映されるため、追加した直後は反映されません。対象ユーザーを一度サインアウトさせ、再ログオンしてから gpupdate /force を実行してください。コンピューターアカウントをグループに追加した場合は、端末の再起動が必要です。

コンピューターの構成のGPOを、ユーザーグループで絞り込めますか?

絞り込めません。コンピューターの構成はコンピューターアカウントに対して適用されるため、セキュリティフィルターにもコンピューターアカウントを含むグループを指定する必要があります。「ユーザーグループを指定したのにコンピューター設定が効かない」というのは、意外とよくある勘違いです。

MS16-072の対策として、更新プログラムをアンインストールするのはアリですか?

おすすめしません。MS16-072はグループポリシーに対する中間者攻撃に対処するセキュリティ更新で、現在のWindowsではこの挙動が標準です。アンインストールではなく、委任タブで読み取り権限を付与する方法で対応してください。

既存のGPOがMS16-072の影響を受けていないか、まとめて確認できますか?

PowerShellで全GPOの権限を洗い出すのが確実です。Get-GPO -All | ForEach-Object { Get-GPPermission -Guid $_.Id -All } のようにGPOのIDを1つずつ渡して回し、Authenticated UsersもDomain Computersも読み取り権限を持たないGPOを探します。過去にセキュリティフィルターを触った覚えのあるGPOは、優先的に確認しておくとよいでしょう。

まとめ

  • OU内の特定ユーザーだけにGPOを適用するならセキュリティフィルターを使う
  • Authenticated Usersを外したら、委任タブで「読み取り」権限を戻す(MS16-072対策)
  • フィルターはユーザー直指定ではなくグループで行う
  • Denyはスコープタブに表示されないので、設定したら必ず記録を残す

セキュリティフィルターは、OU設計をきれいに保つための逃げ道として使える一方、乱用すると「GPOの一覧を見ても実際の適用範囲が分からない」状態を招きます。

基本はOU設計で分け、どうしても構造と合わない例外だけをフィルターで処理する。この使い分けが、運用を破綻させないための現実的なラインだと思います。

ドメインに参加していない端末はどうする?

ここまではActive Directory配下の話でした。一方でドメインに参加していない端末(ワークグループ運用)では、そもそもGPOをADから配れません。セキュリティフィルターで絞る以前に、1台ずつ gpedit.msc を開いてローカルグループポリシーを設定していくことになります。

キッティングのたびに30〜40分かけて同じ設定を繰り返す——この作業をLGPO.exeなどの外部ツールを使わず、PowerShellだけで数分に短縮するツールと、その裏側の仕組みをnoteにまとめています。

noteに収録している内容

  • ローカルGPO 約40項目を一括適用するPowerShellスクリプト本体(LGPO.exe不要・Windows標準機能のみ)
  • secedit.sdb / Registry.pol / gpt.ini の内部構造の解説(設定が「書けているのに無反映」になる理由)
  • 確認・適用・復元の3モードの動作デモ(バックアップからの巻き戻しに対応)
  • 設定項目一覧(40項目)と購入前FAQ

価格:1,980円(先行50部限定価格・以降は2,980円を予定)
仕組みの解説とサンプルコードまでは無料で読めます。

note(ノート)
【LGPO.exe不要】ワークグループPCのローカルGPO 40項目をPowerShellで一括適用する|ねろ@ITエンジニア記... はじめに——キッティング20台目、gpedit.mscの画面の前で キッティング20台目。gpedit.mscを開き、設計書と画面を見比べながら、40項目を上から順に設定していきます。夕方...

※ 対象はワークグループ運用のWindows Pro以上です。ドメイン参加済みPCとWindows Homeエディションは対象外のため、本記事のようなAD環境ではそのままは使えません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次