将 Kerberos 身份验证用于 RDS for Db2 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 Kerberos 身份验证用于 RDS for Db2

当用户连接到 Amazon RDS for Db2 数据库实例时,您可以使用 Kerberos 身份验证来验证用户的身份。您的数据库实例与 Amazon Directory Service for Microsoft Active Directory(Amazon Managed Microsoft AD)结合使用以启用 Kerberos 身份验证。当用户对加入到信任域的 RDS for Db2 数据库实例进行身份验证时,身份验证请求将转发至您使用 Amazon Directory Service 创建的目录。有关更多信息,请参阅《Amazon Directory Service 管理员指南》中的什么是 Amazon Directory Service?

首先,创建一个 Amazon Managed Microsoft AD 目录来存储用户凭证。然后,将您的 Amazon Managed Microsoft AD 目录中的域和其它信息添加到 RDS for Db2 数据库实例。当用户使用 RDS for Db2 数据库实例进行身份验证时,身份验证请求将转发到 Amazon Managed Microsoft AD 目录。

将所有凭证保存在同一目录中可以节省您的时间和精力。使用这种方法,您具有一个集中位置用于存储和管理多个数据库实例的凭证。使用目录还可以改善您的整体安全概要。

区域和版本可用性

特征可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关使用 Kerberos 身份验证的 RDS for Db2 的版本和区域可用性的更多信息,请参阅Kerberos 身份验证

注意

对于 RDS for Db2 数据库实例已弃用的数据库实例类,不支持 Kerberos 身份验证。有关更多信息,请参阅RDS for Db2 实例类

RDS for Db2 数据库实例的 Kerberos 身份验证概述

要为 RDS for Db2 数据库实例设置 Kerberos 身份验证,请完成以下一般步骤,稍后将详细介绍这些步骤:

  1. 使用 Amazon Managed Microsoft AD 创建 Amazon Managed Microsoft AD 目录。您可以使用 Amazon Web Services Management Console、 Amazon Command Line Interface(Amazon CLI)或 Amazon Directory Service 创建目录。有关更多信息,请参阅《Amazon Directory Service 管理指南》中的创建您的 Amazon Managed Microsoft AD 目录

  2. 创建使用托管式 IAM 策略 AmazonRDSDirectoryServiceAccess 的 Amazon Identity and Access Management(IAM)角色。此 IAM 角色允许 Amazon RDS 调用您的目录。

    为了让 IAM 角色允许访问,Amazon Security Token Service(Amazon STS)端点必须在您的 Amazon Web Services 账户的正确 Amazon Web Services 区域中激活。Amazon STS 端点默认为在所有 Amazon Web Services 区域中处于活动状态,您无需执行任何进一步操作即可使用它们。有关更多信息,请参阅《IAM 用户指南》中的在 Amazon Web Services 区域中激活和停用 Amazon STS

  3. 通过以下方法之一使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 创建或修改 RDS for Db2 数据库实例:

    您可以在与目录相同的 Amazon Virtual Private Cloud(VPC)中或在不同的 Amazon Web Services 账户或 VPC 中找到数据库实例。创建或修改 RDS for Db2 数据库实例时,请执行以下任务:

    • 请提供创建目录时生成的域标识符(d-* 标识符)。

    • 还要提供您创建的 IAM 角色的名称。

    • 验证数据库实例安全组可以从目录安全组接收入站流量。

  4. 配置 Db2 客户端,并验证对于以下端口,流量是否可以在客户端主机与 Amazon Directory Service 之间流动:

    • TCP/UDP 端口 53 – DNS

    • TCP 88 – Kerberos 身份验证

    • TCP 389 – LDAP

    • TCP 464 – Kerberos 身份验证

为 RDS for Db2 数据库实例设置 Kerberos 身份验证

您可以使用 Amazon Directory Service for Microsoft Active Directory(Amazon Managed Microsoft AD)为 RDS for Db2 数据库实例设置 Kerberos 身份验证。要设置 Kerberos 身份验证,请按照以下步骤操作:

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

Amazon Directory Service 在 Amazon Web Services 云 中创建完全托管式 Active Directory。在创建 Amazon Managed Microsoft AD 目录时,Amazon Directory Service 将创建两个域控制器和 DNS 服务器。目录服务器在 VPC 中的不同子网中创建。这种冗余有助于确保即使发生故障,目录仍可访问。

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

  • 在您的 VPC 中设置 Active Directory。

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

    重要

    请务必保存此密码。Amazon Directory Service 不会存储此密码并且它无法取回或重置。

  • 为目录控制器创建安全组。安全组必须允许与 RDS for Db2 数据库实例进行通信。

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

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

  • 创建、更新或删除用户。

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

  • 创建额外的 OU 和容器。

  • 委托授权。

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

  • 在 Amazon Directory Service 上对 Windows PowerShell 运行 Active Directory 和域名服务(DNS)模块。

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

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

  • 查看 DNS 事件日志。

  • 查看安全事件日志。

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

  2. 选择设置目录

  3. 选择 Amazon Managed Microsoft AD。Amazon Managed Microsoft AD 是当前唯一支持用于 Amazon RDS 的选项。

  4. 选择下一步

  5. 输入目录信息页面上,提供以下信息:

    • 版本 – 选择符合您要求的版本。

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

    • 目录 NetBIOS 名称 – 目录的可选短名称,例如 CORP

    • 目录描述 – 目录的可选描述。

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

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

      • 小写字母 (a–z)

      • 大写字母 (A–Z)

      • 数字 (0–9)

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

      • 确认密码 – 重新键入管理员密码。

        重要

        确保您保存该密码。Amazon Directory Service 不会存储该密码,也无法检索或重置该密码。

  6. 选择下一步

  7. 选择 VPC 和子网页面上,提供以下信息:

    • VPC – 为目录选择 VPC。您可以在该相同 VPC 或不同的 VPC 中创建 RDS for Db2 数据库实例。

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

  8. 选择下一步

  9. 检查目录信息。如果需要进行更改,请选择 Previous (上一步) 并作出更改。如果信息正确,请选择 Create directory (创建目录)

    
                        在 Amazon Directory Service 控制台中创建目录期间查看页面。

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

要查看有关您的目录的信息,请在目录 ID 下选择目录 ID。记下目录 ID 值。创建或修改 RDS for Db2 数据库实例时需要此值。


                Amazon Directory Service 控制台中具有目录 ID 的目录详细信息页。

步骤 2:为 Amazon RDS 创建 IAM 角色以访问 Amazon Directory Service

要使 Amazon RDS 为您调用 Amazon Directory Service,您的 Amazon Web Services 账户需要一个使用托管式 IAM policy AmazonRDSDirectoryServiceAccess 的 IAM 角色。该角色允许 Amazon RDS 调用 Amazon Directory Service。

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

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

注意

用于 RDS for Microsoft SQL Server 的 Windows 身份验证的 IAM 角色不能用于 RDS for Db2。

作为使用 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": "*" } ] }

步骤 3:创建和配置用户

您可以使用 Active Directory Users and Computers 工具创建用户。这是 Active Directory Domain Services 和 Active Directory Lightweight Directory Services 工具之一。有关更多信息,请参阅 Microsoft 文档中的将用户和计算机添加到 Active Directory 域。在这种情况下,用户是个人或其它实体,例如属于域的计算机,其身份在目录中维护。

要在 Amazon Directory Service 目录中创建用户,您必须连接到属于 Amazon Directory Service 目录成员的基于 Windows 的 Amazon EC2 实例。同时,您必须以具有创建用户权限的用户身份登录。有关更多信息,请参阅 Amazon Directory Service 管理指南中的创建用户

步骤 4:在 Amazon Managed Microsoft AD 中创建 RDS for Db2 管理员组

RDS for Db2 不支持对主用户或两个 Amazon RDS 保留用户 rdsdbrdsadmin 进行 Kerberos 身份验证。相反,您需要在 Amazon Managed Microsoft AD 中创建一个名为 masterdba 的新组。有关更多信息,请参阅 Microsoft 文档中的在 Active Directory 中创建组账户。您添加到该组的任何用户都将拥有主用户权限。

启用 Kerberos 身份验证后,主用户将失去 masterdba 角色。因此,除非您禁用 Kerberos 身份验证,否则主用户将无法访问实例本地用户组成员资格。要继续使用带密码登录的主用户,请在 Amazon Managed Microsoft AD 上创建一个与主用户同名的用户。然后,将该用户添加到组 masterdba 中。

步骤 5:创建或修改 RDS for Db2 数据库实例

创建或修改 RDS for Db2 数据库实例,以便与您的目录一起使用。您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 将数据库实例与目录关联。您可以通过下列方式之一来执行该操作:

只有 VPC 中的 RDS for Db2 数据库实例才支持 Kerberos 身份验证。数据库实例可以与目录在同一 VPC 中或在不同 VPC 中。数据库实例必须使用允许在目录的 VPC 中传入和传出的安全组,以便数据库实例可与目录通信。

在使用控制台创建、修改或还原数据库实例时,请选择数据库身份验证部分中的密码和 Kerberos 身份验证。然后选择浏览目录。选择目录或选择创建目录以使用 Directory Service。


                        选择 Kerberos 进行身份验证并确定要使用的目录。

使用 Amazon CLI 时,数据库实例需要以下参数才能使用您创建的目录:

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

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

以下示例修改数据库实例以使用目录。将示例中的以下占位符替换为您自己的值:

  • db_instance_name – RDS for Db2 数据库实例的名称。

  • directory_id – 您创建的 Amazon Directory Service for Microsoft Active Directory 目录的 ID。

  • role_name – 您创建的 IAM 角色的名称。

aws rds modify-db-instance --db-instance-identifier db_instance_name --domain d-directory_id --domain-iam-role-name role_name
重要

如果您修改数据库实例以启用 Kerberos 身份验证,请在进行更改之后重启数据库实例。

步骤 6:配置 Db2 客户端

配置 Db2 客户端
  1. 创建一个 /etc/krb5.conf 文件(或等效的文件)以指向域。

    注意

    对于 Windows 操作系统,请创建 C:\windows\krb5.ini 文件。

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

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

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

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

以下示例是 Amazon Managed Microsoft AD 的 /etc/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

在域中管理数据库实例

您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 来管理数据库实例及其与 Microsoft Active Directory 的关系。例如,您可以关联 Active Directory 以启用 Kerberos 身份验证。您也可以删除 Active Directory 的关联以禁用 Kerberos 身份验证。您也可以将由一个 Microsoft Active Directory 在外部进行身份验证的数据库实例移到另一个 Active Directory。

例如,使用 modify-db-instance CLI 命令,您可以执行以下操作:

  • 重新尝试为失败的成员资格启用 Kerberos 身份验证,方法是为 --domain 选项指定当前成员资格的目录 ID。

  • 通过为 --domain 选项指定 none 来禁用数据库实例的 Kerberos 身份验证。

  • 通过为 --domain 选项指定新域的域标识符,将数据库实例从一个域移动到另一个域。

了解域成员资格

在创建或修改数据库实例后,它将成为域的成员。您可以在控制台中查看域成员资格的状态,也可以通过运行 describe-db-instances 命令来查看。数据库实例的状态可以是以下状态之一:

  • kerberos-enabled – 数据库实例已启用 Kerberos 身份验证。

  • enabling-kerberos – Amazon 正在此数据库实例上启用 Kerberos 身份验证。

  • pending-enable-kerberos – 启用 Kerberos 身份验证正在此数据库实例上等待处理。

  • pending-maintenance-enable-kerberos – Amazon 将尝试在下一个计划的维护时段在数据库实例上启用 Kerberos 身份验证。

  • pending-disable-kerberos – 禁用 Kerberos 身份验证正在此数据库实例上等待处理。

  • pending-maintenance-disable-kerberos – Amazon 将尝试在下一个计划的维护时段在数据库实例上禁用 Kerberos 身份验证。

  • enable-kerberos-failed – 出现一个配置问题,导致 Amazon 无法在数据库实例上启用 Kerberos 身份验证。在重新发出命令以修改数据库实例之前纠正配置问题。

  • disabling-kerberos – Amazon 正在此数据库实例上禁用 Kerberos 身份验证。

启用 Kerberos 身份验证的请求可能因网络连接问题或不正确的 IAM 角色而失败。在某些情况下,在创建或修改数据库实例时,尝试启用 Kerberos 身份验证可能会失败。如果发生这种情况,请确保使用正确的 IAM 角色,然后修改数据库实例以加入域。

通过 Kerberos 身份验证连接到 RDS for Db2

通过 Kerberos 身份验证连接到 RDS for Db2
  1. 在命令提示符处,运行以下 命令。在以下示例中,将 username 替换为您的 Microsoft Active Directory 用户名。

    kinit username
  2. 如果 RDS for Db2 数据库实例使用可公开访问的 VPC,请将数据库实例端点的 IP 地址添加到 Amazon EC2 客户端上的 /etc/hosts 文件。以下示例获取 IP 地址,然后将其添加到 /etc/hosts 文件中。

    % dig +short Db2-endpoint.AWS-Region.rds.amazonaws.com ;; Truncated, retrying in TCP mode. ec2-34-210-197-118.AWS-Region.compute.amazonaws.com. 34.210.197.118 % echo "34.210.197.118 Db2-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
  3. 使用以下命令登录与 Active Directory 关联的 RDS for Db2 数据库实例。将 database_name 替换为 RDS for Db2 数据库的名称。

    db2 connect to database_name