本页面介绍了 PostgreSQL 如何使用通用安全服务应用编程接口 (GSSAPI) 在 AlloyDB Omni 中与 Active Directory 集成,并介绍了关键的 Kerberos 概念。KerberosKerberos 是为 Active Directory 提供支持的身份验证协议。
Active Directory 是 Microsoft 为 Windows 网域网络开发的目录服务。Active Directory 是一种集中式标准化系统,可自动执行用户数据、安全性和分布式资源的网络管理。此目录服务为用户账号、群组和其他网络对象提供了一个统一的管理点。Active Directory 的一项关键功能是身份验证,用于确认用户的身份和授权,并授予用户访问网络上特定资源的权限。
Active Directory 组件
领域是 Kerberos 身份验证的管理网域。在 Active Directory 的上下文中,领域等同于 Active Directory 网域。领域表示共享通用身份验证数据库的用户、计算机和服务组成的逻辑群组。配置 Kerberos 时,您必须指定客户端和服务所属的领域。领域是域名的大写版本,例如,如果网域为 ad.example.com
,则领域为 AD.EXAMPLE.COM
。
密钥分发中心 (KDC) 是一项核心 Kerberos 服务,可在 Active Directory 中的每个域控制器上运行。KDC 具有以下主要功能:
- 身份验证服务 (AS):在初始登录时(例如,当您登录 Windows 时)验证用户身份,并签发票证授予票证 (TGT)。
- 票证授予服务 (TGS):向提供有效 TGT 的已通过身份验证的用户签发服务票证。这些服务票证授予对特定服务(例如 PostgreSQL 数据库)的访问权限。
主账号是 Kerberos 领域中的唯一身份,可向其分配票证。以下是主账号的主要类型:
- 用户主账号:代表人类用户,例如
username@REALM
。 - 服务主账号 (SPN):表示特定主机上的特定服务,例如
postgres/db-server.ad.example.com@REALM
。如果客户端要为您的数据库请求服务票证,数据库服务必须具有已注册的 SPN。
keytab 或密钥表文件包含主账号及其相应密钥的列表,这些密钥是从主账号的密码派生出来的。服务使用 keytab 文件向 KDC 证明自己的身份,并解密客户端提供的服务票证。
此方法允许 PostgreSQL 等服务向 Kerberos 系统进行身份验证,而无需人工互动或在服务器上存储纯文本密码。keytab 文件非常敏感,必须安全存储和保护。
将 PostgreSQL 与 Active Directory 集成
将 PostgreSQL 与 Active Directory 集成后,您可以基于公司身份集中管理用户,从而提高数据库安全性。
为了支持身份验证,PostgreSQL 提供了以下与 Active Directory 集成的方法:
轻量级目录访问协议 (LDAP):您可以配置 PostgreSQL,以使用 LDAP 协议针对 Active Directory 服务器对用户进行身份验证。当用户尝试连接到数据库时,PostgreSQL 会通过 LDAP 与 Active Directory 服务器通信,以验证用户的凭证(通常是用户名和密码)。 此方法使用 Active Directory 作为外部身份验证提供方。
使用 Kerberos 的通用安全服务应用编程接口 (GSSAPI):这是一种更安全、更复杂的方法,使用 Kerberos 协议,而 Kerberos 协议是 Active Directory 中的默认身份验证机制。GSSAPI 为应用访问安全服务提供了一个标准接口。
虽然 LDAP 和 GSSAPI 都能实现 Active Directory 集成的目标,但是 GSSAPI 与 Kerberos 因其强大的基于票证的加密身份验证而成为企业环境更安全、更强大的方法。本页面介绍了如何使用 GSSAPI 方法为 AlloyDB Omni 实现 Active Directory 集成。
使用 GSSAPI 进行 Active Directory 身份验证
AlloyDB Omni 允许您使用 Active Directory 作为身份验证后端,通过 Kerberos 进行身份验证。下图显示了实现身份验证的步骤。
- 客户端
psql
使用密钥分发中心 (KDC) 中的身份验证服务 (AS) 发起身份验证请求。 - AS 对客户端进行身份验证,并向客户端颁发票证授予票证 (TGT) (T1)。然后,使用 TGT 请求服务票证。
- 客户端使用 TGT 向 KDC 中的票证授予服务 (TGS) 请求 PostgreSQL 服务的服务票证。客户端现在请求访问特定的 PostgreSQL 服务器。
- TGS 验证 TGT 并向客户端颁发服务票证 (T2)。此票证包含会话密钥 (T3),并使用 PostgreSQL 服务器的密钥进行加密。
- 客户端将加密的服务票证 (T2) 发送到 PostgreSQL 服务器。
- PostgreSQL 服务器使用其密钥(来自 keytab 文件)解密服务票证 (T2),然后检索会话密钥 (T3) 并验证票证的真实性。如果此操作成功,服务器会授予访问权限,并使用会话密钥与客户端建立安全通信渠道。
后续步骤
- 将 Active Directory 用户支持与 AlloyDB Omni 集成。
- 在 Kubernetes 上集成 Active Directory 用户支持。
- 将 Active Directory 群组支持与 AlloyDB Omni 集成。
- 在 Kubernetes 上集成 Active Directory 群组支持。
- 在 AlloyDB Omni 中排查 Active Directory 集成问题。