将 AD FS PowerShell commandlet 访问权限委托给非管理员用户

默认只有 AD FS 管理员可以通过 PowerShell 执行 AD FS 管理。 对于许多大型组织来说,在处理其他角色(如技术支持人员)时,这可能不是可行的操作模型。

借助 Just Enough Administration (JEA),客户现可将特定 commandlet 的权限委托给不同的人员组。

此用例的一个很好的示例是允许技术支持人员查询 AD FS 帐户锁定状态,并在审核用户后在 AD FS 中重置帐户锁定状态。 在这种情况下,需要委派的 cmdlt 为:

  • Get-ADFSAccountActivity
  • Set-ADFSAccountActivity
  • Reset-ADFSAccountLockout

本文档的其余部分使用此示例。 但是,用户可以对其进行自定义,以同时允许委派设置依赖方的属性,并将其移交给组织内的应用程序所有者。

创建授予用户权限所必要的组

  1. 创建组托管服务帐户。 gMSA 帐户用于允许 JEA 用户像访问其他机器或 Web 服务一样访问网络资源。 它提供可用于对域中任何计算机上的资源进行身份验证的域标识。 稍后在设置中向 gMSA 帐户授予必要的管理权限。 在此示例中,我们将帐户称为 gMSAContoso。
  2. 创建一个 Active Directory 组,该组可以用需要被授予对委派命令的权限的用户填充。 在此示例中,技术支持人员被授予读取、更新和重置 AD FS 锁定状态的权限。 在整个示例中,我们将此组称为 JEAContoso。

在 AD FS 服务器上安装 gMSA 帐户

创建对 AD FS 服务器具有管理权限的服务帐户。 只要安装了 AD RSAT 包,就可以在域控制器上或远程执行此操作。 必须在 AD FS 服务器所在的同一林中创建服务帐户。

根据场配置修改示例值。

 # This command should only be run if this is the first time gMSA accounts are enabled in the forest
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10)) 

# Run this on every node that you want to have JEA configured on
$adfsServer = Get-ADComputer server01.contoso.com

# Run targeted at domain controller
$serviceaccount = New-ADServiceAccount gMSAcontoso -DNSHostName <FQDN of the domain containing the KDS key> -PrincipalsAllowedToRetrieveManagedPassword $adfsServer –passthru

# Run this on every node
Add-ADComputerServiceAccount -Identity server01.contoso.com -ServiceAccount $ServiceAccount

在 AD FS 服务器上安装 gMSA 帐户。 这需要在场中的每个 AD FS 节点上运行。

Install-ADServiceAccount gMSAcontoso

授予 gMSA 帐户管理员权限

如果场使用委派管理,请通过将 gMSA 帐户添加到具有委派管理员访问权限的现有组来授予该帐户管理员权限。

如果场未使用委派管理,请通过使 gMSA 帐户成为所有 AD FS 服务器上的本地管理组来授予其管理员权限。

创建 JEA 角色文件

在 AD FS 服务器上,在记事本文件中创建 JEA 角色。 有关创建角色的说明,请参阅 JEA 角色功能

此示例中委派的 cmdlt 为 Reset-AdfsAccountLockout, Get-ADFSAccountActivity, and Set-ADFSAccountActivity

委派“Reset-ADFSAccountLockout”、“Get-ADFSAccountActivity”和“Set-ADFSAccountActivity”cmdlt 的访问权限的示例 JEA 角色:

@{
GUID = 'b35d3985-9063-4de5-81f8-241be1f56b52'
ModulesToImport = 'adfs'
VisibleCmdlets = 'Reset-AdfsAccountLockout', 'Get-ADFSAccountActivity', 'Set-ADFSAccountActivity'
}

创建 JEA 会话配置文件

按照说明创建 JEA 会话配置文件。 配置文件确定可以使用 JEA 终结点的用户,以及这些用户可以访问的功能。

角色功能由角色功能文件的平面名称(不含扩展名的文件名)进行引用。 如果多个角色功能适用于具有相同平面名称的系统,则 PowerShell 使用其隐式搜索顺序选择有效的角色功能文件。 它不提供对名称相同的所有角色功能文件的访问权限。

若要使用路径指定角色功能文件,请使用 RoleCapabilityFiles 参数。 对于子文件夹,JEA 查找包含 RoleCapabilities 子文件夹的有效 PowerShell 模块,其中 RoleCapabilityFiles 参数应修改为 RoleCapabilities

示例会话配置文件:

@{
SchemaVersion = '2.0.0.0'
GUID = '54c8d41b-6425-46ac-a2eb-8c0184d9c6e6'
SessionType = 'RestrictedRemoteServer'
GroupManagedServiceAccount =  'CONTOSO\gMSAcontoso'
RoleDefinitions = @{ JEAcontoso = @{ RoleCapabilityFiles = 'C:\Program Files\WindowsPowershell\Modules\AccountActivityJEA\RoleCapabilities\JEAAccountActivityResetRole.psrc' } }
}

保存会话配置文件。

如果已使用文本编辑器手动编辑 pssc 文件,建议测试会话配置文件以确保语法正确。 如果会话配置文件未通过此测试,则它没有在系统上成功注册。

在 AD FS 服务器上安装 JEA 会话配置

在 AD FS 服务器上安装 JEA 会话配置

Register-PSSessionConfiguration -Path .\JEASessionConfig.pssc -name "AccountActivityAdministration" -force

操作说明

设置后,可以使用 JEA 日志记录和审核来确定正确的用户是否有权访问 JEA 终结点。

使用委派命令:

Enter-pssession -ComputerName server01.contoso.com -ConfigurationName "AccountActivityAdministration" -Credential <User Using JEA>
Get-AdfsAccountActivity <User>