将 Google Cloud 与 Active Directory 联合:配置单点登录

本文介绍如何使用 Microsoft Active Directory Federation Services (AD FS) 和 SAML FederationActive Directory 环境与 Cloud Identity 或 G Suite 帐号之间设置单点登录。

本文假定您了解如何将 Active Directory 身份管理扩展到 Google Cloud,并且已配置用户预配。 本文还假定您拥有在 Windows Server 2016 或更高版本的 Windows Server 上正常运行的 AD FS 4.0 服务器。

要按照本指南操作,您需要了解 Active Directory 网域服务和 AD FS。您还需要一个在 Cloud Identity 或 G Suite 中拥有超级用户权限的用户,以及在 Active Directory 中具有 AD FS 服务器的管理员权限的用户。

目标

  • 配置 AD FS 服务器,以便 Cloud Identity 或 G Suite 可以将其用作身份提供商。
  • 创建在 Active Directory 与 Cloud Identity 或 G Suite 之间匹配身份的声明发布政策。
  • 配置 Cloud Identity 或 G Suite 帐号,以便将身份验证委派给 AD FS。

费用

如果您使用的是免费版 Cloud Identity,则按照本文中的说明操作不会使用 Google Cloud 的任何收费组件。

准备工作

  1. 验证 AD FS 服务器是否在运行 Windows Server 2016 或更高版本。虽然您也可以使用旧版 Windows Server 和 AD FS 配置单点登录,但必要的配置步骤可能与本文的描述不同。
  2. 确保您了解如何将 Active Directory 身份管理扩展到 Google Cloud
  3. 在 Active Directory 与 Cloud Identity 或 G Suite 之间配置用户预配
  4. 确保 AD FS 服务器使用的是公司用户的浏览器可识别的有效安全套接字层 (SSL) 证书。
  5. 请考虑在服务器场配置中设置 AD FS,以免它成为单点故障。启用单点登录后,AD FS 的可用性将确定用户是否可以登录 Cloud Console。

了解单点登录

通过使用 Cloud Directory Sync,您可以自动创建和维护用户,并将其生命周期与 Active Directory 中的用户相关联。

虽然 Cloud Directory Sync 会预配用户帐号详细信息,但不会同步密码。每当用户需要在 Google Cloud 中进行身份验证时,必须使用 AD FS 和安全断言标记语言 (SAML) 协议将身份验证委派回 Active Directory。此设置可确保只有 Active Directory 可以访问用户凭据,并且会强制实施任何现有的政策或多因素身份验证 (MFA) 机制。此外,它还会在您的本地环境与 Google 之间建立单点登录体验。

SAML 2.0 定义了一种协议和一种 XML 方言,可用于在双方(即身份提供商 (IdP) 和服务提供商 (SP))之间实现单点登录:

  • SP 是必须验证用户身份的一方。由于未将其配置为自行执行此身份验证,因此 SP 会将执行身份验证的职责委派给 IdP。
  • IdP 是执行用户身份验证的一方,可识别有关用户的事实并将这些事实传回给 SP。事实的集合称为断言

要在 Active Directory 和 Google 之间实现单点登录,请配置 AD FS 以充当 IdP,并配置 Cloud Identity 或 G Suite 帐号以充当 SP。完成此设置后,就能成功登录 Cloud Console,如下所示:

登录 Cloud Console

  1. 用户使用浏览器打开 Cloud Console。
  2. 由于用户尚未经过身份验证,因此 Cloud Console 会将浏览器重定向到 Google 登录。
  3. 用户会看到一个登录页面,要求他们输入电子邮件地址。
  4. 用户提交电子邮件地址后,Google 登录会识别出该电子邮件地址属于已使用 AD FS 配置用于联合身份验证的 Cloud Identity 或 G Suite 帐号。因此,它会将浏览器重定向到 AD FS。
  5. 根据 AD FS 的配置方式,AD FS 可能会将用户返回到登录页面,并要求提供用户名和密码。如果使用的是基于 Kerberos 的身份验证,则无需输入凭据即可自动验证用户身份。
  6. 如果用户必须输入凭据,则 AD FS 将使用 Kerberos 与 Active Directory 密钥分发中心进行交互,以验证用户名和密码。
  7. 成功验证凭据后,AD FS 会将浏览器定向回 Google 登录。
  8. Google 登录会建立会话并使浏览器定向回 Cloud Console,此时 Cloud Console 就可以授予访问权限了。

配置 AD FS

在 Cloud Identity 或 G Suite 中启用单点登录之前,您必须先配置 AD FS。

创建信赖方信任

AD FS 要求您为应该使用 AD FS 进行身份验证的每个 SP 创建信赖方信任。首先,为 Cloud Identity 或 G Suite 创建信赖方信任,请按照下列步骤操作:

  1. 登录 AD FS 服务器并打开 AD FS MMC 管理单元。
  2. 在左侧菜单中,右键点击 Relying Party Trusts 文件夹。在上下文菜单中,选择 Add Relying Party Trust
  3. 在向导的第一页上,选择 Claims aware,然后点击 Start

    依赖方信任向导。

  4. 在下一页上,选择 Enter data about the relying party manually,然后点击 Next

  5. 在下一页上,输入显示名称(例如 Cloud Identity),然后点击 Next

  6. 下一页将提示您输入令牌加密证书。若要与 Cloud Identity 或 G Suite 帐号连接,则不需要执行此步骤,因此可点击 Next

  7. 在下一页上,选择 Enable support for the SAML 2.0 WebSSO protocol,然后输入下列 SSO 服务网址:

    https://www.google.com/a/[DOMAIN]/acs
    

    [DOMAIN] 替换为 Cloud Identity 或 G Suite 帐号的主域名,然后点击 Next

    启用对 SAML 2.0 WebSSO 协议的支持。

  8. 下一个向导页面会提示您输入信赖方信任标识符。将以下标识符添加到列表中:

    • google.com/a/[DOMAIN],将 [DOMAIN] 替换为 Cloud Identity 或 G Suite 帐号的主域名
    • google.com

    依赖方信任标识符。

    点击 Next

  9. 在下一页上,选择一个访问政策。配置 MFA 超出了本文的范围,因此暂时请点击 Permit everyone,然后点击 Next

  10. Ready to Add Trust 页面上,查看您的设置,然后点击 Next

  11. 在最后一页上,清除 Configure claims issuance policy 复选框并关闭向导。在依赖方信任列表中,您现在会看到新条目。

配置退出登录网址

如果您要让用户可以跨多个应用使用单点登录,请务必允许他们跨多个应用退出登录:

  1. 在 AD FS 管理控制台的 Relying Party Trusts 下方,右键点击刚创建的信任,然后点击 Properties
  2. Endpoints 标签页上,点击 Add SAML
  3. Add an Endpoint 对话框中,配置以下设置:

    1. Endpoint typeSAML Logout
    2. BindingPOST
    3. Trusted URLhttps://[ADFS]/adfs/ls/?wa=wsignout1.0

      [ADFS] 替换为 AD FS 服务器的完全限定域名。

      添加端点。

  4. 点击 OK

  5. 点击 OK 以关闭对话框。

配置声明映射

AD FS 在验证用户身份后,会发出 SAML 断言。 此断言会用作已成功进行身份验证的证据。该断言必须标识出已验证身份的用户,这是 NameID 声明的目的。

要启用 Google 登录,以便将 NameID 与用户相关联,NameID 必须包含该用户的主电子邮件地址。根据您在 Active Directory 与 Cloud Identity 或 G Suite 之间映射用户的方式,NameID 必须包含 Active Directory 用户的 UPN 或电子邮件地址,并根据需要应用网域替换。

UPN

  1. 在 AD FS 管理控制台的 Relying Party Trusts 下方,右键点击刚创建的信任,然后点击 Edit Claim Issuance Policy
  2. 在对话框中点击 Add Rule
  3. 选择 Send LDAP Attributes as Claims,然后点击 Next
  4. 在下一页上,应用以下设置:
    1. Claim rule nameMap Email and Name ID
    2. Attribute StoreActive Directory
  5. 在 LDAP 属性映射列表中添加一行:
    1. LDAP AttributeUser-Principal-Name
    2. Outgoing Claim TypeName ID
  6. 点击 Finish,然后点击 OK

UPN:网域替换

  1. 在 AD FS 管理控制台的 Relying Party Trusts 下方,右键点击刚创建的信任,然后点击 Edit Claim Issuance Policy
  2. 在对话框中点击 Add Rule
  3. 选择 Send Claims Using a Custom Rule,然后点击 Next
  4. 在下一页上,应用以下设置:

    1. Claim rule nameLoad UPN
    2. Custom Rule

      c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
       => add(store = "Active Directory", types = ("http://temp.google.com/upn"), query = ";userPrincipalName;{0}", param = c.Value);
      

      此规则从 Active Directory 中加载关联用户的用户主体名称 (UPN),并将其保存在临时声明中。

  5. 点击 Finish

  6. 点击 Add Rule 以创建第二个规则。

  7. 选择 Send Claims Using a Custom Rule,然后点击 Next

  8. 在下一页上,应用以下设置:

    1. Claim rule nameTransform UPN
    2. Custom Rule

      c:[Type == "http://temp.google.com/upn"]
       => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = RegexReplace(c.Value, "@(.*?)$", "@[DOMAIN]"));
      

      此规则将打开包含 UPN 的临时声明,并使用 [DOMAIN] 替换 UPN 后缀网域。生成的声明将发布到 Google 登录,并用于关联用户与其 Cloud Identity 或 G Suite 中的用户。

      请务必将 [DOMAIN] 替换为 Cloud Identity 或 G Suite 帐号的主域名。

  9. 点击 Finish,然后点击 OK

    您可能需要应用不同的替换,具体取决于原始 UPN。为此,您需要创建其他规则(为每个可能的替换创建一个规则),并使用条件来限定应该应用哪个规则以及何时应用。例如,以下规则会将 UPN 域名替换为 corp.example.com,但仅当原始域名为 corp.local 时才会进行替换:

    c:[Type == "http://temp.google.com/upn", value =~ "^.+@corp.local$"]
     => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = RegexReplace(c.Value, "@(.*?)$", "corp.example.com"));
    

    如果您需要应用不同的替换,则必须运行单独的 Cloud Directory Sync 配置(为每个替换运行一个配置)。

电子邮件

  1. 在 AD FS 管理控制台的 Relying Party Trusts 下方,右键点击刚创建的信任,然后点击 Edit Claim Issuance Policy
  2. 在对话框中点击 Add Rule
  3. 选择 Send LDAP Attributes as Claims,然后点击 Next
  4. 在下一页上,应用以下设置:
    1. Claim rule nameMap Email and Name ID
    2. Attribute StoreActive Directory
  5. 在 LDAP 属性映射列表中添加一行:
    1. LDAP AttributeE-Mail-Addresses
    2. Outgoing Claim TypeName ID
  6. 点击 Finish,然后点击 OK

电子邮件:网域替换

  1. 在 AD FS 管理控制台的 Relying Party Trusts 下方,右键点击刚创建的信任,然后点击 Edit Claim Issuance Policy
  2. 在对话框中点击 Add Rule
  3. 选择 Send Claims Using a Custom Rule,然后点击 Next
  4. 在下一页上,应用以下设置:

    1. Claim rule nameLoad email address
    2. Custom Rule

      c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
       => add(store = "Active Directory", types = ("http://temp.google.com/mail"), query = ";mail;{0}", param = c.Value);
      

      此规则从 Active Directory 中加载相应用户的电子邮件地址,并将其保存在临时声明中。

  5. 点击 Finish

  6. 点击 Add Rule 以创建第二个规则。

  7. 选择 Send Claims Using a Custom Rule,然后点击 Next

  8. 在下一页上,应用以下设置:

    1. Claim rule nameTransform email address
    2. Custom Rule

      c:[Type == "http://temp.google.com/mail"]
       => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = RegexReplace(c.Value, "@(.*?)$", "@[DOMAIN]"));
      

      此规则会读取包含电子邮件地址的临时声明,并使用 [DOMAIN] 替换网域。生成的声明将发布到 Google 登录,并用于识别 Cloud Identity 或 G Suite 中的用户。

      请务必将 [DOMAIN] 替换为 Cloud Identity 或 G Suite 帐号的主域名。

  9. 点击 Finish,然后点击 OK

导出 AD FS 令牌签名证书

当 AD FS 发出 SAML 断言时,Google 登录必须验证该断言的完整性和真实性。为此,SAML 要求使用特殊的令牌签名密钥对该断言进行签名,该密钥是指定的公钥/私钥对的私钥。此密钥对的公钥以令牌签名证书的形式提供给 SP,并使 SP 能够验证断言的签名。

在配置 Cloud Identity 或 G Suite 帐号之前,必须先从 AD FS 中导出令牌签名证书:

  1. 在 AD FS 管理控制台中,点击 Service > Certificates
  2. 右键点击 Token-signing 下方列出的证书,然后点击 View Certificate
  3. 点击 Details 标签页。
  4. 点击 Copy to File 以打开“证书导出向导”。
  5. 点击 Next
  6. 选择 DER encoded binary X.509 (.CER) 作为格式,然后点击 Next
  7. 提供本地文件名,然后点击 Next
  8. 点击 Finish 以确认导出。
  9. 点击 OK 以关闭确认导出成功的消息框。
  10. 将导出的证书复制到本地计算机。

配置您的 Cloud Identity 或 G Suite 帐号

完成 AD FS 配置后,您现在可以在 Cloud Identity 或 G Suite 帐号中配置单点登录了:

  1. 管理控制台中,点击安全 > 设置
  2. 点击设置采用第三方身份提供商的单点登录 (SSO)
  3. 确保已启用设置采用第三方身份提供商的单点登录
  4. 输入以下设置。在所有网址中,将 [ADFS] 替换为 AD FS 服务器的完全限定域名:
    1. 登录页面网址https://[ADFS]/adfs/ls/
    2. 退出页网址https://[ADFS]/adfs/ls/?wa=wsignout1.0
    3. 更改密码网址https://[ADFS]/adfs/portal/updatepassword/
  5. 验证证书下方,点击选择文件,然后选择先前下载的 AD FS 令牌签名证书。
  6. 点击保存
  7. 在下一页上,确认您打算启用单点登录,然后点击我理解并同意
  8. 要退出管理控制台,请在右上角点击头像,然后点击退出登录

测试单点登录

您现在已在 AD FS 和 Cloud Identity 或 G Suite 中完成单点登录配置。要检查单点登录是否按预期工作,请运行以下测试:

  1. 选择先前已预配到 Cloud Identity 或 G Suite 且未被分配超级用户权限的 Active Directory 用户。具有超级用户权限的用户必须始终使用 Google 凭据登录,因此这些帐号不适合测试单点登录。
  2. 打开新的浏览器窗口,然后转到 https://console.cloud.google.com/
  3. 在显示的 Google 登录页面上,输入用户的电子邮件地址,然后点击下一步。如果您使用域名替换,则必须将替换应用于电子邮件地址。

    输入用户的电子邮件地址。

    您会被重定向到 AD FS。如果您已将 AD FS 配置为使用基于表单的身份验证,现在会看到登录页面。

  4. 输入 Active Directory 用户的 UPN 和密码,然后点击登录

    输入 Active Directory 用户的 UPN 和密码。

  5. 成功进行身份验证后,AD FS 会将您重定向回 Google Identity Platform。由于此用户是首次登录,因此系统会询问您是否接受 Google 服务条款和隐私权政策。

  6. 如果您同意这些条款,请点击接受

  7. 您将被重定向到 Cloud Console,Cloud Console 会要求您确认偏好设置并接受 Google Cloud 服务条款。如果您同意这些条款,请点击,然后点击同意并继续

  8. 在左上角,点击头像图标,然后点击退出登录

    然后,您将被重定向到 AD FS 页面,确认您已成功退出登录。

如果您无法登录,则在 AD FS 服务器上启用 AD FS 调试日志可以帮助您诊断问题。如果您使用的是集成式 Windows 身份验证,请考虑暂时切换为基于表单的身份验证,以便您可以更轻松地使用不同的用户执行测试。

请注意,具有超级用户权限的用户不必进行单点登录,因此您仍然可以使用管理控制台来验证或更改设置。

清理

如果您不打算让组织一直启用单点登录,请按照以下步骤在 Cloud Identity 或 G Suite 中停用单点登录:

  1. 管理控制台中,点击安全 > 设置
  2. 点击设置采用第三方身份提供商的单点登录 (SSO)
  3. 清除设置采用第三方身份提供商的单点登录复选框。
  4. 点击保存

要清除 AD FS 中的配置,请按照下列步骤操作:

  1. 登录 AD FS 服务器并打开 AD FS MMC 管理单元。
  2. 在左侧菜单中,右键点击 Relying Party Trusts 文件夹。
  3. 在依赖方信任列表中,右键点击 Cloud Identity,然后点击 Delete
  4. 点击 Yes 确认删除。

后续步骤