Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

如何创建 Active Directory 基于查询的组

如何创建 Active Directory 基于查询的组

Jan 23, 2024

Using Active Directory(AD)安全组和分发组是简化 IT 管理、增强安全性并实现有效沟通的最佳实践。然而,在许多组织中,这些组的成员关系由特定用户、计算机以及其他实体的明确清单来定义。使用这类静态组既费力又容易出错,因为当员工加入公司或变更岗位、添加或退役设备,或发生其他变更时,所有相关组都需要手动更新。

有一个有用的替代方案,可以提升安全性并降低 IT 负担:通过运行 AD 查询来动态确定组成员身份。Microsoft 提供了一个用户友好的界面,用于基于 LDAP 查询创建分发(Distribution)组。不幸的是,用于创建基于查询的安全组的对应 GUI 并不存在——而基于查询的安全组构成了绝大多数 AD 组;唯一原生的选项是使用 Windows PowerShell 编写脚本。

本文将说明创建这两种动态组的原生方法,然后提供一个强有力的替代方案:Netwrix Directory Manager 中的 Smart Groups。

分发(Distribution)组

我们先从分发(Distribution)组开始,它们更常被称为分发列表(distribution lists)。分发列表使用户能够更高效、更准确地向一组人员发送电子邮件消息。例如,你可以为每个部门和团队创建一个分发列表,也可以为每个办公地点创建一个分发列表。这些分发列表会出现在全局地址列表(Global Address List,GAL)中,因此业务用户只需从 GAL 中选择一个条目,就能向整组同事发送消息。

静态分发(Distribution)组的缺点

然而,由于员工会持续加入和离开组织,并在组织内不断变更角色,想要让分发列表保持最新状态对 IT 团队来说是一件很麻烦的事。在某些情况下,他们甚至可能没有足够的洞察力来确保自己能正确地填充这些列表。

未能让分发列表保持最新可能会带来严重后果。如果应当在列表中的用户未被包含,他们就不会收到那些可能对其自身的工作效率以及对关键业务流程都很重要的消息。更糟的是,不准确的分发列表还会造成安全与合规问题,因为消息可能会被发送给那些不应看到其中包含信息的个人。

基于查询的分发组

为了解决这一问题,Microsoft 在 Exchange Server 2003 中引入了基于查询的分发组。它们提供与标准分发组相同的功能,但成员资格不由静态的用户列表决定。相反,每当有人向关联组发送电子邮件时,都会运行 LDAP 查询,从而动态生成成员资格。

例如,你可以创建一个 LDAP 查询,用于将某个组的成员资格定义为组织中“当前属于某个特定部门”的所有用户。如果某个用户调到另一个部门,只要他们的 AD 用户对象一更新,就不会再收到发送到该分发组的电子邮件——无需任何人手动修改分发列表的成员资格。

与通讯组(distribution group)相关联的查询可以在 Active Directory 中的 msExchDynamicDLFilter 和 msExchQueryFilter 中找到。

使用 Microsoft Exchange 创建基于查询的通讯组(distribution group)的方法

基于查询的通讯组(distribution group)很容易创建:

  1. 启动 Exchange 管理中心,然后在左侧窗格中选择 Recipients
  2. 导航到 Groups > New > Dynamic distribution group
  3. 在“新建动态分发组(New Dynamic Distribution Group)”向导中,指定新列表的以下属性:
  4. 该组的名称、别名和描述
  5. 要在其中创建该组的组织单位(OU)
  6. 该组的所有者(可选,但建议指定)
  7. 收件人类型,例如资源邮箱,或拥有 Exchange 邮箱的用户
  8. 用于确定用户是否属于通讯组的标准,例如其部门和地理位置
  9. 保存 以创建该组。

通过 Exchange 创建的基于查询的通讯组的限制

通过 Exchange 创建的基于查询的通讯组比静态通讯列表更准确、也更易于维护,但需要注意一些重要特点:

  • 用于确定用户是否属于通讯组的属性仅限于少数几项常见的用户属性——容器、州/省、市/地区的行政区域(state 或 province)、公司和部门——以及少数自定义属性。
  • 由于分发列表的成员身份是在向该列表发送电子邮件时确定的,业务用户无法在其 Outlook 客户端中查看分发列表的成员,因此也无法确定其发送到该列表的消息究竟会被谁收到。
  • 每当向基于查询的分发列表发送电子邮件时,都会对查询进行计算评估。因此,大量使用这些组会给 Exchange 服务器以及 global catalog 带来显著的负担。

安全组

尽管分发组当然很有价值,并且需要保持最新以确保安全性和生产力, AD security 组甚至更为重要。管理员依赖 AD 安全组,以便根据用户在组织中的角色,快速且准确地为用户配置所需的访问权限。例如,你可以创建一个名为“Sales”的安全组,并为销售部门成员所需的特定信息、应用程序以及其他资源授予其访问权限。任何成为某个组成员的用户都会自动获得分配给该组的所有访问权限。

静态安全组的缺点

与静态分发组(static distribution groups)一样,IT 团队面临持续的挑战:确保每个静态安全组中的成员都是“恰好正确”的用户。事实上,随着员工在组织内部随时间更换岗位,保留对与其职责不再相关的组的成员资格非常常见。例如,如果某人从销售(Sales)部门调到市场(Marketing),由于没有人将其从与销售相关的组中移除,他们往往仍保留对销售数据库以及其他资源的权限,而这些资源他们本不应该再能够访问。此外,负担过重的管理员也可能犯错,例如将一名初级员工添加到类似“Managers”的组中,从而让其获得对敏感信息不恰当的访问权限。

这种“过度授权”(overprovisioning)是安全与监管合规两方面都十分严重的问题。另一方面,IT 团队有时也会未能将用户加入到他们应该具备成员资格的所有安全组中,这可能会扰乱重要的业务流程,并增加帮助台(helpdesk)的负担。

使用 Microsoft PowerShell 更新安全组的成员身份

管理员可以使用 Windows PowerShell 根据查询创建并填充安全组。他们也可以使用脚本来更新安全组的成员身份,而不是手动添加和移除成员。例如,下面的脚本可确保安全组 PseudoDynamicGroup 仅使用位于指定 OU(desiredUsers):

Import-Module ActiveDirectory

      #Define the variable ‘groupname’ and load it with the members of the group ‘PseudoDynamicGroup’.

    $groupname = PseudoDynamicGroup

    #Define the variable ‘users’ and populate it with all the users in specified OU.

    $users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"

    #Iterate through the users in the ‘users’ variable. Add each of them to the group ‘PseudoDynamicGroup’ if they are not already a member.

    foreach($user in $users)

    {

      Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue

    }

    #Define the variable ‘members’ and populate it with the current membership of the security group ‘PseudoDynamicGroup’.

    $members = Get-ADGroupMember -Identity $groupname

    #Iterate through the users in the ‘members’ variable. If any user is not in the specified OU, remove them from ‘PseudoDynamicGroup’.

    foreach($member in $members)

    {

      if($member.distinguishedname -notlike "*ou=desiredUsers,dc=domain,dc=tld*")

      {

        Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname

      }

    }
      

通过 PowerShell 创建的基于查询的安全组的局限性

显然,为每个 AD 安全组都手工精心编写如这种 PowerShell 脚本是一项规模巨大的工作,需要专业技能。此外,脚本还需要维护,并且在创建新的项目或团队时还要编写新的脚本。许多组织根本没有足够的 IT 资源来投入到这项具有挑战性且至关重要的工作中,因此他们会寻求像 Netwrix Directory Manager 这样的可靠第三方解决方案。

使用 Netwrix Directory Manager 创建基于查询的组

使用 Netwrix Directory Manager,您可以轻松创建分发列表和安全组:它们的成员资格可通过 Active Directory 查询动态确定。这些基于查询的组称为 Smart Groups。

要创建 Smart Group,您只需为该组定义一个 AD 查询,并设置运行计划。每次查询运行时,它都会从目录中获取对象以更新组成员资格。该查询可以手动运行,也可以按照预先定义的计划自动运行。由此可见,与通过 Exchange 创建的动态分发列表不同,Netwrix Directory Manager 的分发组不会在每次向该组发送电子邮件时都运行查询,从而不会对 Exchange 服务器造成不必要的压力。

创建查询

借助 Netwrix Directory Manager 中的 Query Designer,您可以使用直观的可视化界面来创建查询,无需编写 PowerShell 命令。它包含以下选项卡:

  • 常规 — 选择可以成为该组成员的对象类型。
  • 存储 — 选择任意 Exchange 服务器或邮箱数据库上的邮箱。
  • 标识存储 — 指定组成员资格的条件。例如,您可以使用位置、公司、部门或员工 ID 等属性,并应用 AND 和 OR 等逻辑条件来进一步筛选结果。
  • 高级 — 使用 Oracle、ODBC、Microsoft SQL Server 或文本文件等外部数据源,帮助确定该组的成员身份。
  • 包含/排除 — 不论查询结果如何,都可以将对象添加到组成员或从组成员中移除。
  • 智能脚本 — 使用 VB Script 支持,基于您自己的自定义逻辑编写脚本。

结论

基于查询的安全组和通讯组列表对于在降低 IT 工作负载的同时提升安全性与业务生产力至关重要。然而,使用原生选项时,动态通讯组列表可能会给您的 Exchange 资源带来过重的负担,而创建动态安全列表则需要大量时间以及 PowerShell 专业知识。 Netwrix Directory Manager提供了强有力的替代方案:Smart Groups,可轻松创建和维护动态安全组以及通讯组列表。

分享到

了解更多

关于作者

Asset Not Found

Jonathan Blackwell

软件开发负责人

自 2012 年以来,工程师兼创新者 Jonathan Blackwell 一直提供工程领导力,使 Netwrix GroupID 成为 Active Directory 和 Azure AD 环境中群组与用户管理领域的领先者。他在研发、市场与销售方面的经验,使 Jonathan 能够全面理解 Identity 市场以及买家如何思考。