View a markdown version of this page

了解传输中加密 - Amazon EMR

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

了解传输中加密

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

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

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

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

Spark

当您在安全配置中启用传输中加密时,spark.authenticate会自动设置为 RPC 连接true并使用 AES-based 加密。

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

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

组件 端点 端口: In-Transit 加密机制 发行版支持

Spark 历史记录服务器

ssl.history.port

18480

TLS

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

火花用户界面

spark.ui.port

4440

TLS

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

Spark 驱动程序

spark.driver.port

动态

火花 AES-based 加密

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

Spark 执行程序

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

动态

火花 AES-based 加密

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

纱 NodeManager

spark.shuffle.service.port1

7337

火花 AES-based 加密

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 使用。

已知问题

在启用传输的集群上,spark.yarn.historyServer.address 配置当前正在使用端口 18080,这会阻止使用 YARN 跟踪 URL 访问 Spark 应用程序 UI。影响版本:EMR - 7.3.0 到 EMR - 7.9.0。

使用以下解决方法:

  1. 修改 /etc/spark/conf/spark-defaults.conf 中的 spark.yarn.historyServer.address 配置以在正在运行的集群上使用 HTTPS 端口号 18480

  2. 这也可以在启动集群时在配置覆盖中提供。

示例配置:

[ { "Classification": "spark-defaults", "Properties": { "spark.yarn.historyServer.address": "${hadoopconf-yarn.resourcemanager.hostname}:18480" } } ]

Hadoop YARN

安全 Hadoop RPC 设置为privacy并使用 SASL-based 传输中加密。这需要在安全配置中启用 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)。

组件 端点 端口: In-Transit 加密机制 发行版支持

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

火花 AES-based 加密

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 使用。

已知问题

yarn.log.server.url 配置当前使用 HTTP 和端口 19888,这阻止了从资源管理器 UI 访问应用程序日志。影响版本:EMR - 7.3.0 到 EMR - 7.8.0。

使用以下解决方法:

  1. 修改 yarn-site.xml 中的 yarn.log.server.url 配置以使用 HTTPS 协议和端口号 19890

  2. 重启 YARN 资源管理器:sudo systemctl restart hadoop-yarn-resourcemanager.service

Hadoop HDFS

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

安全 Hadoop RPC 设置为privacy并使用 SASL-based 传输中加密。这需要在安全配置中启用 Kerberos 身份验证。

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

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

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

组件 端点 端口: In-Transit 加密机制 发行版支持

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 集群中启用传输加密时 MapReduce,Hadoop、任务历史服务器和 sh MapReduce uffle 默认都支持 TLS。

Hadoop MapReduce 加密的随机播放使用 TLS。

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

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

组件 端点 端口: In-Transit 加密机制 发行版支持

JobHistoryServer

mapreduce.jobhistory.webapp.https.address

19890

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+

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

:Presto

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

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

组件 端点 端口: In-Transit 加密机制 发行版支持

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 加密。

组件 端点 端口: In-Transit 加密机制 发行版支持

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 配置的更多信息,请参阅配置属性

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

组件 端点 端口: In-Transit 加密机制 发行版支持

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

N/A -不可配置

动态

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-based 覆盖此配置以使用所需的密码。

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

组件 端点 端口: In-Transit 加密机制 发行版支持

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-based传输中加密。这需要在安全配置中启用 Kerberos 身份验证。

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

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

从 EMR 7.6.0 开始,HMaster 和端点都支持 TLS。 RegionServer Amazon EMR 还设置 hbase.server.netty.tls.enabledhbase.client.netty.tls.enabled。如果不想对这些端点使用 TLS,请禁用此配置。我们建议您使用默认配置,该配置提供加密功能,从而提供更高的安全性。要了解更多信息,请参阅《Apache HBase 参考指南》中的 Transport Level Security (TLS) in HBase RPC communication

组件 端点 端口: In-Transit 加密机制 发行版支持

HMaster

HMaster

16000

SASL + Kerberos

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+ 和 emr-7.0.0+ 中的 SASL + Kerberos

emr-7.6.0+ 中的 TLS

HMaster

HMaster UI

16010

TLS

emr-7.3.0+

RegionServer

RegionServer

16020

SASL + Kerberos

TLS

emr-4.8.0+、emr-5.0.0+、emr-6.0.0+ 和 emr-7.0.0+ 中的 SASL + Kerberos

emr-7.6.0+ 中的 TLS

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 相关的配置

组件 端点 端口: In-Transit 加密机制 发行版支持

Query Server

phoenix.queryserver.http.port

8765

TLS

emr-7.3.0+

Oozie

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

OOZIE-3677如果你在亚马逊 EMR 7.3.0 及OOZIE-3674更高版本上运行 Ooozie,也可以在亚马逊 EMR 上使用。这允许您指定属keyStoreType性和trustStoreTypeoozie-site.xml。 OOZIE-3674 将参数添加--insecure到 Oozie 客户端,使其可以忽略证书错误。

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

组件 端点 端口: In-Transit 加密机制 发行版支持

EmbeddedOozieServer

oozie.https.port

11443

TLS

emr-7.3.0+

EmbeddedOozieServer

oozie.email.smtp.port

25

TLS

emr-7.3.0+

Hue

默认情况下,当 Amazon EMR 集群中启用传输中加密时,Hue 支持 TLS。有关 Hue 配置的更多信息,请参阅 Configure Hue with HTTPS / SSL

组件 端点 端口: In-Transit 加密机制 发行版支持

Hue

http_port

8888

TLS

emr-7.4.0+

Livy

默认情况下,当 Amazon EMR 集群中启用传输中加密时,Livy 支持 TLS。有关 Livy 配置的更多信息,请参阅使用 Apache Livy 启用 HTTPS

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

有关更多信息,请参阅使用 Apache Livy 启用 HTTPS

组件 端点 端口: In-Transit 加密机制 发行版支持

livy-server

livy.server.port

8998

TLS

emr-7.4.0+

JupyterEnterpriseGateway

默认情况下,当 Amazon EMR 集群中启用传输中加密时,Jupyter Enterprise Gateway 支持 TLS。有关 Jupyter Enterprise Gateway 配置的更多信息,请参阅 Securing Enterprise Gateway Server

组件 端点 端口: In-Transit 加密机制 发行版支持

jupyter_enterprise_gateway

c。EnterpriseGatewayApp.port

9547

TLS

emr-7.4.0+

JupyterHub

默认情况下,在 Amazon EMR 集群中启用传输中加密时 JupyterHub 支持 TLS。有关更多信息,请参阅 JupyterHub 文档中的启用 SSL 加密。建议不要禁用加密。

组件 端点 端口: In-Transit 加密机制 发行版支持

jupyter_hub

c。JupyterHub.port

9443

TLS

emr-5.14.0+、emr-6.0.0+、emr-7.0.0+

Zeppelin

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

组件 端点 端口: In-Transit 加密机制 发行版支持

zeppelin

zeppelin.server.ssl.port

8890

TLS

7.3.0+

Zookeeper

Amazon EMR 将 serverCnxnFactory 设置为 org.apache.zookeeper.server.NettyServerCnxnFactory,以为 Zookeeper 仲裁和客户端通信启用 TLS。

secureClientPort 指定侦听 TLS 连接的端口。如果客户端不支持与 Zookeeper 的 TLS 连接,则客户端可以连接到 clientPort 中指定的 2181 不安全端口。您可以覆盖或禁用这两个端口。

Amazon EMR 会将 sslQuorumadmin.forceHttps 都设置为 true,以为仲裁和管理服务器启用 TLS 通信。如果您不希望对仲裁和管理服务器进行传输中加密,可以禁用这些配置。建议使用默认配置,以获得最大的安全性。

有关更多信息,请参阅 Zookeeper 文档中的 Encryption, Authentication, Authorization Options

组件 端点 端口: In-Transit 加密机制 发行版支持

Zookeeper Server

安全 ClientPort

2281

TLS

emr-7.4.0+

Zookeeper Server

仲裁端口

有 2 个:

跟随节点使用 2888 连接到领导节点。

领导节点选择使用 3888

TLS

emr-7.4.0+

Zookeeper Server

admin.serverPort

8341

TLS

emr-7.4.0+