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

上次更新日期:2021 年 2 月 10 日

我已为我的 AWS 账户配置了 AWS Directory Service for Microsoft Active Directory (Microsoft AD)。但是,当我尝试创建运行 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 VPC 支持运行 SQL Server 的 Amazon RDS 数据库实例的 Windows 身份验证。单个 AWS Managed Microsoft AD 可以在多个 AWS 账户和 VPC 之间共享,从而轻松管理目录感知的数据库工作负载。但是,仅当 RDS SQL Server 数据库实例与 AWS Managed Microsoft AD 位于同一 AWS 区域时,才是如此。

解决方法

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

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

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

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

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

  1. 打开 Amazon RDS console(Amazon RDS 控制台),然后从导航窗格中选择 Databases(数据库)。
  2. 选择要连接到目录的数据库实例。
  3. Summary(摘要)部分中,查看与数据库实例关联的 Region(区域)。
  4. 通过检查 Directory Service console(目录服务控制台),确认 Directory Service(目录服务)与数据库实例位于同一 AWS 区域中。

如果您的 AWS Managed Directory Service 位于与数据库实例不同的 AWS 账户中,请与 AWS 账户共享 AWS Directory Service。然后,您可以在创建或修改数据库实例时列出 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”(失败)

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

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

如果您的 AWS Managed Directory Service 位于同一账户和不同的 VPC 中,或与数据库实例不同的 AWS 账户,则在 AWS Managed Directory Service VPC 和数据库实例 VPC 之间启用跨 VPC 流量。为此,请使用 VPC-peeringAWS Transit Gateway。确保 VPC 路由表具有成功启用跨 VPC 流量所需的目标路由。

确认已配置安全组的入站和出站规则,以便数据库实例可与 Active Directory 通信。然后,按照下列步骤将数据库实例重新加入域中:

  1. 打开 Amazon RDS console(Amazon RDS 控制台),然后从导航窗格中选择 Databases(数据库)。
  2. 选择未能加入域中的数据库实例,然后选择 Modify(修改)。
  3. Microsoft SQL Server Windows Authentication(Microsoft SQL Server Windows 身份验证)部分,对于 Directory(目录),选择 None(无)。
  4. 选择 Apply immediately(立即应用)。完成修改后,将会自动重启数据库实例。
  5. 要重新加入目录,从导航窗格中,选择 Databases(数据库)。
  6. 选择数据库实例,然后选择 Modify(修改)。
  7. Microsoft SQL Server Windows Authentication(Microsoft SQL Server Windows 身份验证)部分,对于 Directory(目录),从列表中选择目录。
  8. 选择 Apply immediately(立即应用)。完成修改后,将会再次重启数据库实例。

调用 ModifyDBInstance 操作时发生错误 (InvalidParameterCombination):提供的 IAM 角色无效,请检查角色是否存在且具有正确的策略

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

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

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

  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 SQL Server 创建 Windows 身份验证登录。您不能使用 GUI 在 SQL Server Management Studio 上创建登录。

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