为 Aurora MySQL 数据库集群设置 Kerberos 身份验证 - Amazon Aurora

为 Aurora MySQL 数据库集群设置 Kerberos 身份验证

使用 AWS Managed Microsoft AD 为 Aurora MySQL 数据库集群设置 Kerberos 身份验证。要设置 Kerberos 身份验证,请执行以下步骤。

步骤 1:使用 AWS Managed Microsoft AD 创建目录

AWS Directory Service 将在 AWS 云中创建一个完全托管的 Active Directory。创建 AWS Managed Microsoft AD 目录时,AWS Directory Service 将代表您创建两个域控制器和域名系统 (DNS) 服务器。目录服务器在 VPC 中的不同子网中创建。这种冗余有助于确保始终可以访问目录,即使发生了故障。

创建 AWS Managed Microsoft AD 目录时,AWS Directory Service 代表您执行以下任务:

  • 在 VPC 中设置 Active Directory。

  • 创建具有用户名 Admin 和指定密码的目录管理员账户。您可以使用此账户管理您的目录。

    注意

    请务必保存此密码。AWS Directory Service 不会存储它。您可以重置它,但无法检索它。

  • 为目录控制器创建安全组。

在启动 AWS Managed Microsoft AD 时,AWS 创建一个组织单位 (OU),其中包含目录的所有对象。此 OU 具有您在创建目录时输入的 NetBIOS 名称。此 OU 位于域根目录中,由 AWS 拥有和管理。

使用 AWS Managed Microsoft AD 目录创建的 Admin 账户有权为您的 OU 执行最常见的管理活动,包括:

  • 创建、更新或删除用户

  • 将资源添加到域(如文件或打印服务器),然后为 OU 中的用户分配这些资源的权限

  • 创建额外的 OU 和容器

  • 委托授权

  • 从 Active Directory 回收站还原删除的对象

  • 在 Active Directory Web 服务上运行 AD 和 DNS Windows PowerShell 模块

Admin 账户还有权执行以下域范围的活动:

  • 管理 DNS 配置(添加、删除或更新记录、区域和转发器)

  • 查看 DNS 事件日志

  • 查看安全事件日志

使用 AWS Managed Microsoft AD 创建目录
  1. 登录 AWS Management Console,然后打开 AWS Directory Service 控制台,网址为:https://console.aws.amazon.com/directoryservicev2/

  2. 在导航窗格中,选择 Directories (目录),然后选择 Set up Directory (设置目录)

  3. 选择 AWS Managed Microsoft AD。AWS Managed Microsoft AD 是当前唯一可以与 Amazon RDS 一起使用的选项。

  4. 输入以下信息:

    目录 DNS 名称

    目录的完全限定名称,例如 corp.example.com

    目录 NetBIOS 名称

    目录的短名称,如 CORP

    目录描述

    (可选)目录的描述。

    管理员密码

    目录管理员的密码。目录创建过程将使用用户名 Admin 和此密码创建一个管理员账户。

    目录管理员密码不能包含单词“admin”。此密码区分大小写,且长度必须介于 8 – 64 个字符之间。至少,它还必须包含下列四种类别中三种类别的一个字符:

    • 小写字母 (a–z)

    • 大写字母 (A–Z)

    • 数字 (0–9)

    • 非字母数字字符 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

    确认密码

    重新输入的管理员密码。

  5. 选择下一步

  6. Networking (网络) 部分中输入以下信息,然后选择 Next (下一步)

    VPC

    目录的 VPC。在该同一 VPC 中创建 Aurora MySQL 数据库集群。

    子网

    目录服务器的子网。两个子网必须位于不同的可用区。

  7. 查看目录信息并进行必要的更改。如果信息正确,请选择 Create directory (创建目录)

    创建过程中的目录详细信息页面

创建目录需要几分钟时间。创建成功后,Status (状态) 值将更改为 Active (活动)

要查看有关您的目录的信息,请在目录列表中选择目录名称。请记下目录 ID 值,因为您在创建或修改 Aurora MySQL 数据库集群时需要此值。

“目录详细信息”页面中的“目录 ID”

步骤 2:(可选)为本地 Active Directory 创建信任

如果您不打算使用自己的本地 Microsoft Active Directory,请跳转至 步骤 3:创建 IAM 角色以供 Amazon Aurora 使用

要将 Kerberos 身份验证与本地 Active Directory 结合使用,您需要使用林信任在本地 Microsoft Active Directory 和 AWS Managed Microsoft AD 目录(在步骤 1:使用 AWS Managed Microsoft AD 创建目录中创建)之间创建信任域关系。信任可以是单向的,此时 AWS Managed Microsoft AD 目录信任本地 Microsoft Active Directory。信任也可以是双向的,此时两个 Active Directory 相互信任。有关使用 AWS Directory Service 设置信任的更多信息,请参阅 AWS Directory Service 管理指南中的何时创建信任关系

注意

如果使用本地 Microsoft Active Directory:

  • Windows 客户端必须使用端点中 AWS Directory Service 的域名而不是 rds.amazonaws.com 进行连接。有关更多信息,请参阅使用 Kerberos 身份验证连接到 Aurora MySQL

  • Windows 客户端无法使用 Aurora 自定义端点进行连接。要了解更多信息,请参阅 Amazon Aurora 连接管理

  • 对于全局数据库

    • Windows 客户端可以使用全局数据库的主 AWS 区域 中的实例端点或集群端点进行连接。

    • Windows 客户端无法使用辅助 AWS 区域 中的集群端点进行连接。

请确保您的本地 Microsoft Active Directory 域名包含与新创建的信任关系对应的 DNS 后缀路由。以下屏幕截图显示一个示例。

DNS 路由对应于创建的信任

步骤 3:创建 IAM 角色以供 Amazon Aurora 使用

要使 Amazon Aurora 为您调用 AWS Directory Service,您需要一个使用托管式 IAM policy AmazonRDSDirectoryServiceAccess 的 AWS Identity and Access Management(IAM)角色。该角色允许 Aurora 调用 AWS Directory Service。

使用 AWS Management Console创建数据库集群并且您具有 iam:CreateRole 权限时,控制台将自动创建此角色。在这种情况下,角色名为 rds-directoryservice-kerberos-access-role。否则,您必须手动创建 IAM 角色。在创建该 IAM 角色时,请选择 Directory Service,然后将 AWS 托管策略 AmazonRDSDirectoryServiceAccess 附加到该角色。

有关为服务创建 IAM 角色的更多信息,请参阅 IAM 用户指南中的创建向AWS服务委托权限的角色

或者,您可以创建具有所需权限的角色,而不是使用托管 IAM 策略 AmazonRDSDirectoryServiceAccess。在这种情况下,IAM 角色必须具有以下 IAM 信任策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

角色还必须具有以下 IAM 角色策略。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }

步骤 4:创建和配置用户

您可以使用“Active Directory 用户和计算机”工具创建用户。该工具是 Active Directory Domain Services 和 Active Directory Lightweight Directory Services 工具的一部分。用户表示有权访问您的目录的独立个人或实体。

要在 AWS Directory Service 目录中创建用户,请使用一个基于 Microsoft Windows 的本地或 Amazon EC2 实例,该实例已加入您的 AWS Directory Service 目录中。您必须以具有权限创建用户的用户身份登录此实例。有关更多信息,请参阅AWS Managed Microsoft AD Directory Service 管理指南中的管理 AWS 中的用户和组

步骤 5:创建或修改 Aurora MySQL 数据库集群

创建或修改 Aurora MySQL 数据库集群,以便与目录一起使用。您可以使用控制台、AWS CLI 或 RDS API 将数据库集群与目录关联。您可以通过下列方式之一来执行该任务:

仅 VPC 中的 Aurora MySQL 数据库集群支持 Kerberos 身份验证。数据库集群可以与目录在同一 VPC 中或在不同 VPC 中。数据库集群的 VPC 必须具有允许与您的目录进行出站通信的 VPC 安全组。

在使用控制台创建、修改或还原数据库集群时,请选择数据库身份验证部分中的 Kerberos 身份验证。选择 Browse Directory (浏览目录),然后选择目录或选择 Create a new directory (创建新目录)

创建数据库集群时的 Kerberos 身份验证设置

使用 AWS CLI 或 RDS API 时,将数据库集群实例与目录关联。数据库集群需要以下参数才能使用您创建的域目录:

  • 对于 --domain 参数,请使用创建目录时生成的域标识符(“d-*”标识符)。

  • 对于 --domain-iam-role-name 参数,请使用您使用托管 IAM 策略 AmazonRDSDirectoryServiceAccess 创建的角色。

例如,以下 CLI 命令修改数据库集群以使用目录。

对于 Linux、macOS 或 Unix:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --domain d-ID \ --domain-iam-role-name role-name

对于 Windows:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --domain d-ID ^ --domain-iam-role-name role-name
重要

如果您修改数据库集群以开启 Kerberos 身份验证,请在进行更改之后重启读取器数据库实例。

步骤 6:创建使用 Kerberos 身份验证的 Aurora MySQL 用户

数据库集群加入到 AWS Managed Microsoft AD 域。这样,您可以从您域中的 Active Directory 用户创建 Aurora MySQL 用户。数据库权限是通过授予这些用户并从这些用户撤消的标准 Aurora MySQL 权限来管理的。

您可以允许 Active Directory 用户使用 Aurora MySQL 进行身份验证。为此,首先使用 Amazon RDS 主用户凭证连接到 Aurora MySQL 数据库集群,就像连接到任何其他数据库集群一样。登录后,在 Aurora MySQL 中创建一个具有 Kerberos 身份验证的经外部身份验证的用户,如下所示:

CREATE USER user_name@'host_name' IDENTIFIED WITH 'authentication_kerberos' BY 'realm_name';
  • user_name 替换为用户名。您的域中的用户(人员和应用程序)现在可以使用 Kerberos 身份验证从加入域的客户端计算机连接到数据库集群。

  • host_name 替换为主机名。可以使用 % 作为通配符。您也可以使用特定的 IP 地址作为主机名。

  • realm_name 替换为域的目录领域名称。领域名称通常与使用大写字母的 DNS 域名相同,例如 CORP.EXAMPLE.COM。领域是一组使用相同 Kerberos 密钥分发中心的系统。

以下示例创建了一个名为 Admin 的数据库用户,该用户使用领域名称 MYSQL.LOCAL 针对 Active Directory 进行身份验证。

CREATE USER Admin@'%' IDENTIFIED WITH 'authentication_kerberos' BY 'MYSQL.LOCAL';

修改现有的 Aurora MySQL 登录名

还可以使用以下语法修改现有 Aurora MySQL 登录名以使用 Kerberos 身份验证:

ALTER USER user_name IDENTIFIED WITH 'authentication_kerberos' BY 'realm_name';

步骤 7:配置 MySQL 客户端

要配置 MySQL 客户端,请采取以下步骤:

  1. 创建一个 krb5.conf 文件(或等效的文件)以指向该域。

  2. 验证流量是否可以在客户端主机和 AWS Directory Service 之间流动。使用网络实用程序(如 Netcat)执行以下操作:

    • 验证端口 53 上通过 DNS 的流量。

    • 验证端口 53 上通过 TCP/UDP 的流量以及 Kerberos 的流量,包括用于 AWS Directory Service 的端口 88 和 464。

  3. 验证流量是否可以通过数据库端口在客户端主机和数据库实例之间流动。例如,使用 mysql 连接和访问数据库。

以下是 AWS Managed Microsoft AD 的示例 krb5.conf 内容。

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

以下是本地 Microsoft Active Directory 的示例 krb5.conf 内容。

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM .rds.amazonaws.com = EXAMPLE.COM .amazonaws.com.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM

步骤 8:(可选)配置不区分大小写的用户名比较

原定设置情况下,MySQL 数据库用户名的字符大小写必须与 Active Directory 登录名的大小写匹配。但是,您现在可以通过 authentication_kerberos 插件使用不区分大小写的用户名比较。为此,可以将 authentication_kerberos_caseins_cmp 数据库集群参数设置为 true

使用不区分大小写的用户名比较
  1. 创建自定义数据库集群参数组。按照 创建数据库集群参数组 所述的过程操作。

  2. 编辑新的参数组以将 authentication_kerberos_caseins_cmp 的值设置为 true。按照 修改数据库集群参数组中的参数 所述的过程操作。

  3. 将数据库集群参数组与 Aurora MySQL 数据库集群关联。按照 关联数据库集群参数组与数据库集群 所述的过程操作。

  4. 重启数据库集群。