Active Directoryにおける管理者権限の委任(権限委譲)の完全ガイド
本記事では、Active Directoryドメインにおいて管理者権限を委任する方法について詳しく解説します。権限の委任を活用すれば、Domain AdminsやAccount Operatorsといった特権グループにユーザーを追加することなく、一般のドメインユーザー(非管理者)に対してAD管理タスクの実行権限を付与できます。例えば、特定のADセキュリティグループ(ヘルプデスクなど)に対して、ユーザーのグループへの追加、新規ユーザーアカウントの作成、アカウントパスワードのリセットなどの権限を委任することが可能です。
Active Directoryの委任権限の仕組み
ADで権限を委任するには、Active Directoryユーザーとコンピューター(DSA.msc)に用意されている「コントロールの委任ウィザード」を使用します。
ADでは非常に細かい粒度で管理権限を委任できます。あるグループにはOU内のパスワードリセット権限を、別のグループにはユーザーアカウントの作成・削除権限を、さらに別のグループにはグループメンバーシップの作成・変更権限を付与する、といった柔軟な設定が可能です。また、階層化されたネストされたOUに対しては、アクセス許可の継承を設定することもできます。
Active Directoryで権限を委任できる対象は以下のレベルです。
- ADサイト
- ドメイン全体
- Active Directory内の特定の組織単位(OU)
- 特定のADオブジェクト
Active Directoryにおける権限委任のベストプラクティス
- 特定のユーザーアカウントに直接権限を委任することは避けましょう。代わりにADに新しいセキュリティグループを作成し、ユーザーをそのグループに追加したうえで、そのグループに対してOUの権限を委任します。同じ権限を別のユーザーに付与したい場合も、セキュリティグループへの追加だけで対応できます。
- 拒否(Deny)権限は許可権限よりも優先されるため、使用は極力避けてください。
- ドメイン内の委任された権限は定期的に監査しましょう(PowerShellを使えば、OUごとの現在の権限一覧レポートを作成できます)。
- 管理者アカウントが格納されているOUを管理する権限を誰にも付与しないでください。付与してしまうと、サポート担当者であれば誰でもドメイン管理者のパスワードをリセットできてしまいます。すべての特権ユーザーおよびグループは、委任規則の適用対象外となる独立したOUに配置すべきです。
ADでパスワードリセットとアカウントロック解除の権限を委任する
ここでは、HelpDeskグループに対して、ドメイン内のパスワードリセットとユーザーアカウントのロック解除の権限を付与するケースを想定します。まず、PowerShellを使ってADに新しいセキュリティグループを作成します。
New-ADGroup "HelpDesk" -path 'OU=Groups,OU=Paris,OU=Fr,dc=woshub,DC=com' -GroupScope Global
続いて、対象のユーザーをこのグループに追加します。
Add-AdGroupMember -Identity HelpDesk -Members rdroz, jdupont
Active DirectoryユーザーとコンピューターのMMCスナップイン(dsa.msc)を起動し、ユーザーが含まれるOU(この例では「OU=Users,OU=Paris,OU=Fr,dc=woshub,DC=com」)を右クリックして、「コントロールの委任」メニューを選択します。

管理権限を付与するグループを選択します。

事前定義された権限セットから選ぶか(「以下の共通タスクを委任する」)、独自のタスクを作成して委任します。ここでは後者のオプションを選択します。
事前定義されている主な委任タスクは以下の通りです。
- ユーザーアカウントの作成、削除、および管理
- ユーザーのパスワードのリセットと次回ログオン時のパスワード変更の強制
- すべてのユーザー情報の読み取り
- グループの作成、削除、および管理
- グループのメンバーシップの変更
- グループポリシーリンクの管理
- ポリシーの結果セット(RSoP)の生成(計画)
- ポリシーの結果セット(RSoP)の生成(ログ)
- inetOrgPersonアカウントの作成、削除、および管理
- inetOrgPersonのパスワードのリセットと次回ログオン時のパスワード変更の強制
- すべてのinetOrgPerson情報の読み取り

次に、管理権限を付与するADオブジェクトの種類を選択します。ユーザーアカウントを制御したい場合は「ユーザーオブジェクト」を選びます。なお、OU内でユーザーを作成・削除する権限を付与したい場合は、「このフォルダー内にある選択したオブジェクトを作成/削除する」オプションを選択します。本例では、そのような権限は付与しません。

権限の一覧から、委任したい権限にチェックを入れます。この例では、ユーザーアカウントのロック解除のための「lockoutTimeの読み取り」と「lockoutTimeの書き込み」、そしてパスワードリセットのための「パスワードのリセット」を選択します。
また、ヘルプデスクチームがドメイン内のアカウントロックアウトの原因を特定できるようにするには、ドメインコントローラーのセキュリティログを検索する権限も併せて付与しておく必要があります。

「次へ」をクリックし、最終画面で選択した権限の委任内容を確認して完了します。
委任権限の動作確認
それでは、HelpDeskグループに属するユーザーアカウントで、対象OUのユーザーのパスワードをPowerShellを使ってリセットしてみましょう。
Set-ADAccountPassword gchaufourier -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "P@ssdr0w1" -Force -Verbose) –PassThru
(ドメインのパスワードポリシーに適合していれば)パスワードは正常にリセットされるはずです。
次に、New-ADUserコマンドレットを使って同じOUにユーザーを作成してみます。
New-ADUser -Name gmicheaux -Path 'OU=Users,OU=Paris,OU=FR,DC=woshub,DC=com' -Enabled $true
新規ADアカウントを作成する権限は委任していないため、ここでは「アクセス拒否」エラーが表示されるはずです。これにより、委任した権限だけが有効になっていることを確認できます。
委任された管理権限を持つユーザーの操作を監査するには、ドメインコントローラーのセキュリティログを利用します。例えば、ドメイン内で誰がユーザーパスワードをリセットしたのか、誰がADにユーザーアカウントを作成したのかを追跡したり、機密性の高いADグループへの変更を記録したりすることが可能です。
コンピューターをADドメインに参加させる権限の委任
デフォルト設定では、任意のドメインユーザーが最大10台までのコンピューターをドメインに参加させることができます。11台目を参加させようとすると、次のエラーが表示されます。
コンピューターをドメインに接続できませんでした。このドメインで作成が許可されているコンピューターアカウントの最大数を超えました。システム管理者に連絡して、この制限のリセットまたは引き上げを依頼してください。

この制限は、ms-DS-MachineAccountQuota属性の値を変更することでドメイン全体のレベルで調整できます。ただし、より正確かつ安全な方法は、特定のOUにコンピューターを参加させる権限を特定のユーザーグループ(ヘルプデスクなど)に委任することです。そのためには、「コンピューターオブジェクト」タイプのオブジェクトを作成する権限を委任します。コントロールの委任ウィザードで「このフォルダー内にある選択したオブジェクトを作成する」を選択してください。

権限セクションでは「すべての子オブジェクトの作成」を選択します。

なお、ADの組織単位間でオブジェクトを移動する権限を委任したい場合は、次の権限を付与する必要があります。
・ユーザーオブジェクトの削除
・識別名(Distinguished Name)の書き込み
・名前(name)の書き込み
・ユーザー(またはコンピューター)オブジェクトの作成
Active Directoryで委任された権限を表示・削除する方法
ADのOUには、任意の数の委任規則を割り当てることができます。ADUCコンソールでOUのプロパティを開き、「セキュリティ」タブに移動すると、権限が委任されたグループとその権限の一覧を確認できます。
このタブには、該当コンテナーに対して権限が付与されているADプリンシパルの一覧が表示されます。「詳細設定」タブを開くと、付与された権限の詳細を確認できます。下図のように、HelpDeskグループにはパスワードのリセットが許可されていることがわかります。

以前に委任によって割り当てた特定の管理権限を取り消すことも可能です。権限を委任したグループ名を見つけて、「削除」をクリックするだけです。
さらに、「セキュリティ」→「詳細設定」タブからは、各種セキュリティグループに対して委任権限を手動で細かく割り当てることもできます。
PowerShellでActive Directoryの権限を委任する方法
PowerShellを使用すれば、OUに委任された権限の一覧を取得したり、既存の権限を変更したりすることもできます。Active Directoryの権限の表示と変更には、Get-ACLおよびSet-ACLコマンドレットを使用します(ファイルやフォルダーのNTFS権限管理にも、これらと同じPowerShellコマンドレットが使われています)。
次のシンプルなスクリプトは、ADの特定の組織単位に委任されたすべての非標準権限を一覧表示します。
# OUの取得
$OUs = Get-ADOrganizationalUnit -Filter 'DistinguishedName -eq "OU=Users,OU=Paris,DC=woshub,DC=com"'| Select-Object -ExpandProperty DistinguishedName
$schemaIDGUID = @{}
$ErrorActionPreference = 'SilentlyContinue'
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(schemaIDGUID=*)' -Properties name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
Get-ADObject -SearchBase "CN=Extended-Rights,$((Get-ADRootDSE).configurationNamingContext)" -LDAPFilter '(objectClass=controlAccessRight)' -Properties name, rightsGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.rightsGUID,$_.name)}
$ErrorActionPreference = 'Continue'
ForEach ($OU in $OUs) {
$report += Get-Acl -Path "AD:\$OU" |
Select-Object -ExpandProperty Access |
Select-Object @{name='organizationalUnit';expression={$OU}}, `
@{name='objectTypeName';expression={if ($_.objectType.ToString() -eq '00000000-0000-0000-0000-000000000000') {'All'} Else {$schemaIDGUID.Item($_.objectType)}}}, `
@{name='inheritedObjectTypeName';expression={$schemaIDGUID.Item($_.inheritedObjectType)}}, `
*
}
# 割り当てられたOU権限のレポート
Out-GridViewコマンドレットを使えば、委任された権限レポートをGUI形式で確認できます。
$report| where {($_.IdentityReference -notlike "*BUILTIN*") -and ($_.IdentityReference -notlike "*NT AUTHORITY*") }| Out-GridView
また、権限の一覧をCSVファイルにエクスポートして、Excelで詳細に分析することもできます(PowerShellスクリプトからExcelファイルへ直接データを書き出すことも可能です)。
$report | Export-Csv -Path "C:\reports\AD_OU_Permissions.csv" –NoTypeInformation
生成されたレポートを見ると、HelpDeskグループに対して、OU内のユーザーパスワードのリセット権限(ObjectTypeName=User-Force-Change-Password)が委任されていることが確認できます。

dsaclsツールを使った権限の委任
dsaclsツールを使用してOUに権限を委任することもできます。以下はその実行例です。
dsacls "ou=users,ou=paris,dc=woshub,dc=com" /I:S /G "WOSHUB\HELPDESK:CA;Reset Password;user" "WOSHUB\HELPDESK:WP;pwdLastSet;user" "WOSHUB\HELPDESK:WP;lockoutTime;user
PowerShellスクリプトによる権限の割り当て
PowerShellを使って組織単位コンテナーに直接権限を割り当てることも可能です。以下の例では、パスワードリセットの権限を委任しています。
$ou = "AD:\OU=users,OU=Paris,DC=woshub,DC=com"
$group = Get-ADGroup helpdesk
$sid = new-object System.Security.Principal.SecurityIdentifier $group.SID
$ResetPassword = [GUID]"00299570-246d-11d0-a768-00aa006e0529"
$UserObjectType = "bf967aba-0de6-11d0-a285-00aa003049e2"
$ACL = get-acl $OU
$RuleResetPassword = New-Object System.DirectoryServices.ActiveDirectoryAccessRule ($sid, "ExtendedRight", "Allow", $ResetPassword, "Descendents", $UserObjectType)
$ACL.AddAccessRule($RuleResetPassword)
Set-Acl -Path $OU -AclObject $ACL
同様の手法を使えば、その他の権限もPowerShell経由でADの組織コンテナーに柔軟に委任できます。運用要件に応じて、GUIウィザードとスクリプトによる自動化を使い分けることをおすすめします。
-
ZabbixでActive Directory連携のシングルサインオン(SSO)認証を構築する方法【Kerberos設定手順】
本記事では、Kerberosを使用して、Zabbix 4.0以降とActive Directoryを連携させた透過的なSSO(シングルサインオン)認証を段階的に構築する手順を解説します。最終的なゴールは、ユーザーが資格情報を入力することなく、Zabbixのフロントエンドに自動ログインできる状態を作ることです。そのためには、ユーザーがZabbixに登録されたActive DirectoryドメインアカウントでWindowsにログインしている必要があります。さらに、ブラウザ側でも事前設定(Kerberosサポートの有効化やIEでの信頼済みイントラネットサイトへの登録など)が必要です。検証環境今回の
-
Windows 10でActive Directoryを有効にする方法【RSAT導入から設定まで解説】
Active Directoryは、Windows Server環境を管理するための重要なツールです。ネットワーク上のユーザーやリソースへのアクセス権限を、管理者が制御・付与するために使用されます。Windows PCにはデフォルトではインストールされていませんが、Microsoftの公式サイトから入手して、自分のデバイスにインストールすることが可能です。 「Windows 10でActive Directoryをどう使えばいいのか分からない」とお悩みの方も多いのではないでしょうか。本記事では、Windows 10でActive Directoryを有効にする方法を、初心者の方にも分かりやすく