Amazon Relational Database Service
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 Oracle 数据库实例设置 Kerberos 身份验证

使用 AWS Directory Service for Microsoft Active Directory(企业版)(也称为 AWS Managed Microsoft AD)为 Oracle 数据库实例设置 Kerberos 身份验证。要设置 Kerberos 身份验证,请完成以下步骤:

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

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

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

  • 在 VPC 中设置 Microsoft Active Directory。

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

    注意

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

  • 为目录控制器创建安全组。

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

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

  • 创建、更新或删除用户

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

  • 创建额外的 OU 和容器

  • 委托授权

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

  • 在 Active Directory Web 服务上运行 AD 和 DNS Windows PowerShell 模块

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

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

  • 查看 DNS 事件日志

  • 查看安全事件日志

使用 AWS Managed Microsoft AD 创建目录

  1. AWS Directory Service 控制台导航窗格中,选择 Directories,然后选择 Set up directory

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

  3. 选择 Next

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

    版本

    选择符合您要求的版本。

    目录 DNS 名称

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

    注意

    AWS Managed Microsoft AD 的完全限定域名长度不能超过 61 个字符。

    目录 NetBIOS 名称

    可选的目录短名称,如 CORP

    目录描述

    目录的可选描述。

    管理员密码

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

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

    • 小写字母 (a–z)

    • 大写字母 (A–Z)

    • 数字 (0–9)

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

    确认密码

    重新键入管理员密码。

  5. 选择 Next

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

    VPC

    为目录选择 VPC。Oracle 数据库实例可在这个相同 VPC 中或在不同 VPC 中创建。

    子网

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

  7. 选择 Next

  8. 检查目录信息。如果需要进行更改,请选择 Previous 并作出更改。如果信息正确,请选择创建目录

    
							“目录详细信息”页面

目录创建需要几分钟时间。创建成功后,Status 值将更改为 Active

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


					“详细信息”页的图形

步骤 2:创建林信任

如果您打算仅使用 AWS 托管 Microsoft AD,请转到步骤 3:创建 IAM 角色以供 Amazon RDS 使用

要使用本地或自托管 Microsoft Active Directory 进行 Kerberos 身份验证,请创建双向林信任。有关使用 AWS Directory Service 设置林信任的更多信息,请参阅 AWS Directory Service 管理指南 中的何时创建信任关系

步骤 3:创建 IAM 角色以供 Amazon RDS 使用

您必须创建使用托管 IAM 策略 AmazonRDSDirectoryServiceAccess 的 IAM 角色。此角色允许 Amazon RDS 为您调用 AWS Directory Service。创建角色时,选择 Directory Service,然后为它附上 AWS 托管策略 AmazonRDSDirectoryServiceAccess

有关为服务创建 IAM 角色的更多信息,请参阅创建向 AWS 服务委托权限的角色

或者,您可以创建具有所需权限的角色,而不是使用托管 IAM 策略 AmazonRDSDirectoryServiceAccess。在这种情况下,角色必须具有以下 IAM 信任策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect:" "Allow" "Principal": { "Service": [ "rds.amazonaws.com", "directoryservice.rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

角色还必须具有以下 IAM 角色策略。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }

步骤 4:创建和配置用户

您可使用 Active Directory 用户和计算机工具(Active Directory 域服务和 Active Directory 轻型目录服务工具之一)创建用户。在这种情况下,用户表示有权访问您的目录的独立个人或实体。

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

步骤 5:配置 VPC 对等连接

如果您打算将目录和数据库实例放在不同的 VPC 中,请按照此步骤中说明配置 VPC 对等连接。如果您打算将目录和数据库实例放在同一 VPC 中,请跳过该步骤,然后转到步骤 6:创建或修改 Oracle 数据库实例

如果同一 AWS 账户拥有两个 VPC,请按照什么是 VPC 对等连接?中的说明操作。确切地说,请完成以下步骤:

  1. 设置适合的 VPC 路由规则,以便确保网络流量可以双向流动。

  2. 确保数据库实例的安全组可以从这个安全组接收入口流量。

  3. 确保没有任何网络访问控制列表 (ACL) 规则会阻止流量。

如果不同 AWS 账户拥有 VPC,请完成以下步骤:

  1. 按照 Amazon Virtual Private Cloud VPC 对等连接中的什么是 VPC 对等连接?中的说明配置 VPC 对等连接。确切地说,请完成以下步骤:

    1. 设置适合的 VPC 路由规则,以便确保网络流量可以双向流动。

    2. 确保没有任何 ACL 规则会阻止流量。

  2. 按照 AWS Directory Service 管理指南中的教程:共享 AWS 托管 Microsoft AD 目录以实现无缝 EC2 域加入中的说明开始与将要在其中创建数据库实例的 AWS 账户共享目录。

  3. 使用数据库实例的账户登录到 AWS Directory Service 控制台,并确保在处理之前域具有 SHARED 状态。

  4. 使用数据库实例的账户登录到 AWS Directory Service 控制台时,记下目录的 Directory ID 值。

步骤 6:创建或修改 Oracle 数据库实例

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

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

使用控制台时,选择 Database authentication 部分的 Password and Kerberos authentication。选择目录或选择 Create a new Directory

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

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

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

例如,以下 CLI 命令会修改数据库实例以使用目录。

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --domain d-ID \ --domain-iam-role-name role-name

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --domain d-ID ^ --domain-iam-role-name role-name

重要

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

步骤 7:创建 Kerberos 身份验证 Oracle 登录名

使用 Amazon RDS 主用户凭证连接到 Oracle 数据库实例,就像连接到任何其他数据库实例一样。数据库实例加入到 AWS Managed Microsoft AD 域。因此,您可以根据您的域中的 Microsoft Active Directory 用户和组预配置 Oracle 登录和用户。要管理数据库权限,可以授予和撤消这些登录的标准 Oracle 权限。

要允许 Microsoft Active Directory 用户向 Oracle 验证身份,请使用 Amazon RDS 主用户凭证。使用这些用户凭证连接到 Oracle 数据库实例,就像连接到任何其他数据库实例一样。登录之后,在 Oracle 中创建在外部验证身份的用户。

CREATE USER "KRBUSER@CORP.EXAMPLE.COM" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "KRBUSER@CORP.EXAMPLE.COM";

使用您的用户名和域名替换 KRBUSER@CORP.EXAMPLE.COM 。域中用户(人和应用程序)现在均可从联接域的客户端计算机使用 Kerberos 身份验证连接到 RDS Oracle 实例。

步骤 8:配置 Oracle 客户端

要配置 Oracle 客户端,请满足以下要求:

  • 创建一个 krb5.conf 文件(或等效的文件)以指向域。配置 Oracle 客户端以使用该 krb5.conf 文件。

  • 验证流量是否可以在端口 53 上通过 DNS 以及在 Kerberos 端口(用于托管 AWS Directory Service 的 88 和 464)上通过 TCP/UDP 在客户端主机和 AWS Directory Service 之间进行流动。

  • 验证流量是否可以通过数据库端口在客户端主机和数据库实例之间流动。

以下是 AWS 托管 Microsoft AD 的示例 krb5.conf 内容:

[libdefaults] default_realm = EXAMPLE.COM default_ccache_name = /tmp/kerbcache [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

以下是本地 Microsoft AD 的示例 krb5.conf 内容:

[libdefaults] default_realm = EXAMPLE.COM default_ccache_name = /tmp/kerbcache [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM

以下是 SQL*Plus 配置的示例 sqlnet.ora 内容:

SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5PRE,KERBEROS5) SQLNET.KERBEROS5_CONF=path_to_krb5.conf_file

有关 SQL Developer 配置示例,请参阅 Oracle 支持网站中的文档 1609359.1