使用 Kerberos 认证与 Amazon Aurora MySQL 数据库博客
- 40
使用 Kerberos 身份验证与 Amazon Aurora MySQL
作者:Surendar Munimohan Sai Kiran Kshatriya Zhen Wang日期:2024 年 5 月 8 日分类:高级 (300)、Amazon Aurora、AWS 目录服务、MySQL 兼容、技术如何做
关键要点
Amazon Aurora MySQL 现在支持使用 Kerberos 和 Microsoft Active Directory 进行身份验证,提供增强的安全性和集中管理。本文将介绍如何集成自管理的 Microsoft Active Directory 与 AWS 托管的 Microsoft AD,及在 Windows 和 Linux 客户端使用 Kerberos 身份验证。Amazon Aurora MySQL 兼容版支持多种身份验证方法,以安全地管理数据库用户访问,并满足不同的安全需求。最常见的身份验证方法是使用用户名和密码,然而这可能会导致用户和数据库管理员在管理和轮换凭据时增加额外的负担,并需进行额外的审计和管理投资。
在版本 303 及以上的 Amazon Aurora MySQL 中,现已支持使用 Kerberos 对 Microsoft Active Directory (AD) 进行身份验证。通过与 AWS 目录服务 for Microsoft Active Directory 集成,您可以在集中位置管理数据库用户,并使用单点登录认证用户。
在这篇文章中,我们将讨论如何将自管理的 Microsoft AD 与 AWS 托管的 Microsoft AD 集成,启用 Amazon Aurora MySQL 的 Kerberos 身份验证,并在 Windows 和 Linux 客户端上实现 Kerberos 身份验证。
Kerberos 身份验证
Kerberos 作为一种网络身份验证协议,使得资源可以在不受信任的网络上相互验证身份。这种能力允许 Amazon Aurora MySQL 与 Microsoft AD 等集中身份验证服务集成,而 Microsoft AD 自然支持 Kerberos。
Kerberos 身份验证的工作流程在 MySQL 中的步骤如下:
客户端应用程序从 Amazon Aurora MySQL 获取其服务主体名称SPN。在 MySQL 中使用 GSSAPI 进行 Kerberos 身份验证。客户端应用程序启动 Kerberos 客户端身份验证会话,并通过 Kerberos 消息与 Kerberos 密钥分发中心 (KDC) 通信。客户端使用票据授权票 (TGT) 从票据授予服务获取 Amazon Aurora MySQL 的服务票据。通过 GSSAPI,客户端应用程序将 MySQL 服务票据转发给 Amazon Aurora MySQL。通过 GSSAPI,Amazon Aurora MySQL 启动 Kerberos 服务端身份验证会话。它验证用户的身份和用户请求的合法性。有关 MySQL 中 Kerberos 身份验证的详细信息,请参见 Kerberos 可插拔身份验证。
解决方案概述
为了模拟自管理的 Microsoft AD 环境,您可以在运行于 VPC 中的 Amazon Elastic Compute Cloud 实例上创建 Active Directory,在一个独立的 VPC 中创建 AWS 托管的 Microsoft AD,并在它们之间建立单向森林信任。有关准备环境的更多信息,请参见 为 Amazon RDS 外部 Kerberos 身份验证准备本地和 AWS 环境。
以下图表说明了自管理与 AWS 管理环境的高层架构。
先决条件
在本文中,我们假设您已有自管理的 Active Directory,并与 AWS 托管的 AD 建立了信任关系。我们使用命名为 admyawscom 的 AWS 托管 Microsoft AD 域和命名为 onpremlocal 的自管理 AD 域。为了访问位于独立 VPC 中的 Aurora MySQL 集群,我们启用了 VPC 对等连接以建立网络连接,并启用了单向森林信任以便于名称后缀路由。这允许在两个 Active Directory 森林之间进行 Kerberos 身份验证。要启用森林信任,请完成以下步骤:
在自管理的 AD 中,创建一个新的条件转发器,将 DNS 请求转发到 AWS 托管的 AD。创建一个指向 AWS 托管的 AD 的单向传入森林信任。从 AWS 托管的 AD 创建一个指向自管理 AD 的单向传出森林信任。有关这些步骤的详细信息,请参见 为 Amazon RDS 外部 Kerberos 身份验证准备本地和 AWS 环境。
以下截图显示了我们的 AWS 托管 AD。
创建新的 Aurora 集群
创建一个版本为 303 或更高版本的新 Aurora MySQL 集群并启用 Kerberos 身份验证,然后选择要与集群关联的 AWS 托管 AD。如果 Aurora MySQL 集群已经创建,您可以修改以允许 Kerberos 身份验证,如下截图所示。
新更改生效可能需要几分钟。您可以使用 AWS 管理控制台 或 AWS 命令行接口AWS CLI确认修改是否成功应用于实例。以下 AWS CLI 命令显示了 Aurora MySQL 集群的域成员资格:
bashaws rds describedbclusters dbclusteridentifier yourclusteridentifier region regionname query DBClusters[][DomainMemberships][ [ { Domain dxxyyyzzz1234 Status kerberosenabled FQDN admyawscom IAMRoleName rdsdirectoryservicekerberosaccessrole } ]]
在为现有数据库集群启用 Kerberos 身份验证时,修改后需重启集群中的所有实例。有关设置 Aurora MySQL 集群 Kerberos 身份验证的说明,请参见 为 Aurora MySQL 集群设置 Kerberos 身份验证。

创建 AD 域用户
根据您的业务安全策略创建 AD 域用户。在此示例中,我们创建了用户 joedoe@ONPREMLOCAL,如下图所示。我们将使用此用户通过 Kerberos 身份验证连接到 Aurora MySQL 实例。
创建数据库用户
使用管理员用户连接到 Aurora MySQL 集群并验证 Kerberos 身份验证是否已启用:
bash[ec2user@ip10034 ] mysql h aurorakerberosclusterxxyzzzapsoutheast2rdsamazonawscom u admin p
sqlmysqlgt SELECT PLUGINNAME PLUGINSTATUS FROM INFORMATIONSCHEMAPLUGINS WHERE PLUGINNAME = authenticationkerberos PLUGINNAME PLUGINSTATUS authenticationkerberos ACTIVE 1 row in set (000 sec)
创建用于 Kerberos 身份验证的用户并确认其有效性,给用户提供必要的权限。以下命令示例展示如何创建一个名为 joedoe 的数据库用户,以便从 ONPREMLOCAL 域通过 Kerberos 身份验证连接:
sqlmysqlgt CREATE USER joedoe@ IDENTIFIED WITH authenticationkerberos BY ONPREMLOCALQuery OK 0 rows affected (001 sec)
mysqlgt SELECT USER HOST PLUGIN AUTHENTICATIONSTRING FROM mysqluser WHERE USER=joedoe USER HOST PLUGIN AUTHENTICATIONSTRING joedoe authenticationkerberos ONPREMLOCAL 1 row in set (000 sec)
从 Windows 连接到 Amazon Aurora MySQL
要从 Windows 连接,使用在自管理 AD 中创建的域用户 joedoe 通过 RDP 登录到 Windows 客户端机器。在 Windows 客户端机器上创建名为 krb5conf 的 Kerberos 配置文件。在此设置中,krb5conf 文件应包括以下详细信息:
plaintext[libdefaults] dnslookuprealm = false ticketlifetime = 24h renewlifetime = 7d forwardable = true rdns = false doNotPrompt = false defaultrealm = ADMYAWSCOM
[realms] ADMYAWSCOM = { kdc = admyawscom adminserver = admyawscom } ONPREMLOCAL = { kdc = onpremlocal adminserver = onpremlocal }
[domainrealm] admyawscom = ADMYAWSCOM admyawscom = ADMYAWSCOM onpremlocal = ONPREMLOCAL onpremlocal = ONPREMLOCAL rdsamazonawscom = ADMYAWSCOM amazoncomcn = ADMYAWSCOM amazoncom = ADMYAWSCOM
此外,将环境变量 KRB5CONFIG 设置为指向 krb5conf 文件的位置。例如,我们在 Windows 客户端机器上设置如下变量:
bashSET KRB5CONFIG=CProgram FilesMySQLMySQL Server 80krb5conf
为了永久设置此变量,可以创建一个 Windows 系统环境变量。要创建票据授权票并将其保存到 Kerberos 凭证缓存中,将 MIT Kerberos 票据管理器安装在 MIT Kerberos 发布页面 上。安装后,为域用户生成票据,这里是 joedoe@ONPREMLOCAL。
tk加速器官网入口我们已配置好所有先决条件,以便从 Windows 客户端机器连接到 Amazon Aurora MySQL。现在让我们使用 Windows 命令行连接到 Aurora MySQL 集群。
bashmysql h aurorakerberosclusterxxyzzzapsoutheast2rdsamazonawscom u joedoe pluginauthenticationkerberosclientmode=GSSAPI plugindir=CProgram FilesMySQL Server 80libplugin
参数描述hAurora 集群端点uAD 用户名pluginauthenticationkerberosclientmode指定客户端身份验证插件模式。GSSAPI 模式通过 MIT Kerberos 库启用身份验证。plugindir指定客户端程序中 authenticationkerberosclient 插件的路径。要通过 Kerberos 身份验证从 MySQL Workbench 连接,请完成以下步骤:
在 连接方法 中,选择 Native Kerberos。在 参数 标签页中提供以下信息:在 主机名 中,输入 Aurora MySQL 集群的端点。在 用户名 中,输入为 Kerberos 身份验证创建的 Aurora MySQL 用户名。在 Kerberos 模式 中,选择 GSS API 身份验证。在 高级 标签页中,配置以下变量:在 插件目录路径 中,输入 MySQL Server 客户端插件目录的路径。在 Kerberos 配置路径 中,输入 Kerberos 配置文件的路径。选择 测试连接 来测试与 MySQL Workbench 的连接。测试成功后,选择 确定,然后选择 确定 完成连接。从 Linux 连接到 Amazon Aurora MySQL
要从 Linux 连接,使用域用户 joedoe SSH 登录到您的 Linux 机器。使用以下命令验证 Linux 机器是否已加入域:
bash[joedoe@ip10100123 ] realm listONPREMLOCALtype kerberosrealmname ONPREMLOCALdomainname onpremlocalconfigured kerberosmemberserversoftware activedirectoryclientsoftware sssdrequiredpackage oddjobrequiredpackage oddjobmkhomedirrequiredpackage sssdrequiredpackage adclirequiredpackage sambacommontoolsloginformats Uloginpolicy allowrealmlogins
并非所有 Linux 机器默认都安装 Kerberos 客户端。要在 Amazon Linux 2 上安装 Kerberos 客户端,请使用以下命令:
bashyum install krb5workstation krb5libs krb5authdialog
根据您的 Active Directory 域,在客户端机器的 krb5conf 文件中配置领域和 domainrealm。例如,以下是我们测试环境的 krb5conf 文件的修改示例:
bash[joedoe@ip10100123 ] cat /etc/krb5conf
Configuration snippets may be placed in this directory as well
includedir /etc/krb5confd/includedir /var/lib/sss/pubconf/krb5included/[logging]default = FILE/var/log/krb5libslogkdc = FILE/var/log/krb5kdclogadminserver = FILE/var/log/kadmindlog
[libdefaults]dnslookuprealm = falseticketlifetime = 24hrenewlifetime = 7dforwardable = truerdns = falsepkinitanchors = FILE/etc/pki/tls/certs/cabundlecrtdefaultrealm = ADMYAWSCOMdefaultccachename = KEYRINGpersistent{uid}
[realms]ADMYAWSCOM = { kdc = admyawscom adminserver = admyawscom}ONPREMLOCAL = { kdc = onpremlocal adminserver = onpremlocal}
[domainrealm]admyawscom = ADMYAWSCOMadmyawscom = ADMYAWSCOMonpremlocal = ONPREMLOCALonpremlocal = ONPREMLOCALrdsamazonawscom = ADMYAWSCOM
Kerberos 身份验证方法在 MySQL 8026 及更高版本中受支持,因此请安装版本 8026 或更高的 mysqlclient。安装后,检查 MySQL 客户端版本:
bash[joedoe@ip10100