如何对使用 AWS Managed Microsoft AD 的 Amazon RDS for SQL Server Windows Authentication 问题进行故障排除?

3 分钟阅读
0

我为 AWS 账户配置了 AWS Directory Service for Microsoft Active Directory。我在创建 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 数据库实例时遇到了问题。

简短描述

在创建 Amazon RDS for SQL Server 数据库实例时,您可能会遇到以下问题之一:

  • Microsoft Managed AD 不可用。
  • 您会收到 Failed to join a host to a domain(无法将主机加入域)的错误消息,或者 Amazon RDS 控制台上的目录状态显示 Failed(失败)。
  • 您无法使用 Windows Authentication 登录数据库实例。

您可以跨多个 AWS 账户和 Amazon Virtual Private Cloud (Amazon VPC) 对 Amazon RDS for SQL Server 数据库实例使用 Windows Authentication。您还可以在多个账户和 VPC 之间共享 AWS Managed Microsoft AD 目录,以管理目录感知数据库工作负载。但是,RDS for SQL Server 数据库实例必须与 AWS Managed Microsoft AD 目录位于同一个 AWS 区域。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

创建数据库实例时,AWS Managed Microsoft AD 未列出或不可用

**重要事项:**要在 Amazon RDS 控制台上列出 AWS Managed Microsoft AD,托管域类型必须为 AWS Managed Active Directory

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

完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择数据库
  3. 选择您的数据库实例。
  4. Summary(摘要)部分中,记下您的数据库实例所在的 Region(区域)。
  5. 使用 AWS Directory Service 控制台确认目录服务与数据库实例位于同一区域。

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

完成以下步骤:

  1. 与将在其中创建数据库实例的 AWS 账户共享目录。按照**《AWS Directory Service 管理指南》**中的共享您的 AWS Managed Microsoft AD 目录以无缝加入 EC2 域中的步骤操作。
  2. 使用数据库实例的账户打开 AWS Directory Service 控制台
  3. 验证域是否处于 SHARED 状态。
  4. 使用 Directory ID 值将数据库实例加入域。

将数据库实例加入域时,您会收到错误或目录状态显示为“Failed”(失败)

将数据库实例加入域时,您可能会收到以下错误消息: “Failed to join a host to a domain.Domain membership status for instance XXXXXXX has been set to Failed.” 或者,目录状态可能显示为 Failed(失败)。

要对域加入失败的问题进行故障排除,请完成以下步骤:

  1. 确认您已将 RDS for SQL Server 实例安全组配置为允许以下出站流量:
    TCP 和 UDP 端口 53
    TCP 和 UDP 端口 88
    TCP 和 UDP 端口 135
    TCP 和 UDP 端口 389
    TCP 和 UDP 端口 445
    TCP 和 UDP 端口 464
    TCP 端口 636
    TCP 端口 3268
    TCP 端口 3269
    TCP 端口 9389
    TCP 端口 49152-65535
    UDP 端口 123
    UDP 端口 138
  2. 确认 AWS Managed Microsoft AD 安全组已配置为允许正确的入站流量。
    **注意:**当您创建 AWS Managed Microsoft AD 时,AWS Directory Service 会创建安全组。有关添加到安全组的入站和出站规则的列表,请参阅使用 AWS Managed Microsoft AD 创建的内容
  3. 检查您的数据库实例和 AWS Managed Microsoft AD 是否位于不同的 VPC 或账户中。
    **注意:**如果属实,请确保有正确的路径将数据库实例连接到 AWS Managed Microsoft AD。此外,请确保 Microsoft Managed AD 有正确的路由到达数据库实例。有关详细信息,请参阅 RDS 对跨账户和跨 VPC 域加入的支持

确定并解决域加入失败的潜在原因后,完成以下步骤,将域重新加入数据库实例:

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

调用 ModifyDBInstance 操作时出现 InvalidParameterCombination 错误

如果您收到以下错误消息: “IAM role provided is not valid, check that the role exists and has the correct policies”,请执行以下操作:

  • 使用 AWS CLI 将目录服务连接到数据库实例时,使用默认的 rds-directoryservice-access-role AWS Identity and Access Management (IAM) 角色。
  • 如果您使用自定义角色,请将 AmazonRDSDirectoryServiceAccess 默认策略附加到该自定义角色。

无法使用 Windows Authentication 登录数据库实例

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

要创建信任关系,请完成以下步骤:

  1. 使用 SQL Server Management Studio (SSMS) 以主用户身份登录数据库实例。
  2. 使用 T-SQL 创建 Windows Authentication 登录名:
    CREATE LOGIN [Domain Name\user or group] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
    **注意:**在 RDS for SQL Server 实例上创建 Windows Authentication 登录名时,必须使用 T-SQL。您无法使用 GUI 在 SQL SSMS 中创建登录名。
  3. 使用 Windows Authentication 连接到数据库实例。

相关信息

将 AWS Managed Active Directory 用于 RDS for SQL Server

使用安全组控制访问权限

无法连接到 Amazon RDS 数据库实例

Joining your Amazon RDS DB instances across accounts to a single shared domain(跨账户将您的 Amazon RDS 数据库实例加入单个共享域)

将 Microsoft SQL Server 数据库迁移到 AWS Cloud