了解传输中加密
您可以配置 EMR 集群来运行 Apache Spark
如果在 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-16340hive.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 RPCprivacy
,使用基于 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
组件 | 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 RPCprivacy
,使用基于 SASL 的传输中加密。这需要在安全配置中启用 Kerberos 身份验证。
建议保留用于 HTTPS 端点的默认端口。
HDFS 块传输的数据加密使用
有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode
组件 | 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 |
Hadoop MapReduce
在 EMR 集群中启用传输中加密时,Hadoop MapReduce、job history server 和 MapReduce shuffle 都默认支持 TLS。
Hadoop MapReduce encrypted shuffle
建议保留用于 HTTPS 端点的默认端口。
有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode
组件 | 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.ssl
和 tez.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+ |
Flink
在 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
Amazon EMR 使用 security.ssl.algorithms
有关更多信息,请参阅 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 RPCprivacy
。HMaster 和 RegionServer 使用基于 SASL 的传输中加密。这需要在安全配置中启用 Kerberos 身份验证。
Amazon EMR 将 hbase.ssl.enabled
设置为 true,对 UI 端点使用 TLS。如果您不想对 UI 端点使用 TLS,请禁用此配置。建议使用默认配置,以获得最大的安全性。
Amazon EMR 设置了 hbase.rest.ssl.enabled
和 hbase.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-3673oozie-site.xml
文件中设置 oozie.email.smtp.ssl.protocols
属性。默认情况下,如果启用了传输中加密,Amazon EMR 将使用 TLS v1.3 协议。
如果您在 Amazon EMR 7.3.0 及更高版本上运行 Oozie,则 OOZIE-3677oozie-site.xml
中指定属性 keyStoreType
和 trustStoreType
。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 及更高版本支持。 |