

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

# 设置 Ranger Admin 服务器，以便与 Amazon EMR 集成
<a name="emr-ranger-admin"></a>

对于 Amazon EMR 集成，Apache Ranger 应用程序插件必须使用 TLS/SSL 与 Admin 服务器通信。

**先决条件: Ranger Admin 服务器 SSL 启用**

Amazon EMR 上的 Apache Ranger 需要插件和 Ranger Admin 服务器之间的双向 SSL 通信。要确保插件通过 SSL 与 Apache Ranger 服务器通信，请在 Ranger 管理服务器的 ranger-admin-site .xml 中启用以下属性。

```
<property>
    <name>ranger.service.https.attrib.ssl.enabled</name>
    <value>true</value>
</property>
```

此外，还需进行以下配置。

```
<property>
    <name>ranger.https.attrib.keystore.file</name>
    <value>_<PATH_TO_KEYSTORE>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.file</name>
    <value>_<PATH_TO_KEYSTORE>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.pass</name>
    <value>_<KEYSTORE_PASSWORD>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.keyalias</name>
    <value><PRIVATE_CERTIFICATE_KEY_ALIAS></value>
</property>

<property>
    <name>ranger.service.https.attrib.clientAuth</name>
    <value>want</value>
</property>

<property>
    <name>ranger.service.https.port</name>
    <value>6182</value>
</property>
```

# 用于 Apache Ranger 与 Amazon EMR 集成的 TLS 证书
<a name="emr-ranger-admin-tls"></a>

Apache Ranger 与 Amazon EMR 的集成要求使用 TLS 加密从 Amazon EMR 节点到 Ranger Admin 服务器的流量，并且 Ranger 插件使用双向 TLS 身份验证向 Apache Ranger 服务器进行身份验证。Amazon EMR 服务需要 Ranger Admin 服务器的公共凭证（在前面的示例中指定）和私有凭证。

**Apache Ranger 插件证书**

Apache Ranger 插件公共 TLS 凭证必须可供 Apache Ranger 管理服务器访问，以在插件连接时进行验证。执行此操作共有三种方式。

**方法 1: 在 Apache Ranger Admin 服务器中配置信任库**

在 ranger-admin-site .xml 中填写以下配置以配置信任库。

```
<property>
    <name>ranger.truststore.file</name>
    <value><LOCATION TO TRUSTSTORE></value>
</property>

<property>
    <name>ranger.truststore.password</name>
    <value><PASSWORD FOR TRUSTSTORE></value>
</property>
```

**方法 2: 将证书加载到 Java cacerts 信任库**

如果您的 Ranger Admin 服务器没有在其 JVM 选项中指定信任库，那么您可以将插件公共凭证放在默认的 cacerts 存储中。

**方法 3: 创建信任库并指定为 JVM 选项的一部分**

在 `{RANGER_HOME_DIRECTORY}/ews/ranger-admin-services.sh` 中，修改 `JAVA_OPTS`，使其包含 `"-Djavax.net.ssl.trustStore=<TRUSTSTORE_LOCATION>"` 和 `"-Djavax.net.ssl.trustStorePassword=<TRUSTSTORE_PASSWORD>"`。例如，在现有 JAVA\$1OPTS 之后添加以下行。

```
JAVA_OPTS=" ${JAVA_OPTS} -Djavax.net.ssl.trustStore=${RANGER_HOME}/truststore/truststore.jck -Djavax.net.ssl.trustStorePassword=changeit"
```

**注意**  
如果任何用户能够登录 Apache Ranger Admin 服务器并查看正在运行的进程，例如使用 `ps` 命令时，此规范可能会公开信任库密码。

**使用自签名证书**

不建议使用自签名凭证作为凭证。自签名凭证不得撤销，自签名凭证可能不符合内部安全要求。

# Ranger 与 Amazon EMR 集成的服务定义安装
<a name="emr-ranger-admin-servicedef-install"></a>

Ranger Admin 服务器使用服务定义来描述应用程序的策略属性。然后，将策略存储在策略存储库中以供客户端下载。

为了能够配置服务定义，必须对 Ranger Admin 服务器进行 REST 调用。有关下一节中的 APIs 必填内容，请参阅 [Apache Ranger Pub APIsv2](https://ranger.apache.org/apidocs/resource_PublicAPIsv2.html#resource_PublicAPIsv2_createServiceDef_POST) lic。

**安装 Apache Spark 的服务定义**

要安装 Apache Spark 的服务定义，请参阅[用于 Ranger 与 Amazon EMR 集成的 Apache Spark 插件](emr-ranger-spark.md)。

**安装 EMRFS 服务定义**

要安装 Amazon EMR 的 S3 服务定义，请参阅[用于 Ranger 与 Amazon EMR 集成的 EMRFS S3 插件](emr-ranger-emrfs.md)。

**使用 Hive 服务定义**

Apache Hive 可以使用 Apache Ranger 2.0 及更高版本附带的现有 Ranger 服务定义。有关更多信息，请参阅 [用于 Ranger 与 Amazon EMR 集成的 Apache Hive 插件](emr-ranger-hive.md)。

# 与 Amazon EMR 集成的网络流量规则
<a name="emr-ranger-network"></a>

当 Apache Ranger 与您的 EMR 集群集成时，该集群需要与其它服务器和 AWS通信。

所有 Amazon EMR 节点（包括核心节点和任务节点）都必须能够与 Apache Ranger Admin 服务器通信以下载策略。如果您的 Apache Ranger 管理员在 Amazon EC2 上运行，您需要更新安全组才能从 EMR 集群获取流量。

除了与 Ranger 管理服务器通信外，所有节点都需要能够与以下 AWS 服务进行通信：
+ Amazon S3
+ AWS KMS （如果使用 EMRFS SSE-KMS）
+ Amazon CloudWatch
+ AWS STS

如果您计划在私有子网中运行 EMR 集群，请配置 VPC 以能够使用《Amazon VPC 用户指南》**中的 [AWS PrivateLink 和 VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)或使用《Amazon VPC 用户指南》**中的[网络地址转换（NAT）实例](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html)与这些服务进行通信。