了解传输中加密 - Amazon EMR

了解传输中加密

您可以配置 EMR 集群来运行 Apache SparkApache HivePresto 等开源框架。这些开源框架各有一组在集群的 EC2 实例上运行的进程。这些进程中的每一个都可以托管用于网络通信的网络端点。

如果在 EMR 集群上启用了传输中加密,不同的网络端点将使用不同的加密机制。请参阅以下部分,了解有关传输中加密支持的特定开源框架网络端点、相关加密机制以及哪个 Amazon EMR 发行版添加了该支持的更多信息。每个开源应用程序还可能有不同的最佳实践和您可以更改的开源框架配置。

为了获得最大的传输中加密覆盖范围,我们建议您同时启用传输中加密和 Kerberos。如果您仅启用传输中加密,则传输中加密仅适用于支持 TLS 的网络端点。之所以需要 Kerberos,是因为某些开源框架网络端点使用简单身份验证和安全层(SASL)进行传输中加密。

请注意,不包括 Amazon EMR 7.x.x 发行版中不支持的任何开源框架。

Spark

在安全配置中启用传输中加密时,spark.authenticate 会自动设置为 true 并对 RPC 连接使用基于 AES 的加密。

从 Amazon EMR 7.3.0 开始,如果使用传输中加密和 Kerberos 身份验证,则无法使用依赖于 Hive 元存储的 Spark 应用程序。Hive 3 在 HIVE-16340 中修复了此问题。当开源 Spark 可以升级到 Hive 3 时,HIVE-44114 可完全解决此问题。同时,您可以将 hive.metastore.use.SSL 设置为 false 以解决此问题。有关更多信息,请参阅配置应用程序

有关更多信息,请参阅 Apache Spark 文档中的 Spark 安全性

组件 Endpoint 端口 传输中加密机制 发行版支持

Spark 历史记录服务器

ssl.history.port

18480

TLS

emr-5.3.0+、emr-6.0.0+、emr-7.0.0+

Spark UI

spark.ui.port

4440

TLS

emr-5.3.0+、emr-6.0.0+、emr-7.0.0+

Spark 驱动程序

spark.driver.port

动态

Spark AES 加密

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Spark 执行程序

执行程序端口(无命名配置)

动态

Spark AES 加密

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

YARN NodeManager

spark.shuffle.service.port1

7337

Spark AES 加密

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

1 spark.shuffle.service.port 托管在 YARN NodeManager 上,但仅供 Apache Spark 使用。

Hadoop YARN

Secure Hadoop RPC 设置为 privacy,使用基于 SASL 的传输中加密。这需要在安全配置中启用 Kerberos 身份验证。如果不想对 Hadoop RPC 进行传输中加密,请配置 hadoop.rpc.protection = authentication。建议使用默认配置,以获得最大的安全性。

如果 TLS 证书不符合 TLS 主机名验证要求,则可以配置 hadoop.ssl.hostname.verifier = ALLOW_ALL。建议使用 hadoop.ssl.hostname.verifier = DEFAULT 的默认配置,即强制执行 TLS 主机名验证。

要禁用 YARN Web 应用程序端点的 HTTPS,请配置 yarn.http.policy = HTTP_ONLY。这样,这些端点的流量就不会加密。建议使用默认配置,以获得最大的安全性。

有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode(安全模式下的 Hadoop)。

组件 Endpoint 端口 传输中加密机制 发行版支持

ResourceManager

yarn.resourcemanager.webapp.address

8088

TLS

emr-7.3.0+

ResourceManager

yarn.resourcemanager.resource-tracker.address

8025

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

ResourceManager

yarn.resourcemanager.scheduler.address

8030

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

ResourceManager

yarn.resourcemanager.address

8032

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

ResourceManager

yarn.resourcemanager.admin.address

8033

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

TimelineServer

yarn.timeline-service.address

10200

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

TimelineServer

yarn.timeline-service.webapp.address

8188

TLS

emr-7.3.0+

WebApplicationProxy

yarn.web-proxy.address

20888

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

NodeManager

yarn.nodemanager.address

8041

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

NodeManager

yarn.nodemanager.localizer.address

8040

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

NodeManager

yarn.nodemanager.webapp.address

8044

TLS

emr-7.3.0+

NodeManager

mapreduce.shuffle.port1

13562

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

NodeManager

spark.shuffle.service.port2

7337

Spark AES 加密

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

1 mapreduce.shuffle.port 托管在 YARN NodeManager 上,但仅供 Hadoop MapReduce 使用。

2 spark.shuffle.service.port 托管在 YARN NodeManager 上,但仅供 Apache Spark 使用。

Hadoop HDFS

如果在 EMR 集群中启用了传输中加密,Hadoop 名称节点、数据节点和日志节点默认都支持 TLS。

Secure Hadoop RPC 设置为 privacy,使用基于 SASL 的传输中加密。这需要在安全配置中启用 Kerberos 身份验证。

建议保留用于 HTTPS 端点的默认端口。

HDFS 块传输的数据加密使用 AES 256,要求在安全配置中启用静态加密。

有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode(安全模式下的 Hadoop)。

组件 Endpoint 端口 传输中加密机制 发行版支持

Namenode

dfs.namenode.https-address

9871

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Namenode

dfs.namenode.rpc-address

8020

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Datanode

dfs.datanode.https.address

9865

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Datanode

dfs.datanode.address

9866

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Journal Node

dfs.journalnode.https-address

8481

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

Journal Node

dfs.journalnode.rpc-address

8485

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

DFSZKFailoverController

dfs.ha.zkfc.port

8019

只有 Hadoop 3.4.0 支持 TLS for ZKFC。有关更多信息,请参阅 HADOOP-18919。Amazon EMR 7.1.0 目前在 Hadoop 3.3.6 上运行。未来将在 Hadoop 3.4.0 上运行的更高 Amazon EMR 版本

Hadoop MapReduce

在 EMR 集群中启用传输中加密时,Hadoop MapReduce、job history server 和 MapReduce shuffle 都默认支持 TLS。

Hadoop MapReduce encrypted shuffle 使用 TLS。

建议保留用于 HTTPS 端点的默认端口。

有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode(安全模式下的 Hadoop)。

组件 Endpoint 端口 传输中加密机制 发行版支持

JobHistoryServer

mapreduce.jobhistory.webapp.https.address

19890

TLS

emr-7.3.0+

YARN NodeManager

mapreduce.shuffle.port1

13562

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

1 mapreduce.shuffle.port 托管在 YARN NodeManager 上,但仅供 Hadoop MapReduce 使用。

Presto

在 Amazon EMR 5.6.0 及更高版本中,Presto 协调器和工作线程之间的内部通信使用 TLS,Amazon EMR 会设置所有必需的配置,以便在 Presto 中启用安全内部通信

如果连接器使用 Hive 元存储作为元数据存储,则通信器与 Hive 元存储之间的通信也使用 TLS 加密。

组件 Endpoint 端口 传输中加密机制 发行版支持

Presto Coordinator

http-server.https.port

8446

TLS

emr-5.6.0+、emr-6.0.0+、emr-7.0.0+

Presto Worker

http-server.https.port

8446

TLS

emr-5.6.0+、emr-6.0.0+、emr-7.0.0+

Trino

在 Amazon EMR 6.1.0 及更高版本中,Presto 协调器和工作线程之间的内部通信使用 TLS,Amazon EMR 会设置所有必需的配置,以便在 Presto 中启用安全内部通信

如果连接器使用 Hive 元存储作为元数据存储,则通信器与 Hive 元存储之间的通信也使用 TLS 加密。

组件 Endpoint 端口 传输中加密机制 发行版支持

Trino Coordinator

http-server.https.port

8446

TLS

emr-6.1.0+、emr-7.0.0+

Trino Worker

http-server.https.port

8446

TLS

emr-6.1.0+、emr-7.0.0+

Hive 和 Tez

默认情况下,在 EMR 集群中启用传输中加密时,Hive 服务器 2、Hive 元存储服务器、Hive LLAP Daemon Web UI 和 Hive LLAP shuffle 都支持 TLS。有关 Hive 配置的更多信息,请参阅配置属性

当 EMR 集群启用传输中加密时,Tomcat 服务器上托管的 Tez UI 也会启用 HTTPS。但是,Tez AM Web UI 服务禁用了 HTTPS,因此 AM 用户无权访问打开的 SSL 侦听器的密钥库文件。您还可以使用布尔配置 tez.am.tez-ui.webservice.enable.ssltez.am.tez-ui.webservice.enable.client.auth 来启用此行为。

组件 Endpoint 端口 传输中加密机制 发行版支持

HiveServer2

hive.server2.thrift.port

10000

TLS

emr-6.9.0+、emr-7.0.0+

HiveServer2

hive.server2.thrift.http.port

10001

TLS

emr-6.9.0+、emr-7.0.0+

HiveServer2

hive.server2.webui.port

10002

TLS

emr-7.3.0+

HiveMetastoreServer

hive.metastore.port

9083

TLS

emr-7.3.0+

LLAP Daemon

hive.llap.daemon.yarn.shuffle.port

15551

TLS

emr-7.3.0+

LLAP Daemon

hive.llap.daemon.web.port

15002

TLS

emr-7.3.0+

LLAP Daemon

hive.llap.daemon.output.service.port

15003

Hive 不支持此端点的传输中加密

LLAP Daemon

hive.llap.management.rpc.port

15004

Hive 不支持此端点的传输中加密

LLAP Daemon

hive.llap.plugin.rpc.port

动态

Hive 不支持此端点的传输中加密

LLAP Daemon

hive.llap.daemon.rpc.port

动态

Hive 不支持此端点的传输中加密

WebHCat

templeton.port

50111

TLS

emr-7.3.0+

Tez Application Master

tez.am.client.am.port-range

tez.am.task.am.port-range

动态

Tez 不支持此端点的传输中加密

Tez Application Master

tez.am.tez-ui.webservice.port-range

动态

默认情况下禁用。可使用 emr-7.3.0+ 中的 Tez 配置启用

Tez Task

不适用:不可配置

动态

Tez 不支持此端点的传输中加密

Tez UI

可通过托管 Tez UI 的 Tomcat 服务器来配置

8080

TLS

emr-7.3.0+

在 EMR 集群中启用传输中加密时,Apache Flink REST 端点和 Flink 进程之间的内部通信默认支持 TLS。

security.ssl.internal.enabled 设置为 true,对 Flink 进程之间的内部通信使用传输中加密。如果不想在内部通信中使用传输中加密,请禁用该配置。建议使用默认配置,以获得最大的安全性。

Amazon EMR 将 security.ssl.rest.enabled 设置为 true,并对 REST 端点使用传输中加密。此外,Amazon EMR 还将 historyserver.web.ssl.enabled 设置为 true,以便与 Flink History Server 进行 TLS 通信。如果不想对 REST 点进行传输中加密,请禁用这些配置。建议使用默认配置,以获得最大的安全性。

Amazon EMR 使用 security.ssl.algorithms 来指定使用基于 AES 加密的密码列表。覆盖此配置以使用所需的密码。

有关更多信息,请参阅 Flink 文档中的 SSL 设置

组件 Endpoint 端口 传输中加密机制 发行版支持

Flink History Server

historyserver.web.port

8082

TLS

emr-7.3.0+

Job Manager Rest Server

rest.bind-port

rest.port

动态

TLS

emr-7.3.0+

HBase

Amazon EMR 将 Secure Hadoop RPC 设置为 privacy。HMaster 和 RegionServer 使用基于 SASL 的传输中加密。这需要在安全配置中启用 Kerberos 身份验证。

Amazon EMR 将 hbase.ssl.enabled 设置为 true,对 UI 端点使用 TLS。如果您不想对 UI 端点使用 TLS,请禁用此配置。建议使用默认配置,以获得最大的安全性。

Amazon EMR 设置了 hbase.rest.ssl.enabledhbase.thrift.ssl.enabled,分别对 REST 和 Thirft 服务器端点使用 TLS。如果您不想对这些端点使用 TLS,请禁用此配置。建议使用默认配置,以获得最大的安全性。

组件 Endpoint 端口 传输中加密机制 发行版支持

HMaster

HMaster

16000

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

HMaster

HMaster UI

16010

TLS

emr-7.3.0+

RegionServer

RegionServer

16020

SASL + Kerberos

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+

RegionServer

RegionServer 信息

16030

TLS

emr-7.3.0+

HBase Rest Server

Rest Server

8070

TLS

emr-7.3.0+

HBase Rest Server

Rest UI

8085

TLS

emr-7.3.0+

Hbase Thrift Server

Thrift Server

9090

TLS

emr-7.3.0+

Hbase Thrift Server

Thrift Server UI

9095

TLS

emr-7.3.0+

Phoenix

如果您在 EMR 集群中启用了传输中加密,Phoenix Query Server 将支持 TLS phoenix.queryserver.tls.enabled 属性,该属性默认设置为 true

要了解更多信息,请参阅 Phoenix Query Server 文档中 HTTPS 相关的配置

组件 Endpoint 端口 传输中加密机制 发行版支持

Query Server

phoenix.queryserver.http.port

8765

TLS

emr-7.3.0+

Oozie

如果您在 Amazon EMR 7.3.0 及更高版本上运行 Oozie,则 OOZIE-3673 可在 Amazon EMR 上使用。如果在运行电子邮件操作时需要配置自定义 SSL 或 TLS 协议,则可以在 oozie-site.xml 文件中设置 oozie.email.smtp.ssl.protocols 属性。默认情况下,如果启用了传输中加密,Amazon EMR 将使用 TLS v1.3 协议。

如果您在 Amazon EMR 7.3.0 及更高版本上运行 Oozie,则 OOZIE-3677OOZIE-3674 可在 Amazon EMR 上使用。这允许在 oozie-site.xml 中指定属性 keyStoreTypetrustStoreType。OOZIE-3674 将参数 --insecure 添加到 Oozie 客户端,这样就可以忽略证书错误。

Oozie 强制执行 TLS 主机名验证,这意味着任何用于传输中加密的证书都必须满足主机名验证要求。如果证书不符合标准,集群可能会在 Amazon EMR 预置集群的 oozie share lib update 阶段卡住。建议您更新证书,确保其符合主机名验证要求。但如果无法更新证书,则可以在集群配置中将 oozie.https.enabled 属性设置为 false,为 Oozie 禁用 SSL。

组件 Endpoint 端口 传输中加密机制 发行版支持

EmbeddedOozieServer

oozie.https.port

11443

TLS

emr-7.3.0+

EmbeddedOozieServer

oozie.email.smtp.port

25

TLS

emr-7.3.0+

Zeppelin

默认情况下,当您在 EMR 集群中启用传输中加密时,Zeppelin 支持 TLS。有关 Zeppelin 配置的更多信息,请参阅 Zeppelin 文档中的 SSL 配置

组件 Endpoint 端口 传输中加密机制 发行版支持

zeppelin

zeppelin.server.ssl.port

8890

TLS

Amazon EMR 7.3.0 及更高版本支持。