如何使用 AWS Managed Microsoft AD 对 RDS for SQL Server Windows 身份验证问题进行排查?

上次更新日期:2022 年 10 月 14 日

我已为我的 AWS 账户配置了 AWS Directory Service for Microsoft Active Directory。在创建适用于 Microsoft SQL Server 的 Amazon Relational Database Service(Amazon RDS)数据库实例时,我遇到了以下问题之一:

  • Active Directory 不可用。
  • 我收到一条错误消息,显示“Failed to join a host to a domain”(未能将主机加入域)或 RDS 控制台上的 Directory Status(目录状态)显示“Failed”(失败)。
  • 我无法使用 Windows 身份验证登录数据库实例。

我如何排查使用 AWS Managed Microsoft AD 时碰到的这些问题?

简短描述

跨多个 AWS 账户和 Amazon Virtual Private Cloud(Amazon VPC)支持 RDS for SQL Server 数据库实例的 Windows 身份验证。单个 AWS Managed Microsoft AD 可以在多个 AWS 账户和 VPC 之间共享,从而轻松管理目录感知的数据库工作负载。但是,仅当 RDS for SQL Server 数据库实例与 AWS Managed Microsoft AD 位于同一 AWS 区域时,才是如此。

解决方法

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

创建数据库实例时,Active Directory 未列出或不可用

重要提示:托管域类型必须为要列在 Amazon RDS 控制台的适用于 Active Directory 的 AWS 托管活动目录

如果 AWS Managed Microsoft AD 与实例位于不同的区域,则创建或修改数据库实例时不会列出该目录。要解决此问题,请确保数据库实例与 Directory Service 位于同一 AWS 区域中。

确认 RDS 数据库实例和 Directory Service 是否位于同一区域:

1.    打开 Amazon RDS 控制台,然后从导航窗格中选择 Databases(数据库)。

2.    选择要连接到目录的数据库实例。

3.    在 Summary(摘要)部分中,查看与数据库实例关联的 Region(区域)。

4.    通过检查 AWS Directory Service 控制台,确认 Directory Service(目录服务)与数据库实例位于同一 AWS 区域中。

如果您的 AWS Managed Microsoft AD 与数据库实例位于不同的 AWS 账户中,请与 AWS 账户共享 AD。然后,您可以在创建或修改数据库实例时列出 Directory Service。

1.    开始与将在其中创建数据库实例的 AWS 账户共享目录。遵循 AWS Directory Service 管理指南为无缝 EC2 域加入共享您的 AWS Managed Microsoft AD 目录的步骤。

2.    使用数据库实例的账户登录 AWS Directory Service 控制台。在继续之前,请检查域是否具有 SHARED(已共享)状态。

3.    使用数据库实例的账户而不是目录 ID 值登录 AWS Directory Service 控制台。使用此目录 ID 将数据库实例加入域。

将数据库实例加入域时收到错误或 RDS 控制台上的 Directory Status(目录状态)显示“Failed”(失败)

将数据库实例加入域时,您可能会收到以下错误消息,或者 Directory status(目录状态)可能显示为 Failed(失败):

“Failed to join a host to a domain.Domain membership status for instance XXXXXXX has been set to Failed.”(无法将主机加入到域中。实例 XXXXXXX 的域成员状态已设置为“失败”。)

1.    确认 RDS for SQL Server 实例安全组已配置为允许正确的出站流量。

  • TCP 和 UDP 端口 53
  • TCP 和 UDP 端口 88
  • TCP 和 UDP 端口 135
  • TCP 和 UDP 端口 389
  • TCP 和 UDP 端口 445

2.    确认 AWS Managed Microsoft AD 安全组已配置为允许正确的入站流量。安全组是在你创建 AWS Managed Microsoft AD 时创建的。有关添加到此安全组的入站和出站规则的列表,请参阅 AWS Directory Service 管理指南中的创建的内容

3.    您的数据库实例与 AWS Managed Microsoft AD 可能位于不同的 VPC 或账户中。如果是,请确保数据库实例到达 AD 的路径正确。此外,请确保 AD 到达数据库实例的路径也正确。有关更多信息,请参阅跨账户和跨 VPC 域加入的 RDS 支持(视频)。

确定并解决域加入失败的潜在原因后,请执行以下操作以取消加入域并将域加入数据库实例:

1.    打开 Amazon RDS 控制台,然后从导航窗格中选择 Databases(数据库)。

2.    选择未能加入域中的数据库实例,然后选择 Modify(修改)。

3.    从Microsoft SQL Server Windows 身份验证部分,对于目录,选择

4.    选择立即应用。完成修改后,将会自动重启数据库实例。

5.    要重新加入目录,从导航窗格中,选择 Databases(数据库)。

6.    选择数据库实例,然后选择修改

7.    从Microsoft SQL Server Windows 身份验证部分,对于目录,从列表中选择目录。

8.    选择立即应用。完成修改后,将会再次重启数据库实例。

调用 ModifyDBInstance 操作时发生错误(InvalidParameterCombination):IAM role provided is not valid, please check that the role exists and has the correct policies(提供的 IAM 角色无效,请检查角色是否存在且具有正确的策略)

使用 AWS CLI 将 Directory Service 挂载到数据库实例时,请使用默认 IAM 角色 rds-directoryservice-access-role。如果您使用自定义角色,请将默认策略 AmazonRDSDirectoryServiceAccess 挂载到该自定义角色。这样做可以解决 IAM role provided is not valid(提供的 IAM 角色无效)错误。

无法使用 Windows 身份验证登录数据库实例

使用 Windows 身份验证登录要求 AD 用户或组使用数据库实例的主用户凭证在实例上进行 SQL 登录。如果您使用本地 AD 中的组或用户,则必须创建信任关系

1.    使用 SQL Server Management Studio(SSMS)以主用户身份登录到数据库实例。

2.    使用 T-SQL 创建 Windows 身份验证登录:

CREATE LOGIN [Domain Name\user or group] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];

注意:仅支持使用 T-SQL 在 RDS for SQL Server 实例上创建 Windows 身份验证登录。您不能使用 GUI 在 SQL Server Management Studio 上创建登录。

3.    使用 Windows 身份验证连接数据库实例。