为 Amazon 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 创建目录
登录 Amazon Web Services Management Console,然后打开 Amazon Directory Service 控制台,网址为:https://console.aws.amazon.com/directoryservicev2/
。 -
选择设置目录。
-
选择 Amazon Managed Microsoft AD。Amazon Managed Microsoft AD 是当前唯一支持用于 Amazon RDS 的选项。
-
选择下一步。
-
在输入目录信息页面上,提供以下信息:
-
版本 – 选择符合您要求的版本。
-
目录 DNS 名称 – 目录的完全限定名称,例如
corp.example.com
。 -
目录 NetBIOS 名称 – 目录的可选短名称,例如
CORP
。 -
目录描述 – 目录的可选描述。
-
管理员密码 – 目录管理员的密码。目录创建过程将使用用户名
Admin
和此密码创建一个管理员账户。目录管理员密码不能包含单词“admin”。此密码区分大小写,且长度必须介于 8 – 64 个字符之间。至少,它还必须包含下列四种类别中三种类别的一个字符:
-
小写字母 (a–z)
-
大写字母 (A–Z)
-
数字 (0–9)
-
非字母数字字符 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
确认密码 – 重新键入管理员密码。
重要
确保您保存该密码。Amazon Directory Service 不会存储该密码,也无法检索或重置该密码。
-
-
-
选择下一步。
-
在选择 VPC 和子网页面上,提供以下信息:
-
VPC – 为目录选择 VPC。您可以在该相同 VPC 或不同的 VPC 中创建 RDS for Db2 数据库实例。
-
子网 – 为目录服务器选择子网。两个子网必须位于不同的可用区。
-
-
选择下一步。
-
检查目录信息。如果需要进行更改,请选择 Previous (上一步) 并作出更改。如果信息正确,请选择 Create directory (创建目录)。
目录创建需要几分钟时间。创建成功后,Status (状态) 值将更改为 Active (活动)。
要查看有关您的目录的信息,请在目录 ID 下选择目录 ID。记下目录 ID 值。创建或修改 RDS for Db2 数据库实例时需要此值。
步骤 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 保留用户 rdsdb
和 rdsadmin
进行 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 将数据库实例与目录关联。您可以通过下列方式之一来执行该操作:
-
使用控制台、create-db-instance 命令或 CreateDBInstance API 操作创建新的 RDS for Db2 数据库实例。有关说明,请参阅 创建 Amazon RDS 数据库实例。
-
使用控制台、modify-db-instance 命令或 ModifyDBInstance API 操作修改现有 RDS for Db2 数据库实例。有关说明,请参阅 修改 Amazon RDS 数据库实例。
-
使用控制台、restore-db-instance-from-db-snapshot 命令或 RestoreDBInstanceFromDBSnapshot API 操作从数据库快照还原 RDS for Db2 数据库实例。有关说明,请参阅 还原到数据库实例。
-
使用控制台、restore-db-instance-to-point-in-time 命令或 RestoreDBInstanceToPointInTime API 操作将 RDS for Db2 数据库实例还原到某个时间点。有关说明,请参阅 将 Amazon RDS 的数据库实例还原到指定时间。
只有 VPC 中的 RDS for Db2 数据库实例才支持 Kerberos 身份验证。数据库实例可以与目录在同一 VPC 中或在不同 VPC 中。数据库实例必须使用允许在目录的 VPC 中传入和传出的安全组,以便数据库实例可与目录通信。
在使用控制台创建、修改或还原数据库实例时,请选择数据库身份验证部分中的密码和 Kerberos 身份验证。然后选择浏览目录。选择目录或选择创建目录以使用 Directory Service。
使用 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-namerole_name
重要
如果您修改数据库实例以启用 Kerberos 身份验证,请在进行更改之后重启数据库实例。
步骤 6:配置 Db2 客户端
配置 Db2 客户端
-
创建一个 /etc/krb5.conf 文件(或等效的文件)以指向域。
注意
对于 Windows 操作系统,请创建 C:\windows\krb5.ini 文件。
-
验证流量是否可以在客户端主机和 Amazon Directory Service 之间流动。使用网络实用程序(如 Netcat)执行以下任务:
-
验证端口 53 上通过 DNS 的流量。
-
验证端口 53 上通过 TCP/UDP 的流量以及 Kerberos 的流量,包括用于 Amazon Directory Service 的端口 88 和 464。
-
-
验证流量是否可以通过数据库端口在客户端主机和数据库实例之间流动。您可以使用命令
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