

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

# 使用 Active Directory 或 LDAP 服务器通过 Amazon EMR 进行身份验证。
<a name="ldap"></a>

在 Amazon EMR 6.12.0 以及更高版本中，您可以使用基于 SSL 的 LDAP（LDAPS）协议来启动与您的企业身份服务器原生集成的集群。LDAP（轻量目录访问协议）是一种开放的、供应商中立的应用程序协议，用于访问和维护数据。LDAP 通常用于针对托管在 Active Directory（AD）和 OpenLDAP 等应用程序上的企业身份服务器进行用户身份验证。通过这种原生集成，您可以使用 LDAP 服务器对 Amazon EMR 上的用户进行身份验证。

Amazon EMR LDAP 集成的亮点包括：
+ Amazon EMR 将支持的应用程序配置为代表您使用 LDAP 身份验证进行身份验证。
+ Amazon EMR 使用 Kerberos 协议为支持的应用程序配置和维护其安全。您无需输入任何命令或脚本。
+ 通过 Apache Ranger 对 Hive 元存储数据库和表的授权，您可以获得精细访问控制 (FGAC)。请参阅[将 Amazon EMR 与 Apache Ranger 集成](emr-ranger.md)了解更多信息。
+ 当您要求 LDAP 凭证才能访问集群时，您可以获得对谁可以通过 SSH 访问您的 EMR 集群的精细访问控制（FGAC）。

以下页面提供了概念性概述、先决条件以及启动集成了 Amazon EMR LDAP 的 EMR 集群的步骤。

**Topics**
+ [

# 集成了 Amazon EMR 的 LDAP 概览
](ldap-overview.md)
+ [

# Amazon EMR 的 LDAP 组件
](ldap-components.md)
+ [

# 适用于 Amazon EMR 的 LDAP 的应用程序支持和注意事项
](ldap-considerations.md)
+ [

# 使用 LDAP 配置和启动 EMR 集群
](ldap-setup.md)
+ [

# 在 Amazon EMR 上使用 LDAP 的示例
](ldap-examples.md)

# 集成了 Amazon EMR 的 LDAP 概览
<a name="ldap-overview"></a>

轻型目录访问协议（LDAP）是一种软件协议，网络管理员使用该协议通过对公司网络中的用户进行身份验证来管理和控制对数据的访问。LDAP 协议将信息存储在分层的树形目录结构中。有关更多信息，请参阅 *LDAP.com* 上的 [Basic LDAP Concepts](https://ldap.com/basic-ldap-concepts/)。

在公司的网络中，许多应用程序可能会使用 LDAP 协议对用户进行身份验证。通过 Amazon EMR LDAP 集成，EMR 集群可以原生使用相同的 LDAP 协议并添加安全配置。

Amazon EMR 支持两种主要的 LDAP 协议实现：**Active Directory** 和 **OpenLDAP**。虽然其他实现也是可能的，但大多数实现都符合与 Active Directory 或 OpenLDAP 相同的身份验证协议。

## Active Directory（AD）
<a name="ldap-ad"></a>

Active Directory（AD）是 Microsoft 为 Windows 域网络提供的目录服务。AD 包含在大多数 Windows 服务器操作系统中，并且可以通过 LDAP 和 LDAPS 协议与客户端通信。为了进行身份验证，Amazon EMR 会尝试使用用户主体名称（UPN）作为可分辨名称和密码与您的 AD 实例进行用户绑定。UPN 使用标准格式 `username@domain_name`。

## OpenLDAP
<a name="ldap-openldap"></a>

OpenLDAP 是 LDAP 协议的免费开源实现。为了进行身份验证，Amazon EMR 会尝试使用完全限定域名（FQDN）作为可分辨名称和密码与您的 OpenLDAP 实例进行用户绑定。FQDN 使用标准格式 `username_attribute=username,LDAP_user_search_base`。通常，`username_attribute` 值为 `uid`，并且 `LDAP_user_search_base` 值包含指向用户的树的属性。例如 `ou=People,dc=example,dc=com`。

LDAP 协议的其他免费和开源实现通常遵循与 OpenLDAP 类似的 FQDN 来标识其用户的可分辨名称。

# Amazon EMR 的 LDAP 组件
<a name="ldap-components"></a>

您可以使用 LDAP 服务器通过以下组件对 Amazon EMR 以及用户直接在 EMR 集群上使用的任何应用程序进行身份验证。

**Secret Agent**  
*Secret Agent* 是一个集群上进程，用于对所有用户请求进行身份验证。Secret Agent 代表 EMR 集群上支持的应用程序创建与您的 LDAP 服务器的用户绑定。Secret Agent 以 `emrsecretagent` 用户身份运行，将日志写入 `/emr/secretagent/log` 目录。这些日志提供了有关每个用户的身份验证请求状态以及用户身份验证期间可能出现的任何错误的详细信息。

**系统安全服务进程守护程序（SSSD）**  
*SSSD* 是在支持 LDAP 的 EMR 集群的每个节点上运行的进程守护程序。SSSD 创建并管理 UNIX 用户，以将您的远程企业身份同步到每个节点。基于 Yarn 的应用程序（例如 Hive 和 Spark）要求在为用户运行查询的每个节点上都有一个本地 UNIX 用户。

# 适用于 Amazon EMR 的 LDAP 的应用程序支持和注意事项
<a name="ldap-considerations"></a>

本主题列出了支持的应用程序、支持的功能和不支持的功能。

## 适用于 Amazon EMR 的 LDAP 支持的应用程序
<a name="ldap-considerations-apps"></a>

**重要**  
此页面上列出的应用程序是 Amazon EMR 针对 LDAP 提供支持的唯一应用程序。为确保集群安全，只有在创建启用了 LDAP 的 EMR 集群时，才能包含与 LDAP 兼容的应用程序。如果您尝试安装其他不支持的应用程序，Amazon EMR 将拒绝您对新集群的请求。

Amazon EMR 6.12 及更高版本支持与以下应用程序的 LDAP 集成：
+ Apache Livy
+ Apache Hive 直到 HiveServer 2 () HS2
+ Trino
+ ：Presto
+ Hue

您还可以将以下应用程序安装在 EMR 集群上，并且进行配置以满足您的安全需求：
+ Apache Spark
+ Apache Hadoop

## 适用于 Amazon EMR 的 LDAP 支持的功能
<a name="ldap-considerations-features"></a>

您可以将以下 Amazon EMR 功能与 LDAP 集成结合使用：

**注意**  
为保障 LDAP 凭证的安全，您必须使用传输中加密来保护集群内外的数据流。有关传输中加密的更多信息，请参阅 [使用 Amazon EMR 加密静态数据和传输中数据](emr-data-encryption.md)。
+ 传输中加密（要求）和静态加密
+ 实例组、实例集和竞价型实例
+ 在运行中的集群上重新配置应用程序
+ EMRFS 服务器端加密（SSE）

## 不支持的功能
<a name="ldap-considerations-limitations"></a>

在使用 Amazon EMR LDAP 集成时，请考虑以下限制：
+ Amazon EMR 禁用启用了 LDAP 的集群的步骤。
+ 对于启用了 LDAP 的集群，Amazon EMR 不支持运行时角色和集 Amazon Lake Formation 成。
+ Amazon EMR 不支持带有 StartTLS 的 LDAP。
+ Amazon EMR 不支持启用了 LDAP 的集群的高可用性模式（具有多个主节点的集群）。
+ 您无法轮换启用了 LDAP 的集群的绑定凭证或证书。如果这些字段中的任何一个已轮换，我们建议您使用更新的绑定凭证或证书启动新集群。
+ 必须在 LDAP 中使用精确的搜索库。LDAP 用户和组搜索库不支持 LDAP 搜索筛选条件。

# 使用 LDAP 配置和启动 EMR 集群
<a name="ldap-setup"></a>

本节介绍如何将 Amazon EMR 配置为与 LDAP 身份验证配合使用。

**Topics**
+ [

# 向 Amazon EMR 实例 Amazon Secrets Manager 角色添加权限
](ldap-setup-asm.md)
+ [

# 创建用于 LDAP 集成的 Amazon EMR 安全配置
](ldap-setup-security.md)
+ [

# 启动通过 LDAP 进行身份验证的 EMR 集群
](ldap-setup-launch.md)

# 向 Amazon EMR 实例 Amazon Secrets Manager 角色添加权限
<a name="ldap-setup-asm"></a>

Amazon EMR 使用 IAM 服务角色代表您执行操作以预置和管理集群。集群 EC2 实例的服务角色（又称为 *Amazon EMR 的 EC2 实例配置文件*）是一种特殊类型的服务角色，在启动时由 Amazon EMR 分配给集群中的每个 EC2 实例。

为定义 EMR 集群与 Amazon S3 数据和其他 Amazon 服务交互的权限，您应该定义一个自定义 Amazon EC2 实例配置文件而不是 `EMR_EC2_DefaultRole`，以在启动集群时使用。有关更多信息，请参阅[集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)和[使用 Amazon EMR 自定义 IAM 角色](emr-iam-roles-custom.md)。

将以下语句添加到默认 EC2 实例配置文件中，以允许 Amazon EMR 标记会话并访问存储 LDAP 证书 Amazon Secrets Manager 的。

```
    {
      "Sid": "AllowAssumeOfRolesAndTagging",
      "Effect": "Allow",
      "Action": ["sts:TagSession", "sts:AssumeRole"],
      "Resource": [
        "arn:aws:iam::111122223333:role/LDAP_DATA_ACCESS_ROLE_NAME",
        "arn:aws:iam::111122223333:role/LDAP_USER_ACCESS_ROLE_NAME"
      ]
    },
    {
        "Sid": "AllowSecretsRetrieval",
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "arn:aws:secretsmanager:us-east-1:111122223333:secret:LDAP_SECRET_NAME*",
            "arn:aws:secretsmanager:us-east-1:111122223333:secret:ADMIN_LDAP_SECRET_NAME*"
        ]
    }
```

**注意**  
如果您在设置 Secrets Manager 权限时忘记了密钥名称末尾的通配符 `*` 字符，集群请求将失败。通配符代表密钥版本。  
您还应将 Amazon Secrets Manager 策略的范围限制为仅限于您的集群配置实例所需的证书。

# 创建用于 LDAP 集成的 Amazon EMR 安全配置
<a name="ldap-setup-security"></a>

在启动集成了 LDAP 的 EMR 集群之前，请使用 [使用 Amazon EMR 控制台或使用 Amazon CLI](emr-create-security-configuration.md) 中的步骤为该集群创建 Amazon EMR 安全配置。在 `AuthenticationConfiguration` 下的 `LDAPConfiguration` 区块中，或在 Amazon EMR 控制台**安全配置**部分中的相应字段中完成以下配置：

**`EnableLDAPAuthentication`**  
控制台选项：**身份验证协议：LDAP**  
要使用 LDAP 集成，请在控制台中创建集群时将此选项设置为 `true` 或选择它作为您的身份验证协议。默认情况下，当您在 Amazon EMR 控制台中创建安全配置时，`EnableLDAPAuthentication` 的值为 `true`。

**`LDAPServerURL`**  
控制台选项：**LDAP 服务器位置**  
LDAP 服务器的位置包括前缀：`ldaps://location_of_server`。

**`BindCertificateARN`**  
控制台选项：**LDAP SSL 证书**  
包含用于签署 LDAP 服务器使用的 SSL 证书的证书的 Amazon Secrets Manager ARN。如果您的 LDAP 服务器由公共证书颁发机构 (CA) 签名，则可以为 Amazon Secrets Manager ARN 提供一个空白文件。有关如何在 Secrets Manager 中存储证书的更多信息，请参阅 [将 TLS 证书存储在 Amazon Secrets Manager](emr-ranger-tls-certificates.md)。

**`BindCredentialsARN`**  
控制台选项：**LDAP 服务器绑定凭证**  
包含 LD Amazon Secrets Manager AP 管理员用户绑定凭据的 ARN。凭证存储为 JSON 对象。此密钥中只有一个键值对；键值对中的键是用户名，值是密码。例如 `{"uid=admin,cn=People,dc=example,dc=com": "AdminPassword1"}`。除非您为 EMR 集群启用 SSH 登录，否则此字段为可选字段。在许多配置中，Active Directory 实例需要绑定凭证才能允许 SSSD 同步用户。

**`LDAPAccessFilter`**  
控制台选项：**LDAP 访问筛选条件**  
指定 LDAP 服务器中可以进行身份验证的对象子集。例如，如果您只想向 LDAP 服务器中具有 `posixAccount` 对象类的所有用户授予访问权限，请将访问筛选条件定义为 `(objectClass=posixAccount)`。

**`LDAPUserSearchBase`**  
控制台选项：**LDAP 用户搜索库**  
您的用户在 LDAP 服务器中所属的搜索库。例如 `cn=People,dc=example,dc=com`。

**`LDAPGroupSearchBase`**  
控制台选项：**LDAP 组搜索库**  
您的组在 LDAP 服务器中所属的搜索库。例如 `cn=Groups,dc=example,dc=com`。

**`EnableSSHLogin`**  
控制台选项：**SSH 登录**  
指定是否允许使用 LDAP 凭证进行密码身份验证。我们不建议您保持启用此选项。密钥对允许访问 EMR 集群的更安全的路由。此字段是可选的，默认值为 `false`。

**`LDAPServerType`**  
控制台选项：**LDAP 服务器类型**  
指定 Amazon EMR 连接到的 LDAP 服务器的类型。支持的选项有“Active Directory”和“OpenLDAP”。其他 LDAP 服务器类型可能会起作用，但是 Amazon EMR 不正式支持其他服务器类型。有关更多信息，请参阅 [Amazon EMR 的 LDAP 组件](ldap-components.md)。

**`ActiveDirectoryConfigurations`**  
使用 Active Directory 服务器类型的安全配置的必需子块。

**`ADDomain`**  
控制台选项：**Active Directory 域**  
用于创建用户主体名称（UPN）的域名，用于对使用 Active Directory 服务器类型的安全配置进行用户身份验证。

## 使用 LDAP 和 Amazon EMR 进行安全配置的注意事项
<a name="ldap-setup-security-considerations"></a>
+ 要创建与 Amazon EMR LDAP 集成的安全配置，您必须使用传输中加密。有关传输中加密的信息，请参阅 [使用 Amazon EMR 加密静态数据和传输中数据](emr-data-encryption.md)。
+ 您不能在相同的安全配置中定义 Kerberos 配置。Amazon EMR 会自动预置一个专用的 KDC，并管理此 KDC 的管理员密码。用户无法访问此管理员密码。
+ 您不能在相同的安全配置 Amazon Lake Formation 中定义 IAM 运行时角色。
+ `LDAPServerURL` 的值中必须包含 `ldaps://` 协议。
+ `LDAPAccessFilter` 不能为空。

## 将 LDAP 与 Amazon EMR 的 Apache Ranger 集成一起使用
<a name="ldap-setup-ranger"></a>

通过 Amazon EMR 的 LDAP 集成，您可以进一步与 Apache Ranger 集成。当您将您的 LDAP 用户拉取到 Ranger 中时，可以将这些用户与 Apache Ranger 策略服务器关联，以便与 Amazon EMR 和其他应用程序集成。为此，请在与 LDAP 集群一起使用的安全配置中的 `AuthorizationConfiguration` 中定义该 `RangerConfiguration` 字段。有关如何设置安全配置的更多信息，请参阅 [创建 EMR 安全配置](emr-ranger-security-config.md)。

将 LDAP 与 Amazon EMR 配合使用时，您无需为 Apache Ranger 提供带有 Amazon EMR 集成的 `KerberosConfiguration`。

# 启动通过 LDAP 进行身份验证的 EMR 集群
<a name="ldap-setup-launch"></a>

使用以下步骤启动带有 LDAP 或 Active Directory 的 EMR 集群。

1. 设置您的环境：
   + 确保您的 EMR 集群上的节点可以与 Amazon S3 和进行通信。 Amazon Secrets Manager有关如何修改您的 EC2 实例配置文件角色以与这些服务通信的更多信息，请参阅 [向 Amazon EMR 实例 Amazon Secrets Manager 角色添加权限](ldap-setup-asm.md)。
   + 如果您计划在私有子网中运行 EMR 集群，则应使用和 Amazon PrivateLink Amazon VPC 终端节点，或者使用网络地址转换 (NAT) 将 VPC 配置为与 S3 和 Secrets Manager 通信。有关更多信息，请参阅《Amazon VPC 入门指南》**中的 [Amazon PrivateLink 和 VPC 端点](https://docs.amazonaws.cn/vpc/latest/userguide/endpoint-services-overview.html)和 [NAT 实例](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_NAT_Instance.html)。
   + 确保您的 EMR 集群和 LDAP 服务器之间存在网络连接。您的 EMR 集群必须通过网络访问您的 LDAP 服务器。集群的主节点、核心节点和任务节点与 LDAP 服务器通信以同步用户数据。如果您的 LDAP 服务器在 Amazon EC2 上运行，请更新 EC2 安全组以接受来自 EMR 集群的流量。有关更多信息，请参阅 [向 Amazon EMR 实例 Amazon Secrets Manager 角色添加权限](ldap-setup-asm.md)。

1. 创建用于 LDAP 集成的 Amazon EMR 安全配置 有关更多信息，请参阅 [创建用于 LDAP 集成的 Amazon EMR 安全配置](ldap-setup-security.md)。

1. 现在您已完成设置，请按照 [启动 Amazon EMR 集群](emr-gs.md#emr-getting-started-launch-sample-cluster) 中的步骤启动具有以下配置的集群：
   + 选择 Amazon EMR 6.12 或更高版本。我们建议您使用最新的 Amazon EMR 版本。
   + 仅为您的集群指定或选择支持 LDAP 的应用程序。有关在 Amazon EMR 上使用 LDAP 支持的应用程序的列表，请参阅 [适用于 Amazon EMR 的 LDAP 的应用程序支持和注意事项](ldap-considerations.md)。
   + 应用您在上一步中创建的安全配置。

# 在 Amazon EMR 上使用 LDAP 的示例
<a name="ldap-examples"></a>

[预置使用 LDAP 集成的 EMR 集群](ldap-setup-launch.md)后，您可以通过其内置的用户名和密码身份验证机制向任何[支持的应用程序](ldap-considerations.md#ldap-considerations-apps)提供 LDAP 凭证。本页显示一些示例。

## 在 Apache Hive 上使用 LDAP 身份验证
<a name="ldap-examples-"></a>

**Example ：Apache Hive**  
以下示例命令通过 HiveServer 2 和 Beeline 启动 Apache Hive 会话：  

```
beeline -u "jdbc:hive2://$HOSTNAME:10000/default;ssl=true;sslTrustStore=$TRUSTSTORE_PATH;trustStorePassword=$TRUSTSTORE_PASS"  -n LDAP_USERNAME -p LDAP_PASSWORD
```

## 在 Apache Livy 上使用 LDAP 身份验证
<a name="ldap-examples-livy"></a>

**Example ：Apache Livy**  
以下示例命令通过 cURL 启动 Livy 会话。将 `ENCODED-KEYPAIR` 替换为 `username:password` 的 Base64 编码字符串。  

```
curl -X POST --data '{"proxyUser":"LDAP_USERNAME","kind": "pyspark"}' -H "Content-Type: application/json" -H "Authorization: Basic ENCODED-KEYPAIR" DNS_OF_PRIMARY_NODE:8998/sessions
```

## 在 Presto 上使用 LDAP 身份验证
<a name="ldap-examples-presto"></a>

**Example ：Presto**  
以下示例命令通过 Presto CLI 启动 Presto 会话：  

```
presto-cli --user "LDAP_USERNAME" --password --catalog hive
```
运行此命令后，在系统提示时输入 LDAP 密码。

## 在 Trino 上使用 LDAP 身份验证
<a name="ldap-examples-trino"></a>

**Example Trino**  
以下示例命令通过 Trino CLI 启动 Trino 会话：  

```
trino-cli --user "LDAP_USERNAME" --password --catalog hive
```
运行此命令后，在系统提示时输入 LDAP 密码。

## 在 Hue 上使用 LDAP 身份验证
<a name="ldap-examples-hue"></a>

您可以通过在集群上创建的 SSH 隧道访问 Hue 用户界面，也可以将代理服务器设置为公开广播与 Hue 的连接。由于 Hue 默认不在 HTTPS 模式下运行，因此我们建议您使用额外的加密层，以确保客户端与 Hue 用户界面之间的通信使用 HTTPS 加密。这样可以减少您意外以纯文本形式公开用户凭证的可能性。

要使用 Hue 用户界面，请在浏览器中打开 Hue 用户界面，然后输入您的 LDAP 用户名密码进行登录。如果凭证正确，Hue 会将您登录并使用您的身份在所有支持的应用程序中对您进行身份验证。

## 使用 SSH 进行密码身份验证，对其他应用程序使用 Kerberos 票证
<a name="ldap-examples-ssh"></a>

**重要**  
我们不建议您使用密码身份验证来通过 SSH 访问 EMR 集群。

您可以使用您的 LDAP 凭证通过 SSH 访问 EMR 集群。为此，请在用于启动集群的 Amazon EMR 安全配置中将 `EnableSSHLogin` 配置设置为 `true`。然后，在集群启动后，使用以下命令通过 SSH 连接到集群：

```
ssh username@EMR_PRIMARY_DNS_NAME
```

运行此命令后，在系统提示时输入 LDAP 密码。

Amazon EMR 包含一个集群脚本，允许用户生成 Kerberos keytab 文件和票证，用于不直接接受 LDAP 凭证的受支持应用程序。其中一些应用程序包括 `spark-submit` Spark SQL 和 PySpark。

运行 `ldap-kinit` 并按照提示操作。如果身份验证成功，Kerberos keytab 文件将与有效的 Kerberos 票证一起出现在您的主目录中。使用 Kerberos 票证像在任何使用 Kerberos 的环境中一样运行应用程序。