为 OTN 撰稿
为 Oracle 技术网撰写技术文章,获得报酬的同时可提升技术技能。
了解更多信息
密切关注
OTN 架构师社区
OTN ArchBeat 博客 Facebook Twitter YouTube 随身播图标

Oracle Identity Manager AD 连接器企业级部署考虑事项

作者:Firdaus Fraz

搭建 Oracle Identity Manger Active Directory 连接器企业部署环境的最佳实践

2013 年 10 月

下载
download-icon13-1Oracle Identity Manager

许多 Oracle Identity Manager (OIM) 客户部署了 Active Directory (AD) 连接器,在生产环境中可能面临功能和性能问题。本文针对如何搭建 OIM AD 连接器企业部署环境提供了最佳实践建议。

AD 部署拓扑
 

本文假定您对 AD 部署拓扑(包括域、树、森林等概念)有基本的了解,详细解释见:http://technet.microsoft.com/en-us/library/bb727030.aspx

一个企业可能有一个森林,该森林中有一个或多个域。森林中的域可以组织成一个层次结构,作为树的一部分。也可以将它们配置成对等域,一个域作为根域。在更复杂的情况中,根据需求,这个森林中可以有多个域树。

森林中的所有域通过一个双向的传递信任进行连接。如果森林中有多个树,它们通过一个森林根域进行连接,共享一个信任关系。

一些组织选择拥有多个森林,这取决于资源访问需求或组织内不同部门单独管理模式的需求。

本文采用一个森林来考虑 AD 拓扑,其中包含一个树和对等域拓扑。

OIM-AD 集成
 

了解 OIM 用来与 AD 集成的架构和集成技术,对于用户帐户创建、组分配以及 OIM AD 连接器支持的所有其他操作类型也很重要。

有关连接器架构的详细信息,请参见 OIM AD 连接器指南: http://docs.oracle.com/cd/E22999_01/doc.111/e20347/intro.htm#CEGFFIJH

了解以下技术概念将帮助您更好地理解连接器架构:

  • Microsoft 的 .NET 软件架构基于 Microsoft Windows 运行。它包括一个类库,可为 .NET 框架中运行的应用程序提供常用功能,还包括一个公共语言运行时 (CLR),在其中执行针对 .NET 框架开发的程序。
  • 公共对象模型 (COM) 架构构建可扩展的、基于组件的软件。
  • ADSI(Active Directory 服务接口)是 Microsoft Windows 的内置组件。因为 ADSI 将目录中存储的对象作为 COM 对象公开,所以可以使用一个或多个 COM 接口上提供的方法访问和操作对象。
  • ADSI 随各种提供程序提供,可访问各种类型的目录。其中,可以使用轻型目录访问协议 (LDAP) 提供程序访问所有支持 LDAP v3 的目录。

OIM Active Directory 连接器包是用 ADSI API 构建的,使用 ADSI LDAP 提供程序访问 AD 对象并对其执行操作。由于 OIM AD 连接器基于 ADSI 和 .NET,所以需要在 Microsoft .NET 框架环境上运行。由于 Microsoft .NET 框架要求代码作为应用程序运行,所以默认情况下 OIM AD 连接器作为一个 .NET 框架应用程序随 OOTB .NET 连接器服务器一起提供。OIM AD 连接器包部署在 .NET 连接器服务器上。.NET 连接器服务器必须安装在 Windows 计算机上,可以是组织 AD 森林中任何域中的任何计算机。

OIM 通过网络与 .NET 连接器服务器通信。.NET 连接器服务器作为代理,提供到 .NET 连接器服务器中部署的当前版本连接器的任何经过身份验证的应用程序访问。

连接器包使用 ADSI 访问 Microsoft AD 对象并在 AD 上执行读/写操作。

利用该架构,OIM 能够远程执行连接器。

OIM AD 连接器包
 

连接器实例池和故障切换(到 AD 域控制器的连接)
 

新的 OIM 连接器使用 Identity Connector Framework (ICF) 开发连接器。ICF 解除了 OIM 与所连接的目标应用程序之间的依赖性。连接器包包含目标系统操作特定的逻辑。所有 OIM 相关的代码/ICF 框架代码都是 OIM 的 ICF 集成层的一部分。

ICF 集成层提供连接池功能。OIM 现成的和定制的连接器可以通过在连接器部署期间实现 PoolableConnector 接口利用此特性。

如果已经开发了实现 Connector 接口而非 PoolableConnector 接口的连接器,则 ICF 集成层针对每个供应/协调操作创建一个新的连接器实例,建立与目标之间的新连接并完成操作,然后删除与目标系统的连接并释放该连接器实例。

最新的 AD 连接器实现 PoolableConnector ICF 服务提供程序接口。

ICF 集成层位于每个域的连接器实例池(一个部署中 OIM 管理的 AD 域,假定每个域有一个单独的 OIM 连接器配置)。基本上,连接器实例池针对 OIM 中部署的每个连接器一个连接器配置(IT 资源、连接器配置查找)。例如,如果 OIM 管理一个包含 5 个域的 AD 森林,我们要使用 OIM 中的 5 个应用程序实例管理这 5 个 AD 域,那么我们将在 OIM 中用针对每个域的连接信息使用单独的 IT 资源。在这种情况下,由于每个域使用的 IT 资源不同,所以为每个 IT 资源(即每个 AD 域)创建一个连接器池。

调用第一个连接器操作时,创建初始连接器实例池。

PoolableConnector(和 Connector)接口的 initdisposecheckAlive 方法用于创建、释放和验证目标系统连接。创建连接器实例时将调用 init 方法,将实现目标系统连接。处理连接器实例时将调用“dispose”方法。通过配置辅助(备份)域控制器主机名或使用 AD 无服务器绑定,可实现 AD 连接故障切换。下面介绍如何通过 OIM IT 资源实现 AD 应用程序实例的配置:

  • OIM 中针对 AD 域中 AD 对象上的每个操作请求,将从连接器池中选择一个连接器实例。调用连接器操作之前,将调用“CheckAlive”方法验证目标系统连接的有效性。一旦操作完成,连接器实例将返回池中。
  • 当连接池用尽时,将创建新的连接器实例,仍然是先连接到主域连接器 (DC),如果到主 DC 的连接失败,则连接到辅助 DC。

AD 连接故障切换机制
 

配置辅助 DC 主机名:

您可以用 OIM“IT 资源”形式(参数名为 BDCHostNames)为 AD 应用程序实例配置备份 DC 主机名(可以用分号分隔的列表提供多个主机名)。

默认情况下,将建立到主 DC 的连接(IT 资源参数名 LDAPHostname)。如果到主 DC 的连接失败,将创建到辅助(备份)DC 的连接;辅助 DC 列表的顺序参照 IT 资源中作为分号分隔的值的顺序,直至成功建立连接)。

配置 AD 无服务器绑定:

在 AD 应用程序实例的 OIM IT 资源中,如果未在安装 AD 的 Windows 计算机上指定主机名(IT 资源参数名 LDAPHostname)或备份 DC 主机名(IT 资源参数名 BDCHostNames),AD 连接器将使用与 AD 的无服务器绑定。通过 ADSI 代码实现与 AD 的无服务器绑定尝试连接 AD 域,无需连接到任何特定的 DC。这样,可以与域中任何可用的 DC 自动建立连接。

要在协调期间从 AD 配合无服务器绑定,请勿配置以下 IT 资源参数:SyncDomainControllerSyncGlobalCatalog

SyncDomainController:针对特定的域控制器执行协调时使用此参数。

SyncGlobalCatalog:针对全局目录服务器执行协调时使用此参数。

注:配置参数名称已经提及最新的可用 OIM AD 连接器(截至 2013 年 8 月)。

强化
 

通过使用 ADSI 和 .NET 框架的内部机制,.NET Connector Server 和 Microsoft AD 之间默认的通信是“安全的”。然而,如果您要将 Microsoft AD LDS 用作目标系统,必须在 OIM 和目标系统之间配置 SSL。

请参见连接器指南,了解在 OIM 和连接器服务器之间配置 SSL 以及在连接器服务器和 Microsoft AD LDS 之间配置 SSL 的步骤: http://docs.oracle.com/cd/E22999_01/doc.111/e20347/deploy.htm#autoId28

 

性能
 

请参见 OIM 性能调优指南(Oracle Identity Manager (OIM) 性能调优指南和诊断信息收集(文档 ID 1539554.1))以及 Oracle Support 门户中提供的连接器性能调优指南。

您还必须考虑以下问题:

  • 如果您使用的是 9x 版本的连接器,请考虑升级至 11g 版本。基于 ICF 的 AD 连接器改进了性能。
  • 确保针对 OIM 中的 AD 连接器的协调和供应配置中仅定义了必需的属性,没有额外的属性。
  • 使用 OIM 协调批处理。

负载平衡和故障切换 [OIM —> 连接器服务器]
 

我们在前面讨论过,连接器服务器可位于我们要通过 OIM 管理的森林中任何 AD 域的任何 Windows 计算机上。一台连接器服务器可以为整个 AD 森林提供服务。

采用两台或更多的连接器服务器的负载平衡器可实现负载平衡和故障切换。可以使用循环算法或负载平衡器支持的任何其他算法实现负载平衡。

企业级 AD 部署
 

现在,我们要讨论针对 AD 域拓扑(包含一个域树以及对等域)的 OIM AD 集成。图 1 显示了包含一个域树的 AD 森林。此处的域具有父子关系。

fraz-oim-ad-fig01.png
图 1:包含一个域树的 AD 森林

图 2 描绘了一个对等域拓扑:

fraz-oim-ad-fig02.png
图 2:包含对等域的 AD 森林

对于域树拓扑,OIM 中一个应用程序示例配置可以管理树中的所有域。可以通过连接到父域对所有子域进行供应。

必须配置 OIM AD 连接器,使其对全局目录服务器执行协调:

  • 在 AD 配置查找定义 Lookup.Configuration.ActiveDirectory 中,将 SearchChildDomain 设置为值“yes”。
  • 将全局目录服务器主机名作为 SyncGlobalCatalog IT 资源参数的值提供。

采用上述配置,OIM 将从全局目录同步 AD 森林数据。使用全局目录服务器的好处是,每个 DC 中的“USNChanged”属性都是该 DC 特有的;因此,OIM 通过连接到全局目录可以获得最新的改动,无论是包含针对哪个属性的最新改动的 DC。OIM 将连接全局目录,同步最新的属性改动,它将通过全局目录从各 DC 读取相关数据。

对于对等域拓扑,每个域将有一个单独的 AI 配置。下面的架构图显示了 OIM AD 连接器生产部署的示例架构。

fraz-oim-ad-fig03.png
图 3:OIM AD 连接器的生产部署

在上述架构中,一个集中的连接器服务器为 AD 森林中的所有域提供服务。采用两台或更多的连接器服务器的负载平衡器可用于提供连接器服务器组件的负载平衡和故障切换。我们在前面讨论过,连接器服务器是部署了 OIM AD 连接器包的 .NET 应用程序。下面介绍了该架构的技术流和功能:

在 OIM 中,我们将通过一个单独的 IT 资源(每个域一个)捕获每个域的连接详细信息。一个域的 IT 资源还会定义辅助 DC 主机名(逗号分隔)来提供故障切换。当无法建立到一个域的主 DC 的连接时,如果 IT 资源中同样配置了辅助 DC 主机名,连接器服务器将自动连接到辅助 DC。

除了每个域的 IT 资源,OIM 将有一个 IT 资源用于连接到负载平衡器。负载平衡器将采取循环的方式(或者负载平衡器支持的任何其他算法)将请求路由至其后的一台连接器服务器。

为了从 OIM 供应到 AD 中,通信流将:

  1. 从 OIM 到负载平衡器
  2. 负载平衡器到连接器服务器
  3. 连接器服务器到 AD 连接器包(部署在连接器服务器中;一台连接器服务器中可以部署连接器包的多个版本)
  4. AD 连接器包到 AD 对象

可以配置 OIM AD 连接器,根据全局目录服务器进行同步或者从特定域进行同步。

对等域拓扑的单应用程序示例模型
 

在某些业务案例中,首选单应用程序实例模型。如果是这样,考虑以下方式:

  • 让 OIM 连接到其中一个 AD 对等域。AD 管理员用户必须配置了相应的权限,能够在 AD 森林中的其他对等域中执行创建/修改。
  • 同步有点儿棘手,因为 IT 资源具有单个域(不是父域)的连接详细信息。
  • 虽然没有直接的配置可以通过一个应用程序实例模型实现所有域的同步,但可以通过其他一些配置实现:
    • 每个对等域都可能有新的调度任务,这些任务能够更新 IT 资源参数(域详细信息以及主/辅助 DC 主机详细信息)使其指向相应的域,然后更新现成的 OIM AD 连接器调度任务。

(注:具体方法取决于业务用例,可能实现,也可能无法实现。上面详细介绍的方法仅用于提供一种可能的选择思路。详情需待进一步测试。)

关于作者

Firdaus Fraz 是 Oracle 融合中间件身份管理 A 团队的首席解决方案架构师。在这一职位上,她与全球范围的 IDM 客户和合作伙伴合作,就实施最佳实践、架构、用例设计和故障排除提供指导。
博客 LinkedIn