本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
了解传输中加密
您可以配置 EMR 集群来运行 Apache Spark、Apache
如果在 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+ |
纱 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 使用。
已知问题
中的yarn.log.server.url
配置当前使用端口 19888 的 HTTP,这会阻止从资源管理器用户界面访问应用程序日志。影响版本:EMR-7.3.0 到 EMR-7.8.0。
使用以下解决办法:
修改中的
yarn.log.server.url
配置yarn-site.xml
以使用HTTPS
协议和端口号19890
。重新启动 YARN 资源管理器:
sudo systemctl restart hadoop-yarn-resourcemanager.service
。
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+ |
DFSZKFailover控制器 |
dfs.ha.zkfc.port |
8019 |
无 |
只有 Hadoop 3.4.0 支持 TLS for ZKFC。有关更多信息,请参阅 HADOOP-18919 |
Hadoop MapReduce
在 EMR 集群中启用传输中加密时 MapReduce,Hadoop、job history server 和 sh MapReduce uffle 都默认支持 TLS。
Hadoop MapReduce 加密的随机播放使用
建议保留用于 HTTPS 端点的默认端口。
有关更多信息,请参阅 Apache Hadoop 文档中的 Hadoop in secure mode
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
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 加密。
组件 | 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 不支持此端点的传输中加密 |
Web HCat |
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
亚马逊 EMR 将 S ecure Hadoopprivacy
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,请禁用此配置。建议使用默认配置,以获得最大的安全性。
从 EMR 7.6.0 开始,端点上支持 TLS。 HMaster RegionServer 亚马逊 EMR 还设置hbase.server.netty.tls.enabled
了和。hbase.client.netty.tls.enabled
如果您不想对这些端点使用 TLS,请禁用此配置。建议使用默认配置,该配置提供加密并因此更高的安全性。要了解更多信息,请参阅《Apache HBase 参考指南》中的 HBase RPC 通信中的传输级别安全 (TLS)
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
HMaster |
HMaster |
16000 |
SASL + Kerberos TLS |
emr-4.8.0+、emr-5.0.0+、emr-6.0.0+、emr-7.0.0+ 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+ emr-7.6.0+ 中的 TLS |
RegionServer |
RegionServer 信息 |
16030 |
TLS |
emr-7.3.0+ |
HBase Rest Ser |
Rest Server |
8070 |
TLS |
emr-7.3.0+ |
HBase Rest Ser |
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+ |
Hue
在 Amazon EMR 集群中启用传输中加密时,Hue 默认支持 TLS。有关 Hue 配置的更多信息,请参阅使用 HTTPS/SSL 配置 Hue
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
Hue |
http_port |
8888 |
TLS |
emr-7.4.0+ |
Livy
在 Amazon EMR 集群中启用传输中加密时,Livy 默认支持 TLS。有关 Livy 配置的更多信息,请参阅使用 Ap ache Livy 启用 HTTPS。
从 Amazon EMR 7.3.0 开始,如果使用传输中加密和 Kerberos 身份验证,则无法将 Livy 服务器用于依赖于 Hive 元存储的 Spark 应用程序。此问题已在 HIVE-16340hive.metastore.use.SSL
,则可以解决此问题false
。有关更多信息,请参阅配置应用程序。
有关更多信息,请参阅使用 Ap ache Livy 启用 HTTPS。
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
livy-server |
livy.server.por |
8998 |
TLS |
emr-7.4.0+ |
JupyterEnterpriseGateway
默认情况下,在 Amazon EMR 集群中启用传输中加密时,Jupyter Enterprise Gateway 支持 TLS。有关 Jupyter 企业网关配置的更多信息,请参阅保护企业网关服务器
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
jupyter_Enterprise_g |
c. EnterpriseGatewayApp .port |
9547 |
TLS |
emr-7.4.0+ |
JupyterHub
默认情况下,在 Amazon EMR 集群中启用传输中加密时, JupyterHub 支持 TLS。有关更多信息,请参阅 JupyterHub 文档中的启用 SSL 加密
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
jupyter_hub |
c. JupyterHub .port |
9443 |
TLS |
emr-5.14.0+ |
Zeppelin
默认情况下,当您在 EMR 集群中启用传输中加密时,Zeppelin 支持 TLS。有关 Zeppelin 配置的更多信息,请参阅 Zeppelin 文档中的 SSL 配置
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
zeppelin |
zeppelin.server.ssl.port |
8890 |
TLS |
7.3.1.0+ |
Zookeeper
Amazon EMR 设置serverCnxnFactory
为org.apache.zookeeper.server.NettyServerCnxnFactory
为 Zookeeper 法定人数和客户端通信启用 TLS。
secureClientPort
指定监听 TLS 连接的端口。如果客户端不支持与 Zookeeper 的 TLS 连接,则客户端可以连接到中指定的不安全端口 2181。clientPort
您可以覆盖或禁用这两个端口。
Amazon EMR 将sslQuorum
和设置为admin.forceHttps
,以便为true
法定人数和管理服务器启用 TLS 通信。如果不想在法定人数和管理服务器上使用传输中加密,可禁用这些配置。建议使用默认配置,以获得最大的安全性。
有关更多信息,请参阅 Zookeeper 文档中的加密、身份验证、授权选项
组件 | Endpoint | 端口 | 传输中加密机制 | 发行版支持 |
---|---|---|---|---|
ZooKeeeper 服务器 |
secureClientPort |
2281 |
TLS |
emr-7.4.0+ |
ZooKeeeper 服务器 |
仲裁端口 |
有 2: 关注者使用 2888 与领导者建立联系。 领导副本选择使用 3888 |
TLS |
emr-7.4.0+ |
ZooKeeeper 服务器 |
管理员服务器端口 |
8341 |
TLS |
emr-7.4.0+ |