

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon EMR 的 Kerberos 架构选项
<a name="emr-kerberos-options"></a>

在您将 Kerberos 与 Amazon EMR 结合使用时，可以从此部分中列出的架构进行选择。不论选择什么架构，您都使用相同步骤来配置 Kerberos。您需要创建安全配置，在创建集群时指定安全配置和兼容的集群特定 Kerberos 选项，并为集群上与 KDC 中集群委托人用户匹配的 Linux 用户创建 HDFS 目录。有关各个架构的配置选项及示例配置的说明，请参阅[在 Amazon EMR 上配置 Kerberos](emr-kerberos-configure.md)。

## 集群专用 KDC（主节点上的 KDC）
<a name="emr-kerberos-localkdc-summary"></a>

此配置在 Amazon EMR 版本 5.10.0 及更高版本中提供。

![\[Amazon EMR集群 architecture with master node, core nodes, and task node within a Kerberos realm.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/kerb-cluster-dedicated-kdc.png)


**优点**
+ Amazon EMR 具有 KDC 的完整所有权。
+ EMR 集群上的 KDC 独立于集中 KDC 实现，例如 Microsoft Active Directory 或 AWS Managed Microsoft AD。
+ 性能影响降到最低，因为 KDC 仅对集群中的本地节点管理身份验证。
+ （可选）其它使用 Kerberos 的集群可以引用 KDC 作为外部 KDC。有关更多信息，请参阅[外部 KDC：不同集群上的主节点](#emr-kerberos-extkdc-cluster-summary)。

**注意事项和限制**
+ 使用 Kerberos 的集群无法彼此进行身份验证，因此应用程序无法互操作。如果集群应用程序需要互操作，您必须在集群之间建立跨领域信任，或者将一个集群设置为另一个集群的外部 KDC。如果建立了跨领域信任，则 KDCs 必须具有不同的 Kerberos 领域。
+ 在主节点的 EC2 实例上，您必须创建与 KDC 用户主体相对应的 Linux 用户，以及各个用户的 HDFS 目录。
+ 用户委托人必须使用 EC2 私有密钥文件和 `kinit` 凭证以通过 SSH 连接到集群。

## 跨领域信任
<a name="emr-kerberos-crossrealm-summary"></a>

在此配置中，来自不同 Kerberos 领域的委托人（通产是用户）对使用 Kerberos 的 EMR 集群（具有自己的 KDC）上的应用程序组件进行身份验证。主节点上的 KDC 使用两个节点中都存在的*跨领域主体*与另一个 KDC 建立信任关系。 KDCs各个 KDC 中的委托人名称和密码完全匹配。跨领域信任在 Active Directory 实现中最常见，如下图所示。还支持与外部 MIT KDC 或其它 Amazon EMR 集群上的 KDC 的跨领域信任。

![\[Amazon EMR clusters in different Kerberos realms with cross-realm trust to Active Directory.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/kerb-cross-realm-trust.png)


**优点**
+ 安装 KDC 的 EMR 集群上维护对 KDC 的完整所有权。
+ 使用 Active Directory，Amazon EMR 自动创建与来自 KDC 的用户委托人相对应的 Linux 用户。您仍必须为每个用户创建 HDFS 目录。此外，Active Directory 域中的用户委托人可以使用 `kinit` 凭证，访问使用 Kerberos 的集群，而无需 EC2 私有密钥文件。这消除了在集群用户之间共享私有密钥文件的需求。
+ 由于各个集群 KDC 管理集群中节点的身份验证，将大量跨集群节点的网络延迟和处理开销的影响减到了最小。

**注意事项和限制**
+ 如果您使用 Active Directory 领域建立信任，则必须提供 Active Directory 用户名和密码，在您在创建集群时，该用户应有权将委托人加入域。
+ 无法在具有相同名称的 Kerberos 领域之间建立跨领域信任。
+ 跨领域信任必须明确建立。例如，如果集群 A 和集群 B 均与 KDC 建立了跨领域信任，则不会继承彼此的信任，并且其应用程序无法彼此进行身份验证来实现互操作。
+ KDCs 必须独立维护和协调，以便用户主体的凭据精确匹配。

## 外部 KDC
<a name="emr-kerberos-extkdc-summary"></a>

Amazon EMR 5.20.0 及更高版本支持具有外部 KDC 的配置。
+ [外部 KDC：麻省理工学院（MIT）KDC](#emr-kerberos-extkdc-mit-summary)
+ [外部 KDC：不同集群上的主节点](#emr-kerberos-extkdc-cluster-summary)
+ [外部 KDC：不同集群上的集群 KDC 具有 Active Directory 跨领域信任](#emr-kerberos-extkdc-ad-trust-summary)

### 外部 KDC：麻省理工学院（MIT）KDC
<a name="emr-kerberos-extkdc-mit-summary"></a>

此配置允许一个或多个 EMR 集群使用在 MIT KDC 服务器中定义和维护的委托人。

![\[Amazon EMR集群 architecture with Kerberos realm, showing master, core, and task nodes.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/kerb-external-kdc.png)


**优点**
+ 在单个 KDC 中，委托人的管理进行了整合。
+ 在同一个 Kerberos 领域中，多个集群可以使用相同的 KDC。有关更多信息，请参阅 [使用具有相同 KDC 的多个集群的要求](#emr-kerberos-multi-kdc)。
+ 使用 Kerberos 的集群上的主节点没有与维护 KDC 相关的性能负担。

**注意事项和限制**
+ 在各个使用 Kerberos 集群主节点的 EC2 实例上，您必须创建与 KDC 用户主体相对应的 Linux 用户，以及各个用户的 HDFS 目录。
+ 用户委托人必须使用 EC2 私有密钥文件和 `kinit` 凭证以通过 SSH 连接到使用 Kerberos 的集群。
+ 使用 Kerberos 的 EMR 集群中的每个节点都必须具有指向 KDC 的网络路由。
+ 使用 Kerberos 的集群中的每个节点对外部 DKC 都会施加身份验证负担，因此 KDC 的配置会影响集群性能。在您配置 KDC 服务器的硬件时，请考虑同时支持的最大 Amazon EMR 节点数。
+ 集群性能依赖于使用 Kerberos 的集群中节点与 KDC 之间的网络延迟。
+ 由于相互依赖关系，问题排查可能会更加困难。

### 外部 KDC：不同集群上的主节点
<a name="emr-kerberos-extkdc-cluster-summary"></a>

此配置几乎与上述外部 MIT KDC 实现相同，除了 KDC 位于 EMR 集群的主节点上之外。有关更多信息，请参阅[集群专用 KDC（主节点上的 KDC）](#emr-kerberos-localkdc-summary)和[教程：配置与 Active Directory 域的跨领域信任](emr-kerberos-cross-realm.md)。

![\[Diagram of Amazon EMR clusters with Kerberos realm, showing master and core nodes.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/kerb-external-cluster-kdc.png)


**优点**
+ 在单个 KDC 中，委托人的管理进行了整合。
+ 在同一个 Kerberos 领域中，多个集群可以使用相同的 KDC。有关更多信息，请参阅 [使用具有相同 KDC 的多个集群的要求](#emr-kerberos-multi-kdc)。

**注意事项和限制**
+ 在各个使用 Kerberos 集群主节点的 EC2 实例上，您必须创建与 KDC 用户主体相对应的 Linux 用户，以及各个用户的 HDFS 目录。
+ 用户委托人必须使用 EC2 私有密钥文件和 `kinit` 凭证以通过 SSH 连接到使用 Kerberos 的集群。
+ 各个 EMR 集群中的各个节点必须具有指向 KDC 的网络路由。
+ 使用 Kerberos 的集群中的每个 Amazon EMR 节点都会对外部 DKC 施加身份验证负担，因此 KDC 的配置会影响集群性能。在您配置 KDC 服务器的硬件时，请考虑同时支持的最大 Amazon EMR 节点数。
+ 集群性能依赖于集群中节点与 KDC 之间的网络延迟。
+ 由于相互依赖关系，问题排查可能会更加困难。

### 外部 KDC：不同集群上的集群 KDC 具有 Active Directory 跨领域信任
<a name="emr-kerberos-extkdc-ad-trust-summary"></a>

在此配置中，您首先要创建一个集群，该集群具有与 Active Directory 存在单向跨领域信任关系的集群专用 KDC。有关详细教程，请参阅 [教程：配置与 Active Directory 域的跨领域信任](emr-kerberos-cross-realm.md)。然后，您启动其它集群，引用具有作为外部 KDC 信任关系的集群 KDC。有关示例，请参阅[外部集群 KDC 与 Active Directory 跨领域信任](emr-kerberos-config-examples.md#emr-kerberos-example-extkdc-ad-trust)。这允许使用外部 KDC 的每个 Amazon EMR 集群对在 Microsoft Active Directory 域中定义和维护的委托人进行身份验证。

![\[Amazon EMR clusters with Kerberos authentication and Active Directory integration diagram.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/kerb-external-ad-trust-kdc.png)


**优点**
+ 在 Active Directory 域中，委托人的管理进行了整合。
+ Amazon EMR 加入 Active Directory 领域，这使您无需创建与 Active Directory 用户对应的 Linux 用户。您仍必须为每个用户创建 HDFS 目录。
+ 在同一个 Kerberos 领域中，多个集群可以使用相同的 KDC。有关更多信息，请参阅 [使用具有相同 KDC 的多个集群的要求](#emr-kerberos-multi-kdc)。
+ Active Directory 域中的用户委托人可以通过 `kinit` 凭证访问使用 Kerberos 的集群，而无需 EC2 私有密钥文件。这消除了在集群用户之间共享私有密钥文件的需求。
+ 只有一个 Amazon EMR 主节点承担维护 KDC 的负担，并且仅该集群必须通过 Active Directory 凭证创建以实现 KDC 与 Active Directory 之间的跨领域信任。

**注意事项和限制**
+ 每个 EMR 集群中的每个节点都必须具有指向 KDC 和 Active Directory 域控制器的网络路由。
+ 每个 Amazon EMR 节点都会对外部 DKC 施加身份验证负担，因此 KDC 的配置会影响集群性能。在您配置 KDC 服务器的硬件时，请考虑同时支持的最大 Amazon EMR 节点数。
+ 集群性能依赖于集群中节点与 KDC 服务器之间的网络延迟。
+ 由于相互依赖关系，问题排查可能会更加困难。

## 使用具有相同 KDC 的多个集群的要求
<a name="emr-kerberos-multi-kdc"></a>

在同一个 Kerberos 领域中，多个集群可以使用相同的 KDC。但是，如果集群同时运行，则如果集群使用的 Kerberos ServicePrincipal 名称存在冲突，则集群可能会失败。

如果您有多个具有相同外部 KDC 的并发集群，请确保这些集群使用不同的 Kerberos 领域。如果集群必须使用相同的 Kerberos 领域，请确保集群位于不同的子网中，并且它们的 CIDR 范围不重叠。