将 Google Cloud 与 Active Directory 联合:同步用户帐号

本文是由多篇文章组成的系列文章中的第二篇。该系列文章讨论如何将基于 Active Directory 的现有身份管理解决方案扩展到 Google Cloud。本指南介绍如何使用 Google Cloud Directory Sync (GCDS) 设置 Active Directory 与 Cloud Identity 之间的帐号同步。

该系列包含以下部分:

本指南假设您已有 Active Directory 林,并且您想要将林中的所有网域同步到 Cloud Identity。

要遵照本指南操作,您必须有权访问可管理用户的 Active Directory 帐号。此外,如果您还没有 Cloud Identity 帐号,则您需要具有对 DNS 地区的管理权限才能验证域名。如果您已有帐号,请确保 Cloud Identity 中的用户帐号具有超级用户权限。

目标

  • 安装 Cloud Directory Sync,并将其连接到 Active Directory 和 Cloud Identity。
  • 配置 Cloud Directory Sync,将用户帐号同步到 Cloud Identity。
  • 注册计划任务以持续同步到 Cloud Identity。

费用

如果您使用的是免费版 Cloud Identity,则遵照本指南操作不会使用任何计费 Google Cloud 组件。

准备工作

  • 确保您了解如何将 Active Directory 身份管理扩展到 Google Cloud
  • 确定您要如何映射身份、群组和网域。具体来说,请确保您已回答以下问题:

    • 您打算将哪个 DNS 域名用作 Cloud Identity 的主域名?您打算将其他哪些 DNS 域名用作 Cloud Identity 中的辅助域名?
    • 您是否需要使用域名替换?
    • 您是否打算使用电子邮件地址 (mail) 或用户主体名称 (userPrincipalName) 作为用户帐号的通用标识符?
    • 您是否打算同步群组?如果打算同步,您是否想要使用常用名 (cn) 或电子邮件地址 (mail) 作为群组的通用标识符?

    有关如何做出以上决策的指导,请参阅有关将 Active Directory 身份和访问权限管理扩展到 Google Cloud 的概览文档

  • 在将正式版 Active Directory 连接到 Google Cloud 之前,请考虑使用 Active Directory 测试环境来设置和测试帐号同步。

  • 如果您还没有帐号,请注册 Cloud Identity,必要时请添加其他 DNS 域名

  • 如果您使用的是免费版 Cloud Identity,且想要同步的用户数超过 50 人,请通过您的支持联系人申请增加免费 Cloud Identity 用户总数。

规划 Cloud Directory Sync 部署

确定部署 Cloud Directory Sync 的位置

Cloud Directory Sync 可以将用户帐号和群组从 LDAP 目录同步到 Cloud Identity。作为 LDAP 服务器和 Cloud Identity 的中介,Cloud Directory Sync 会查询 LDAP 目录,从该目录中检索必要的信息,还会使用 Directory API 在 Cloud Identity 中添加、修改或删除帐号。

由于 Active Directory 网域服务基于 LDAP,因此 Cloud Directory Sync 非常适合在 Active Directory 和 Cloud Identity 之间实现帐号同步。

在将本地 Active Directory 基础架构连接到 Google Cloud 时,您可以在本地或在 Google Cloud 中的 Compute Engine 虚拟机上运行 Cloud Directory Sync。在大多数情况下,最好是在本地运行 Cloud Directory Sync:

  • 由于 Active Directory 管理的信息包含个人身份信息,并且通常被视为敏感信息,因此您可能不希望从本地网络的外部访问 Active Directory。
  • 默认情况下,Active Directory 使用未加密的 LDAP。如果从 Google Cloud 内部远程访问 Active Directory,则您应使用加密通信。尽管您可以使用 LDAP/S 或 Cloud VPN 加密连接,但这样做会使设置更加复杂。
  • 从 Cloud Directory Sync 到 Cloud Identity 的通信是通过 HTTPS 进行的,几乎不需要更改防火墙配置。

您可以在 Windows 或 Linux 上运行 Cloud Directory Sync。虽然可以在网域控制器上部署 Cloud Directory Sync,但最好是在单独的机器上运行 Cloud Directory Sync。此机器必须满足系统要求并具有对 Active Directory 的 LDAP 访问权限。虽然这不是将此机器加入网域或运行 Windows 的前提条件,但本指南假定 Cloud Directory Sync 在加入网域的 Windows 机器上运行。

为了支持设置同步,Cloud Directory Sync 包括一个名为配置管理器的图形界面 (GUI)。如果您打算运行 Cloud Directory Sync 的服务器具有桌面体验,则可以在该服务器上运行配置管理器。否则,您需要在本地运行配置管理器,然后将生成的配置文件复制到服务器,您可以在该服务器上使用该文件来运行同步。本指南假定您在具有 GUI 的服务器上运行配置管理器。

确定检索数据的位置

Cloud Directory Sync 使用 LDAP 与 Active Directory 交互并检索有关用户帐号和群组的信息。要实现此交互,Cloud Directory Sync 要求您在配置中提供主机名和端口。在仅运行单个全局目录服务器的小型 Active Directory 环境中,提供主机名和端口不会成为问题,因为您可以将 Cloud Directory Sync 直接指向全局目录服务器。

在运行冗余全局目录服务器的更复杂的环境中,将 Cloud Directory Sync 指向单个服务器不会使用冗余,因此不理想。虽然可以设置负载平衡器,跨多个全局目录服务器分发 LDAP 查询并跟踪可能暂时不可用的服务器,但最好是使用 DC 定位器机制来动态定位服务器。

目前,Cloud Directory Sync 本身不支持使用 DC 定位器机制。在本指南中,您使用与 DC 定位器机制相关的小型 PowerShell 脚本来补充 Cloud Directory Sync,这样您就不需要静态配置全局目录服务器的端点。

配置 Cloud Identity

创建 Cloud Identity 用户帐号进行同步

为了同步帐号,Cloud Directory Sync 必须与 Cloud Identity 进行交互。创建、列出和删除用户(以及可能的群组和组织单元)是需要管理员权限的 Cloud Identity 操作。

注册 Cloud Identity 时,您已经创建了一个超级用户帐号。虽然您可以将此帐号用于 Cloud Directory Sync,但最好是创建一个单独帐号专门供 Cloud Directory Sync 使用:

  1. 打开管理控制台,然后使用您在注册 Cloud Identity 时创建的超级用户帐号登录。
  2. 在菜单中,点击目录 > 用户,然后点击添加新用户以创建用户。
  3. 提供适当的姓名和电子邮件地址,例如:

    1. 名字Active Directory
    2. 姓氏Synchronizer
    3. 主要电子邮件ad-synchronizer

    保留电子邮件地址中的主域名,即使该域名与您要同步的林不对应。

  4. 确保自动生成新密码设置为已停用,并输入密码。

  5. 确保要求在下次登录时更改密码设置为已停用

  6. 点击添加新用户

  7. 点击完成

要使 Cloud Directory Sync 能够创建、列出和删除用户帐号和群组,对应帐号需要额外的权限。此外,建议免除帐号单点登录;否则,在遇到单点登录问题时,您可能无法重新授权 Cloud Directory Sync。两者都可以通过使帐号成为超级用户来实现:

  1. 在列表中找到新创建的用户并将其打开。
  2. 管理员角色和权限下,点击分配角色
  3. 启用超级用户角色。
  4. 点击保存

配置 Active Directory 同步

创建 Active Directory 用户帐号进行同步

要使 Cloud Directory Sync 能够从 Active Directory 中检索有关用户和群组的信息,Cloud Directory Sync 需要具有足够访问权限的网域帐号。请为 Cloud Directory Sync 创建一个专用帐号,而不是重复使用现有 Windows 帐号来实现上述目的。

  1. 打开 Active Directory 用户和计算机管理单元。
  2. 导航到要在其中创建用户的网域和组织单元。如果您的林中有多个网域,请在 Cloud Directory Sync 机器所在网域中创建用户。
  3. 右键点击右侧窗格,然后选择新建 > 用户
  4. 提供适当的姓名和电子邮件地址,例如:
    1. 名字Google Cloud
    2. 姓氏Directory Sync
    3. 用户登录名gcds
    4. 用户登录名(Windows 2000 之前)gcds
  5. 点击下一步
  6. 提供符合密码政策的密码。
  7. 清除用户下次登录时必须更改密码
  8. 选择密码永不过期
  9. 点击下一步,然后点击完成

您现在已具备安装 Cloud Directory Sync 的前提条件。

安装 Cloud Directory Sync

将运行 Cloud Directory Sync 的机器上,下载并运行 Cloud Directory Sync 安装程序。您可以使用以下 PowerShell 命令来下载安装程序,而不是使用浏览器执行下载:

    (New-Object net.webclient).DownloadFile("https://dl.google.com/dirsync/dirsync-win64.exe", "$(pwd)\dirsync-win64.exe")
    

下载完成后,您可以通过运行以下命令来启动安装向导:

.\dirsync-win64.exe

为 Cloud Directory Sync 配置创建文件夹

Cloud Directory Sync 将其配置存储在 XML 文件中。由于此配置包含 Cloud Directory Sync 用于向 Google 进行身份验证的 OAuth 刷新令牌,因此请确保妥善保护用于配置的文件夹的安全。

此外,由于 Cloud Directory Sync 不需要访问除此文件夹以外的本地资源,因此您必须配置 Cloud Directory Sync,使其以受限用户帐号 LocalService 的身份运行:

  1. 在已安装 Cloud Directory Sync 的机器上,使用网域或本地管理员帐号登录。
  2. 打开具有管理权限的 PowerShell 控制台。
  3. 运行以下命令创建一个名为 $Env:ProgramData\gcds 的文件夹来存储配置,并应用访问控制列表 (ACL),以便只有 Cloud Directory Sync 和管理员具有访问权限:

        $gcdsDataFolder = "$Env:ProgramData\gcds"
        New-Item -ItemType directory -Path  $gcdsDataFolder
        &icacls "$gcdsDataFolder" /inheritance:r
        &icacls "$gcdsDataFolder" /grant:r "CREATOR OWNER:(OI)(CI)F" /T
        &icacls "$gcdsDataFolder" /grant   "BUILTIN\Administrators:(OI)(CI)F" /T
        &icacls "$gcdsDataFolder" /grant   "Domain Admins:(OI)(CI)F" /T
        &icacls "$gcdsDataFolder" /grant   "LOCAL SERVICE:(OI)(CI)F" /T
        
  4. 要确定 ProgramData 文件夹的位置,请运行命令 Write-Host $Env:ProgramData。在英文版 Windows 上,此路径通常为 c:\ProgramData。您稍后需要用到此路径。

连接到 Google

现在,您将使用配置管理器来准备 Cloud Directory Sync 配置。以下步骤假设您在打算运行 Cloud Directory Sync 的同一服务器上运行配置管理器。

如果您使用其他机器来运行配置管理器,请务必之后将配置文件复制到 Cloud Directory Sync 服务器。另请注意,可能无法在其他机器上测试配置。

  1. 启动配置管理器。您可以在 Windows“开始”菜单中的 Google Cloud Directory Sync > 配置管理器下找到配置管理器。
  2. 点击 Google 网域配置 (Google Domain Configuration) > 连接设置

    Google 网域配置 (Google Domain Configuration) > 连接设置

  3. 对于主域名,输入 Cloud Identity 帐号的主域名。如果您从多个不同的林同步到单个 Cloud Identity 帐号,主域名对应的可能是与您设置的林不同的林。

  4. 点击立即授权

  5. 在对话框中,点击登录,这将打开一个浏览器窗口,提示您登录。如果您使用 Internet Explorer 的默认安全配置,则可能会看到多条警告消息。如果是这样,您可以将网址复制到本地计算机并在本地计算机上打开网址。

    授权 GCDS

  6. 在出现 Google 登录页面时,请使用新创建的 ad-synchronizer Google 帐号以及您为此帐号指定的密码登录。

    如果您已将 Cloud Identity 帐号配置为使用单点登录 (SSO),则您可能会被自动重定向到 Active Directory 联合身份验证服务 (AD FS) 登录页面,该页面不允许您使用 ad-synchronizer 帐号登录。在这种情况下,请再次点击登录,然后按 Esc 键停止该页面加载。在浏览器地址栏中,从网址中移除 &hd=[PRIMARY_DOMAIN-name] 参数,然后按 Enter 键。此步骤会强制显示 Google 登录页面。

  7. 由于这是您第一次使用该帐号,因此系统会提示您接受 Cloud Identity 协议。如果您接受条款,请点击接受

  8. 以下屏幕要求您授权 ad-synchronizer 帐号访问和修改 Cloud Identity 帐号中的数据。点击允许进行确认。

    授权 ad-synchronizer 访问 Cloud Identity 帐号中的数据

  9. 看到 Received verification code 消息后,关闭浏览器窗口。

  10. 在菜单中,点击文件 > 另存为

  11. 在文件对话框中,输入 [PROGRAM_DATA]\gcds\config.xml 作为文件名。将 [PROGRAM_DATA] 替换为 PowerShell 命令在您先前运行它时返回的 ProgramData 文件夹的路径。

  12. 点击保存,然后点击确定

连接到 Active Directory

下一步是将 Cloud Directory Sync 配置为连接到 Active Directory:

  1. 在配置管理器中,点击 LDAP 配置 (LDAP Configuration) > 连接设置
  2. 配置以下设置:
    1. 服务器类型:选择 MS Active Directory
    2. 连接类型:选择标准 LDAP (Standard LDAP)。
    3. 主机名:输入全局目录服务器的名称。此设置仅用于测试。稍后,您要将全局目录服务器的查找自动化。
    4. 端口3268。使用全局目录服务器而非网域控制器有助于确保您可以同步 Active Directory 林的所有网域中的帐号。
    5. 身份验证类型简单
    6. 授权用户:输入先前创建的网域用户的用户主体名称 (UPN):gcds@[UPN_SUFFIX_DOMAIN][UPN_SUFFIX_DOMAIN] 替换为该用户的相应 UPN 后缀网域。或者,您也可以使用 [NETBIOS-DOMAIN-NAME]\gcds 语法指定用户。
    7. 基本 DN:将此字段留空,确保在林的所有网域中执行搜索。
  3. 要验证设置,请点击测试连接。如果连接失败,请仔细检查您是否已指定全局目录服务器的主机名,且用户名和密码是否正确。忽略该错误消息可能会要求您指定基本 DN。
  4. 点击关闭
  5. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

确定要同步的内容

现在您已成功连接到 Cloud Identity 和 Active Directory,接下来您可以确定要同步的项目:

  1. 在配置管理器中,点击常规设置
  2. 确保用户帐号处于选中状态。
  3. 如果您想要同步群组,请确保选中群组;否则清除该复选框。
  4. 同步组织单元在本指南中不作讲解,因此使组织单元保留未选中状态。
  5. 用户配置文件自定义架构保留在未选中状态。
  6. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

同步用户帐号

配置帐号映射

下一步是配置如何在 Active Directory 和 Cloud Identity 之间映射用户帐号:

  1. 在配置管理器中,点击用户帐号 > 其他用户属性 (Additional User Attributes)。
  2. 点击使用默认值 (Use defaults),分别使用 givenNamesn 自动填充给定名称 (Given Name) 和系列名称 (Family Name) 的属性。

其余设置取决于您想要使用 UPN 还是电子邮件地址将 Active Directory 映射到 Cloud Identity 用户帐号,以及是否需要应用域名替换。如果您不确定哪个选项最适合您,请参阅有关如何将 Active Directory 身份管理扩展到 Google Cloud 的文章。

UPN

  1. 在配置管理器中,点击用户帐号 > 用户属性
  2. 配置以下设置:
    1. 电子邮件地址属性userPrincipalName
    2. 用户标识符属性objectGUID
  3. 点击搜索规则 (Search Rules) 标签页,然后点击添加搜索规则 (Add Search Rule)。
  4. 输入以下设置:

    1. 范围子树 (Sub-tree)
    2. 规则

      (&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

      此规则会匹配所有未停用的用户帐号,但忽略计算机和托管式服务帐号。

    3. 基本 DN:留空以搜索林中的所有网域。

  5. 点击确定以创建规则。

  6. 点击排除规则 (Exclusion Rules) 标签页,然后点击添加排除规则 (Add Exclusion Rule)。要确保 Cloud Directory Sync 用于从 Active Directory 读取的帐号未同步到 Cloud Identity,请输入以下设置:

    1. 排除类型 (Exclude Type):用户电子邮件地址 (User Email Address)
    2. 匹配类型完全匹配
    3. 排除规则gcds@[UPN_SUFFIX_DOMAIN]。将 [UPN_SUFFIX_DOMAIN] 替换为 Active Directory 中使用的 UPN 后缀网域。
  7. 点击确定

  8. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

UPN:网域替换

  1. 在配置管理器中,点击用户帐号 > 用户属性标签页。
  2. 配置以下设置:
    1. 电子邮件地址属性userPrincipalName
    2. 用户标识符属性objectGUID
  3. 点击确定以创建规则。
  4. 点击搜索规则 (Search Rules) 标签页,然后点击添加搜索规则 (Add Search Rule)。
  5. 输入以下设置:

    1. 范围子树 (Sub-tree)
    2. 规则

      (&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

      此规则会匹配所有未停用的用户帐号,但忽略计算机和托管式服务帐号。

    3. 基本 DN:留空以搜索林中的所有网域。

  6. 点击确定以创建规则。

  7. 点击排除规则 (Exclusion Rules) 标签页,然后点击添加排除规则 (Add Exclusion Rule)。要确保 Cloud Directory Sync 用于从 Active Directory 读取的帐号未同步到 Cloud Identity,请输入以下设置:

    1. 排除类型 (Exclude Type):用户电子邮件地址 (User Email Address)
    2. 匹配类型完全匹配
    3. 排除规则gcds@[PRIMARY_DOMAIN]。将 [PRIMARY_DOMAIN] 替换为您的 Cloud Identity 帐号的主域名。
  8. 点击确定

  9. 点击 Google 网域配置 (Google Domain Configuration) > 连接设置,然后选择将 LDAP 电子邮件地址中的域名替换为此域名 (Replace domain names in LDAP email addresses with this domain name)。

  10. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

电子邮件

  1. 在配置管理器中,点击用户帐号 > 用户属性
  2. 配置以下设置:
    1. 电子邮件地址属性mail
    2. 用户标识符属性objectGUID
  3. 点击搜索规则 (Search Rules) 标签页,然后点击添加搜索规则 (Add Search Rule)。
  4. 输入以下设置:

    1. 范围子树 (Sub-tree)
    2. 规则

      (&(objectCategory=person)(objectClass=user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

      此规则会匹配具有非空电子邮件地址的所有未停用的用户帐号,但忽略计算机和托管式服务帐号。

    3. 基本 DN:留空以搜索林中的所有网域。

  5. 点击确定以创建规则。

  6. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

电子邮件:网域替换

  1. 在配置管理器中,点击用户帐号 > 用户属性
  2. 配置以下设置:
    1. 电子邮件地址属性mail
    2. 用户标识符属性objectGUID
  3. 点击搜索规则 (Search Rules) 标签页,然后点击添加搜索规则 (Add Search Rule)。
  4. 输入以下设置:

    1. 范围子树 (Sub-tree)
    2. 规则

      (&(objectCategory=person)(objectClass=user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

      此规则会匹配具有非空电子邮件地址的所有未停用的用户帐号,但忽略计算机和托管式服务帐号。

    3. 基本 DN:留空以搜索林中的所有网域。

  5. 点击确定以创建规则。

  6. 点击 Google 网域配置 (Google Domain Configuration) > 连接设置,然后选择将 LDAP 电子邮件地址中的域名替换为此域名 (Replace domain names in LDAP email addresses with this domain name)。

  7. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

删除政策

到目前为止,配置侧重于在 Cloud Identity 中添加和更新用户帐号。但是,在 Cloud Identity 中暂停或删除 Active Directory 中已停用或删除的用户帐号也很重要。

在同步过程中,Cloud Directory Sync 会在 Cloud Identity 中生成一个用户帐号列表,这些用户帐号在 Active Directory LDAP 查询结果中没有相应的匹配项。由于 LDAP 查询包含子句 (!(userAccountControl:1.2.840.113556.1.4.803:=2),因此自上次执行同步以来在 Active Directory 中停用或删除的所有帐号都将包含在此列表中。Cloud Directory Sync 的默认行为是在 Cloud Identity 中删除这些用户,但您可以自定义此行为:

  1. 在配置管理器中,点击用户帐号 > 用户属性
  2. Google 网域用户删除/暂停政策 (Google Domain Users Deletion/Suspension Policy) 下,请确保选中不要暂停或删除 LDAP 中找到的 Google 网域管理员 (Don't suspend or delete Google domain admins not found in LDAP)。此设置可确保 Cloud Directory Sync 不会暂停或删除您用于配置 Cloud Identity 的超级用户帐号。
  3. (可选)更改针对非管理员帐号的删除政策。
  4. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

如果您使用多个单独的 Cloud Directory Sync 实例将不同网域或林同步到单个 Cloud Identity 帐号,请确保不同 Cloud Directory Sync 实例不会相互干扰。默认情况下,Cloud Identity 中已从其他来源同步的用户帐号将在 Active Directory 中被错误地标识为“已被删除”。为避免这种情况,请配置 Cloud Directory Sync,使其忽略超出您要同步的网域或林范围的所有 Cloud Identity 用户帐号。

UPN

  1. 在配置管理器中,点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型用户电子邮件地址 (User Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![UPN_SUFFIX_DOMAIN]).*)$

      [UPN_SUFFIX_DOMAIN] 替换为您的 UPN 后缀网域,如以下示例所示:

      .*@((?!corp.example.com).*)$

      如果您使用多个 UPN 后缀网域,请按如下所示扩展表达式:

      .*@((?!corp.example.com|branch.example.com).*)$
  4. 点击确定以创建规则。

UPN:网域替换

  1. 在配置管理器中,点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型用户电子邮件地址 (User Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![SUBSTITUTION_DOMAIN]).*)$

      [SUBSTITUTION_DOMAIN] 替换为您用于替换 UPN 后缀网域的网域,如以下示例所示:

      .*@((?!corp.example.com).*)$
  4. 点击确定以创建规则。

电子邮件

  1. 在配置管理器中,点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型用户电子邮件地址 (User Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![MX_DOMAIN]).*)$

      [MX_DOMAIN] 替换为您在电子邮件地址中使用的域名,如以下示例所示:

      .*@((?!corp.example.com).*)$

      如果您使用多个 UPN 后缀网域,请按如下所示扩展表达式:

      .*@((?!corp.example.com|branch.example.com).*)$
  4. 点击确定以创建规则。

电子邮件:网域替换

  1. 在配置管理器中,点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型用户电子邮件地址 (User Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![SUBSTITUTION_DOMAIN]).*)$

      [SUBSTITUTION_DOMAIN] 替换为您用于替换电子邮件网域的网域,如以下示例所示:

      .*@((?!corp.example.com).*)$
  4. 点击确定以创建规则。

同步群组

下一步是配置如何在 Active Directory 和 Cloud Identity 之间映射群组。此过程因您打算按常用名还是按电子邮件地址映射群组而有所不同。

按常用名配置群组映射

首先,您需要确定想要同步的安全群组的类型,然后编制适当的 LDAP 查询。下表包含可以使用的常见查询。

类型 LDAP 查询
网域本地群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483652))
全局群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483650))
通用群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483656))
全局和通用群组 (&(objectCategory=group)(|(groupType:1.2.840.113556.1.4.803:=2147483650)(groupType:1.2.840.113556.1.4.803:=2147483656)))

全局群组的查询还包括 Active Directory 定义的群组,例如网域控制器。您可以通过按组织单元 (ou) 限制搜索来过滤这些群组。

其余设置取决于您想要使用 UPN 还是电子邮件地址将 Active Directory 映射到 Cloud Identity 用户帐号。

UPN

  1. 在配置管理器中,点击群组 > 搜索规则 (Search Rules)。
  2. 点击添加搜索规则 (Add Search Rule),添加一条用于捕获用户帐号和群组成员资格的规则。
  3. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  4. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性cn
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):userPrincipalName
  5. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  6. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  7. 点击前缀-后缀 (Prefix-Suffix) 标签页。
  8. 群组电子邮件地址框中,输入以下设置:
    1. 后缀@[PRIMARY_DOMAIN],您需要将其中的 [PRIMARY_DOMAIN] 替换为 Cloud Identity 帐号的主域名。Cloud Directory Sync 会自动附加网域,因此此设置看起来是多余的,但您必须明确指定该设置,目的是防止多个 Cloud Directory Sync 实例清除其自身未添加的群组成员。示例:@example.com
    2. 点击确定
  9. 点击添加搜索规则 (Add Search Rule),再添加一条用于捕获嵌套群组成员资格的规则。
  10. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入相同的 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  11. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性cn
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):cn
  12. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  13. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  14. 点击前缀-后缀 (Prefix-Suffix) 标签页。
  15. 群组电子邮件地址框中,输入以下设置:
    • 后缀@[PRIMARY_DOMAIN],您必须将其中的 [PRIMARY_DOMAIN] 替换为 Cloud Identity 帐号的主域名。
  16. 点击确定
  17. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

电子邮件

  1. 在配置管理器中,点击群组 > 搜索规则 (Search Rules)。
  2. 点击添加搜索规则 (Add Search Rule),添加一条用于捕获两个群组成员资格的规则。
  3. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  4. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性cn
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):mail
  5. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  6. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  7. 点击确定
  8. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

如果在映射用户帐号时使用网域替换,则以上设置也同样适用。

按电子邮件地址配置群组映射

首先,您需要确定想要同步的安全群组的类型,然后编制适当的 LDAP 查询。下表包含可以使用的常见查询。

类型 LDAP 查询
具有电子邮件地址的网域本地群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483652)(mail=*))
具有电子邮件地址的全局群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483650)(mail=*))
具有电子邮件地址的通用群组 (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483656)(mail=*))
具有电子邮件地址的全局和通用群组 (&(objectCategory=group)(|(groupType:1.2.840.113556.1.4.803:=2147483650)(groupType:1.2.840.113556.1.4.803:=2147483656))(mail=*))

其余设置取决于您想要使用 UPN 还是电子邮件地址将 Active Directory 映射到 Cloud Identity 用户帐号。

UPN

  1. 在配置管理器中,点击群组 > 搜索规则 (Search Rules)。
  2. 点击添加搜索规则 (Add Search Rule),添加一条用于捕获两个群组成员资格的规则。
  3. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  4. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性mail
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):userPrincipalName
  5. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  6. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  7. 点击确定
  8. 点击添加搜索规则 (Add Search Rule),再添加一条用于捕获嵌套群组成员资格的规则。
  9. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入相同的 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  10. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性mail
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):mail
  11. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  12. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  13. 点击确定
  14. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

电子邮件

  1. 在配置管理器中,点击群组 > 搜索规则 (Search Rules)。
  2. 点击添加搜索规则 (Add Search Rule),添加一条用于捕获两个群组成员资格的规则。
  3. 配置以下设置:
    1. 范围子树 (Sub-tree)
    2. 规则:输入 LDAP 查询。
    3. 基本 DN:留空以在林的所有网域中查询群组。
  4. 群组框中,输入以下设置:
    1. 群组电子邮件地址属性mail
    2. 群组显示名称属性name
    3. 群组说明属性 (Group Description Attribute):description
    4. 用户电子邮件名称属性 (User Email Name Attribute):mail
  5. 成员框中,输入以下设置:
    1. 成员参考属性member
    2. 将其余字段留空。
  6. 所有者框中,输入以下设置:
    1. 所有者参考属性 (Owner Reference Attribute):managedBy
    2. 将其余字段留空。
  7. 点击确定
  8. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

如果在映射用户帐号时使用网域替换,则以上设置也同样适用。

删除政策

Cloud Directory Sync 处理群组删除的方式与删除用户类似。如果您使用多个单独的 Cloud Directory Sync 实例将不同网域或林同步到单个 Cloud Identity 帐号,请确保不同 Cloud Directory Sync 实例不会相互干扰。

默认情况下,Cloud Identity 中已从其他来源同步的用户帐号将在 Active Directory 中被错误地标识为“已被删除”。为避免这种情况,请配置 Cloud Directory Sync,使其忽略超出您要同步的网域或林范围的所有 Cloud Identity 用户帐号。

UPN

  1. 点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型群组成员电子邮件地址 (Group Member Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![UPN_SUFFIX_DOMAIN]).*)$

      [UPN_SUFFIX_DOMAIN] 替换为您的 UPN 后缀网域,如以下示例所示:

      .*@((?!corp.example.com).*)$

      如果您使用多个 UPN 后缀网域,请按如下所示扩展表达式:

      .*@((?!corp.example.com|branch.example.com).*)$
  4. 点击确定以创建规则。

UPN:网域替换

  1. 点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型群组成员电子邮件地址 (Group Member Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![SUBSTITUTION_DOMAIN]).*)$

      [SUBSTITUTION_DOMAIN] 替换为您用于替换 UPN 后缀网域的网域,如以下示例所示:

      .*@((?!corp.example.com).*)$
  4. 点击确定以创建规则。

电子邮件

  1. 点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型群组成员电子邮件地址 (Group Member Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![MX_DOMAIN]).*)$

      [MX_DOMAIN] 替换为您在电子邮件地址中使用的域名,如以下示例所示:

      .*@((?!corp.example.com).*)$

      如果您使用多个 UPN 后缀网域,请按如下所示扩展表达式:

      .*@((?!corp.example.com|branch.example.com).*)$
  4. 点击确定以创建规则。

电子邮件:网域替换

  1. 点击 Google 网域配置 (Google Domain Configuration) > 排除规则 (Exclusion Rules)。
  2. 点击添加排除规则 (Add Exclusion Rule)。
  3. 配置以下设置:

    1. 类型群组成员电子邮件地址 (Group Member Email Address)
    2. 匹配类型正则表达式
    3. 排除规则 (Exclusion Rule):如果使用单个 UPN 后缀网域,请输入以下正则表达式:

      .*@((?![SUBSTITUTION_DOMAIN]).*)$

      [SUBSTITUTION_DOMAIN] 替换为您用于替换电子邮件网域的网域,如以下示例所示:

      .*@((?!corp.example.com).*)$
    4. 点击确定以创建规则。

配置日志记录和通知

要保持 Active Directory 和 Cloud Identity 同步,您需要根据时间安排运行 Cloud Directory Sync。为了使您能够跟踪 Cloud Directory Sync 活动和潜在问题,您可以配置 Cloud Directory Sync 来写入日志文件:

  1. 在配置管理器中,点击日志记录
  2. 文件名设置为 [PROGRAM_DATA]\gcds\gcds_sync.log。将 [PROGRAM_DATA] 替换为 PowerShell 命令在您先前运行它时返回的 ProgramData 文件夹的路径。
  3. 点击文件 > 保存,将配置更改提交到磁盘,然后点击确定

除了日志记录,Cloud Directory Sync 还可以通过电子邮件发送通知。如需激活此服务,请点击通知并提供邮件服务器的连接信息。

模拟同步

您已完成 Cloud Directory Sync 配置。如需验证配置是否按预期工作,您可以模拟同步运行。在模拟过程中,GCDS 不会对 Cloud Identity 进行任何更改,而是会报告它在常规同步运行过程中将要进行的更改。

  1. 在配置管理器中,点击同步
  2. 在屏幕底部,选择清除缓存 (Clear cache),然后点击模拟同步 (Simulate sync)。
  3. 同步完成后,请查看日志的待应用的更改部分(显示在对话框的下半部分中),并验证是否建议至少要创建或修改一名用户。

执行初始同步

现在,您可以触发初始同步:

警告

  • 触发同步将永久更改 Cloud Identity 帐号中的用户帐号和群组。
  • 如果您要同步大量用户帐号,请考虑临时更改 LDAP 查询,使其仅匹配这些用户帐号的子集。使用此帐号子集,您可以根据需要测试同步并调整设置。成功验证结果后,请改回 LDAP 查询并同步其余帐号。
  • 在测试同步时避免重复修改或删除大量用户帐号,因为此类操作可能会被标记为滥用行为。

按如下方式触发同步:

  1. 在配置管理器中,点击同步
  2. 在屏幕底部,选择清除缓存,然后点击同步并应用更改 (Sync & apply changes)。

    随即将出现一个对话框,显示同步状态。

  3. 同步完成后,查看该对话框下半部分显示的日志:

    1. 成功用户更改 (Successful user changes) 下,确认至少已创建一名用户。
    2. 故障下,确认同步期间未发生故障。

如果您选择同步群组,则日志的其余部分可能包含多个警告,通常可以放心地忽略这些警告。

调度

如需确保将 Active Directory 中进行的更改传播到 Cloud Identity,请设置一项每小时触发一次同步的计划任务:

  1. 以管理员身份打开 PowerShell 控制台。
  2. 检查系统上是否有可用的 Active Directory PowerShell 模块

    import-module ActiveDirectory

    如果命令失败,请下载并安装远程服务器管理工具,然后重试。

  3. 在记事本中,创建一个文件,将以下内容复制到其中,然后将该文件保存到 $Env:ProgramData\gcds\sync.ps1。完成后,关闭该文件。

        [CmdletBinding()]
        Param(
            [Parameter(Mandatory=$True, Position=1)]
            [string]$config,
    
            [Parameter(Mandatory=$True, Position=1)]
            [string]$gcdsInstallationDir
        )
    
        import-module ActiveDirectory
    
        # Stop on error.
        $ErrorActionPreference ="stop"
    
        # Ensure it's an absolute path.
        $rawConfigPath = [System.IO.Path]::Combine((pwd).Path, $config)
    
        # Discover closest GC in current domain.
        $dc = Get-ADDomainController -discover -Service "GlobalCatalog" -NextClosestSite
        Write-Host ("Using Global Catalog server {0} of domain {1} as LDAP source" -f [string]$dc.HostName, $dc.Domain)
    
        # Load XML and replace the endpoint.
        $dom = [xml](Get-Content $rawConfigPath)
        $ldapConfigNode = $dom.SelectSingleNode("//plugin[@class='com.google.usersyncapp.plugin.ldap.LDAPPlugin']/config")
    
        # Tweak the endpoint.
        $ldapConfigNode.hostname = [string]$dc.HostName
        $ldapConfigNode.ldapCredMachineName = [string]$dc.HostName
        $ldapConfigNode.port = "3268"   # Always use Global Catalog port
    
        # Tweak the tsv files location
        $googleConfigNode = $dom.SelectSingleNode("//plugin[@class='com.google.usersyncapp.plugin.google.GooglePlugin']/config")
        $googleConfigNode.nonAddressPrimaryKeyMapFile = [System.IO.Path]::Combine((pwd).Path, "nonAddressPrimaryKeyFile.tsv")
        $googleConfigNode.passwordTimestampFile = [System.IO.Path]::Combine((pwd).Path, "passwordTimestampCache.tsv")
    
        # Save resulting config.
        $targetConfigPath = $rawConfigPath + ".autodiscover"
    
        $writer = New-Object System.IO.StreamWriter($targetConfigPath, $False, (New-Object System.Text.UTF8Encoding($False)))
        $dom.Save($writer)
        $writer.Close()
    
        # Run synchronization.
        Start-Process -FilePath "$gcdsInstallationDir\sync-cmd" `
            -Wait -ArgumentList "--apply --loglevel INFO --config ""$targetConfigPath"""
        
  4. 配置管理器创建了一个密钥来加密配置文件中的凭据。要确保 Cloud Directory Sync 在作为计划任务运行时仍然可以读取配置,请运行以下命令,将该密钥从您自己的配置文件复制到 NT AUTHORITY\LOCAL SERVICE 的配置文件:

        New-Item -Path Registry::HKEY_USERS\S-1-5-19\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp -Force
    
        Copy-Item -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util `
            -Destination Microsoft.PowerShell.Core\Registry::HKEY_USERS\S-1-5-19\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util
        

    如果命令失败,请确保您是以管理员身份启动 PowerShell 控制台的。

  5. 通过运行以下命令创建计划任务。计划任务将每小时触发一次,并调用 sync.ps1 脚本作为 NT AUTHORITY\LOCAL SERVICE

        $taskName = "Synchronize to Cloud Identity"
        $gcdsDir = "$Env:ProgramData\gcds"
    
        $action = New-ScheduledTaskAction -Execute 'PowerShell.exe' `
          -Argument "-ExecutionPolicy Bypass -NoProfile $gcdsDir\sync.ps1 -config $gcdsDir\config.xml -gcdsInstallationDir '$Env:Programfiles\Google Cloud Directory Sync'" `
          -WorkingDirectory $gcdsDir
        $trigger = New-ScheduledTaskTrigger `
          -Once `
          -At (Get-Date) `
          -RepetitionInterval (New-TimeSpan -Minutes 60) `
          -RepetitionDuration (New-TimeSpan -Days (365 * 20))
    
        $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\LOCAL SERVICE" -LogonType ServiceAccount
        Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -TaskName $taskName
    
        $task = Get-ScheduledTask -TaskName "$taskName"
        $task.Settings.ExecutionTimeLimit = "PT12H"
        Set-ScheduledTask $task
        

测试同步

您已完成 Cloud Directory Sync 的安装和配置,并且计划任务将每小时触发一次同步。

要手动触发同步,请切换到 PowerShell 控制台并运行以下命令:

    $taskName = "Synchronize to Cloud Identity"
    Start-ScheduledTask $taskName
    

清理

要移除 Cloud Directory Sync,请执行以下步骤:

  1. 打开 Windows 控制面板,然后点击程序 > 卸载程序
  2. 选择 Google Cloud Directory Sync,然后点击卸载/更改以启动卸载向导。接着,按照向导中的说明进行操作。
  3. 打开 PowerShell 控制台,运行以下命令以移除计划同步任务:

        $taskName = "Synchronize to Cloud Identity"
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$False
        
  4. 运行以下命令以删除配置和日志文件:

        Remove-Item -Recurse -Force "$Env:ProgramData\gcds"
        Remove-Item -Recurse -Path Registry::HKEY_USERS\S-1-5-19\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp
        

后续步骤