敦煌市朗谣郡249号
办公时间:上午9:00-下午6:00

新闻中心

首页 / Our News /在 AWS 数据库博客中配置 Linux 客户端的 Kerberos 认证,以用于 Amazon R

在 AWS 数据库博客中配置 Linux 客户端的 Kerberos 认证,以用于 Amazon R

2026-01-27 13:35:17

在 Linux 客户端配置 Kerberos 认证以连接 Amazon RDS for SQL Server 与 AWS 管理的 Microsoft AD

关键要点

在本文中,我们将探讨如何在 Linux 客户端配置 Kerberos 认证,以便安全地连接 Amazon RDS for SQL Server 和 AWS 管理的 Microsoft AD。这一过程涵盖了从资源配置到数据库访问的各个方面,为需要在云环境中整合现有 AD 系统的用户提供了一套完整的解决方案。

Amazon RDSAmazon Relational Database Service是一项管理型数据库服务,可以简化常见数据库引擎的设置、操作和扩展,包括 Microsoft SQL Server。在本地环境中,SQL Server 通常会与 Microsoft Active Directory (AD) 配合使用以实现 NTLM 和 Kerberos 认证。AWS 提供了这两种组件的管理服务,使将这些工作负载迁移到云端变得更加简单,同时保持与现有基础设施的兼容性。本文将提供使用 Amazon RDS for SQL Server 结合 AWS Directory Service for Microsoft Active Directory AWS 管理的 Microsoft AD实现客户端通过 Kerberos 认证的解决方案。

Amazon RDS for SQL Server 使您能够快速设置、运营和扩展云中的 SQL Server 部署。通过 Amazon RDS,您可以在几分钟内部署多个版本的 SQL Server,并且计算资源具有成本效益且可扩展。它还可以让您专注于应用程序开发,因为它会管理耗时的数据库管理任务,例如资源配置、备份、软件修补、监控和硬件扩展。

AWS Directory Service 为希望在云中使用现有的支持 Microsoft AD 或 LDAP 的应用程序的客户提供多种目录选择。AWS 管理的 Microsoft AD 激活您的目录感知工作负载和 AWS 资源,使其能够使用 AWS 上的管理 AD。这是一个高度可用的管理基础设施,包括补丁和软件更新以及自动域控制器替换。

SQL Server 的 Windows 认证与 Kerberos 认证

SQL Server 提供两种认证模式:

Windows 认证模式SQL Server 和 Windows 认证模式混合模式

混合模式结合了 Windows 认证和 SQL Server 认证。在 SQL Server 认证中,用户的用户名和密码都是在 SQL Server 中创建和存储的。Windows 认证可通过 SQL Server 提供的两种认证模式来实现,并且可以与 Microsoft AD 紧密集成,使用 AD 用户和组进行认证。许多本地 SQL Server 工作负载更倾向于使用 Windows 认证,原因主要有以下几点:

将多个 SQL Server 实例的用户和组管理集中在同一 Microsoft AD 中提供比 SQL Server 认证更丰富的密码策略

在 SQL Server 中使用 Windows 认证时,支持 NTLM 或 Kerberos 协议。然而,需要注意的是,与 Windows 客户端不同,Linux 客户端仅支持 Kerberos。采用 Kerberos 可以确保一个强健和安全的网络认证协议。通过将 Amazon RDS for SQL Server 与 AWS 管理的 Microsoft AD 集成,您可以使 Windows 和 Linux 客户端通过 Kerberos 协议进行认证,从而使它们能够访问 AWS 环境中的 SQL Server 数据库。

魔方网络服务加速器

在本文中,我们将指导您如何配置 Amazon RDS for SQL Server,使用 AWS 管理的 Microsoft AD,展示在 Linux 客户端机器上进行 Kerberos 认证的过程。这本指南可以作为在 AWS 环境中无缝扩展集成 Microsoft AD 的 SQL Server 工作负载的蓝图,同时保持与您现有本地基础设施的兼容性。

解决方案概述

下图展示了架构和在本文中实现 Linux 客户端 Kerberos 认证所需的 AWS 组件。该设置的主要组成部分涉及以下 Amazon 资源:

组件作用AWS Managed Microsoft AD目录服务,用于 Kerberos 认证RDS for SQL Server 实例执行 SQL Server 数据库的服务Amazon EC2 实例Windows加入 AWS Managed AD 的 Windows 服务器EC2 实例Linux执行 Kerberos 认证的客户端

这个视觉图为这些元素如何协同工作以实现 Linux 客户端的 Kerberos 认证提供了概述。

架构的基本组成部分包括:

一对高度可用的域控制器DCs,在 VPC 内配置 AWS Managed Microsoft AD。有关应用程序兼容性的详细信息,请参阅 AWS Managed Microsoft AD 的应用程序兼容性策略。AWS Managed Microsoft AD 作为 Kerberos 认证的 密钥分发中心 (KDC)。一台配置为加入 AWS Managed Microsoft AD 的 Windows EC2 实例。该实例上安装了 AD 管理工具,以便创建用于测试 Kerberos 认证的 AD 域用户。有关 Windows EC2 实例和 AD 管理工具的更多信息,请参见 安装 Active Directory 管理工具。一台配置为加入 AWS Managed Microsoft AD 的 RDS for SQL Server 实例,以实现 Windows 认证的用户身份验证。这包括为 Linux 客户端启用 Kerberos 认证。有关 RDS 域连接的更多信息,请参见 与 RDS for SQL Server 一起使用 AWS Managed Active Directory。一台 Linux EC2 实例用于演示如何针对 RDS for SQL Server 实例执行 Kerberos 认证。安装了 Microsoft 提供的 SQL Server 客户端工具 sqlcmd 及其必要的包,例如 unixODBC。此外,还安装了 krb5user 包,提供客户工具如 kinit以便进行 Kerberos 认证。Linux 实例不需要加入 AWS Managed Microsoft AD,使用来自包 krb5user 的客户端工具即可满足要求。Linux 中的 SQL 客户端工具,即 sqlcmd,初始化并执行与 RDS for SQL Server 实例的 Kerberos 认证:开始时必须有可用的 Kerberos 门票授权票据 (TGT)。通过使用 kinit,可以通过提供 AD 域用户名和密码从 KDC 获取 TGT。sqlcmd 使用缓存的 TGT 请求来自 KDC 的 Kerberos 服务票据。在 sqlcmd 从 KDC 获取 Kerberos 服务票据后,它会针对 RDS for SQL Server 实例执行 Kerberos 服务认证。

在接下来的部分中,我们将详细说明实施解决方案的步骤:

使用 AWS CloudFormation 部署所需的 AWS 组件。在 Windows EC2 实例上创建 AD 域用户。在 Linux EC2 实例上安装所需的包并配置 /etc/krb5conf 文件。在 Amazon RDS for SQL Server 中设置示例数据库,创建数据库表并配置 Windows 登录。使用 kinit 检索 dbuser1 的 Kerberos TGT。使用 sqlcmd 对 dbuser1 执行 Kerberos 认证。使用 sqlcmd 对 dbuser2 执行 Kerberos 认证。使用 JDBC 执行 Kerberos 认证。使用 keytab 自动检索 Kerberos TGT。

先决条件

要实施本文中的解决方案,您需要满足以下先决条件:

在 AWS 数据库博客中配置 Linux 客户端的 Kerberos 认证,以用于 Amazon R一个具备充分权限的 AWS 账户及 AWS 身份和访问管理IAM用户,以便部署解决方案所需的 AWS 资源。有足够的权限使用 Session Manager,这是 AWS Systems Manager 的一项功能,用于在 Windows EC2 实例PowerShell和 Linux EC2 实例bash上运行必要命令的会话。有关通过 Systems Manager 控制台启动会话的详细说明,请参见 启动会话。

使用 AWS CloudFormation 部署所需的 AWS 组件

要部署 CloudFormation 模板,请按照以下步骤进行:

选择Launch Stack

在Stack name中使用默认值 rdssqlserverkerberoslinux。

在Parameters部分使用默认值。在Capabilities部分,选择我确认 AWS CloudFormation 可以使用自定义名称创建 IAM 资源,并完成堆栈的创建。

CloudFormation 模板大约需要 45 分钟来完成,并提供以下资源:

两个 AWS Secrets Manager 密钥:rdsktest/ad 使用 {passwordlt动态生成gt} 作为密钥值,其中包含 AD 域管理员用户的密码 rdsktestawsexampleorg。rdsktest/rds 使用 {usernameadminpasswordlt动态生成gt} 作为密钥值,其中包含 RDS 实例主用户的用户名和密码 rdsinstance1。一个具有以下属性的 AWS Managed Microsoft AD 资源:DNS 名 rdsktestawsexampleorgNetBIOS 名 RDSKTESTDNS 地址 在分配的子网内使用两个 DNS 服务器的两个 IP在 CloudFormation 模板输出中显示 MicrosoftAdDnsIpAddresses。一个名为 rdsinstance1 的 RDS DB 实例。对于该目录,使用 rdsktestawsexampleorg 的目录 ID。一台名为 rdsktestwin 的 Windows EC2 实例Windows 2019。该实例将加入域 rdsktestawsexampleorg,并将安装 AD 管理工具以创建 AD 域用户进行 Kerberos 认证测试。一台名为 rdsktestlinux 的 Linux EC2 实例Ubuntu 20。该实例将安装 sqlcmd,以演示针对 Amazon RDS for SQL Server 的 Kerberos 认证。

在 Windows EC2 实例上创建 AD 域用户

在此步骤中,我们在 Windows EC2 实例 rdsktestwin 上创建两个 AD 域用户 dbuser1 和 dbuser2。完成以下步骤:

在 Amazon EC2 控制台中找到并选择 rdsktestwin 实例。选择连接并选择会话管理器以启动 rdsktestwin 的会话。逐行运行以下 PowerShell 命令: powershell InvokeWebRequest UseBasicParsing Uri https//awsblogsartifactspublics3amazonawscom/artifacts/DBBLOG3532/2createadusersps1 Outfile 2createadusersps1 2createadusersps1

该命令将创建两个 AD 域用户 dbuser1 和 dbuser2。PowerShell 脚本会提示您输入 dbuser1 和 dbuser2 的 AD 域用户密码。请验证您输入的密码符合 AD 的默认复杂性要求,包括至少一个大写字母、一个小写字母、一个数字,以及最小长度为 7 个字符。

这些命令的作用如下:

打印 Windows 实例的 AD 域信息从 Secrets Manager 中获取 AD 域用户 Admin 的密码,并构造一个 PowerShell PSCredential 对象使用 PowerShell PSCredential 对象创建两个 AD 域用户dbuser1 和 dbuser2使用 PowerShell PSCredential 对象列出这两个 AD 域用户

由于会话管理器会话是以本地用户 ssmuser 开始的,而该用户无法创建 AD 域用户,因此我们明确构造了 PSCredential 对象以便用于后续命令,这对于创建 AD 域用户是必要的。

在 Linux EC2 实例上安装所需包并配置 /etc/krb5conf

在此步骤中,我们将在 Linux EC2 实例 rdsktestlinux 上安装 krb5user 和 sqlcmd 包。我们还需配置 /etc/krb5conf 文件,这是启用 Kerberos 认证所必需的。完成以下步骤:

启动 rdsktestlinux 的会话管理器会话。

默认情况下,Linux 的会话管理器会使用 sh shell。建议使用 bash shell,并切换到用户的家目录,例如 /home/ssmuser。可以通过配置会话管理器的自定义 shell 配置或在 rdsktestlinux 每次会话开始时手动运行以下命令来实现:

sh bash cd

在会话管理器会话期间,在 bash shell 中逐行运行以下命令:

sh wget O 3installkrb5sqlcmdsh https//awsblogsartifactspublics3amazonawscom/artifacts/DBBLOG3532/3installkrb5sqlcmdsh chmod 755 3installkrb5sqlcmdsh /3installkrb5sqlcmdsh

前面的命令执行了以下操作:

打印 Linux 实例配置的 DNS 服务器,应该指向 AWS Managed Microsoft AD。安装 krb5user 包,默认配置文件位于 /etc/krb5conf。下载示例文件 krb5confsample 并覆盖 /etc/krb5conf 文件。该示例 /etc/krb5conf 文件将引用 rdsktestawsexampleorg 作为 KDC。

安装 sqlcmd 工具,安装 mssqltools18 包及其依赖包 unixodbcdev。

验证 sqlcmd 的安装以及 /etc/krb5conf 内容使用以下命令:

sh sqlcmd grep A 1 B 1 Version cat /etc/krb5conf

输出应如下所示:

Microsoft (R) SQL Server Command Line ToolVersion 18200011 Linux[libdefaults] defaultrealm = RDSKTESTAWSEXAMPLEORG[realms] RDSKTESTAWSEXAMPLEORG = { kdc = rdsktestawsexampleorg adminserver = rdsktestawsexampleorg }[domainrealm] rdsktestawsexampleorg = RDSKTESTAWSEXAMPLEORG rdsktestawsexampleorg = RDSKTESTAWSEXAMPLEORG

设置示例数据库,创建数据库表,配置 Amazon RDS for SQL Server 中的 Windows 登录

为了完成设置,请在 rdsktestlinux 实例的 bash shell 中逐行输入以下命令:

shwget O 4createdblogintablesh https//awsblogsartifactspublics3amazonawscom/artifacts/DBBLOG3532/4createdblogintableshchmod 755 4createdblogintablesh/4createdblogintablesh

这些命令执行了以下操作:

从 Secrets Manager 获取 RDS for SQL Server 实例的主用户名和密码。下载 SQL 文件 4createdblogintablesql。该 SQL 文件创建数据库、数据库表及 Windows 登录。使用 sqlcmd 和 Amazon RDS 主用户名和密码运行 SQL 文件。

总的来说,将创建以下数据库资源:

一个名为 testdb1 的数据库。一个名为 dbotesttable1 的数据库表。这是一个用于演示 Kerberos 认证的示例数据库表,并插入了三行示例数据。Windows 登录 RDSKTESTdbuser1,映射到 AD 域用户 dbuser1。