认证和加密
安全认证
Flink整个系统存在三种认证方式:
- 使用kerberos认证:Flink yarn client与Yarn Resource Manager、JobManager与Zookeeper、JobManager与HDFS、TaskManager与HDFS、Kafka与TaskManager、TaskManager和Zookeeper。
- 使用security cookie进行认证:Flink yarn client与Job Manager、JobManager与TaskManager、TaskManager与TaskManager。
- 使用YARN内部的认证机制:Yarn Resource Manager与Application Master(简称AM)。
- Flink的JobManager与YARN的AM是在同一个进程下。
- 如果用户集群开启Kerberos认证需要使用kerberos认证。
当前一个Flink集群只支持一个用户,一个用户可以创建多个Flink集群。
加密传输
Flink整个系统存在三种加密传输方式:
- 使用Yarn内部的加密传输方式:Flink yarn client与Yarn Resource Manager、Yarn Resource Manager与Job Manager。
- SSL:Flink yarn client与JobManager、JobManager与TaskManager、TaskManager与TaskManager。
- 使用Hadoop内部的加密传输方式:JobManager和HDFS、TaskManager和HDFS、JobManager与ZooKeeper、TaskManager与ZooKeeper。
Yarn内部和Hadoop内部都不需要用户配置加密,用户只需要配置SSL加密传输方式。
配置SSL传输,用户主要在客户端的“flink-conf.yaml”文件中做如下配置:
- 打开SSL开关和设置SSL加密算法,配置参数如表2所示,请根据实际情况修改对应参数值。
表2 参数描述 参数
参数值示例
描述
security.ssl.enabled
true
打开SSL总开关。
akka.ssl.enabled
true
打开akka SSL开关。
blob.service.ssl.enabled
true
打开blob通道SSL开关。
taskmanager.data.ssl.enabled
true
打开taskmanager之间通信的SSL开关。
security.ssl.algorithms
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
设置SSL加密的算法。
如果打开Task Manager之间data传输通道的SSL,对性能会有较大影响,需要用户从安全和性能综合考虑。
- 在Flink客户端的bin目录下,执行命令sh generate_keystore.sh <password>,请参考认证和加密,表3中的配置项会被默认赋值,用户也可以手动配置。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。
表3 参数描述 参数
参数值示例
描述
security.ssl.keystore
${path}/flink.keystore
keystore的存放路径,“flink.keystore”表示用户通过generate_keystore.sh*工具生成的keystore文件名称。
security.ssl.keystore-password
-
keystore的password,-表示需要用户输入自定义设置的密码值。
security.ssl.key-password
-
ssl key的password,-表示需要用户输入自定义设置的密码值。
security.ssl.truststore
${path}/flink.truststore
truststore存放路径,“flink.truststore”表示用户通过generate_keystore.sh*工具生成的truststore文件名称。
security.ssl.truststore-password
-
truststore的password,-表示需要用户输入自定义设置的密码值。
“path”目录是用来存放SSL keystore、truststore相关配置文件,该目录是由用户自定义创建。
- 配置客户端访问keystore或truststore文件路径。
- 相对路径(推荐)
请执行如下步骤配置“flink.keystore”和“flink.truststore”文件路径为相对路径,并确保Flink客户端执行命令的目录可以直接访问该相对路径。
- 在Flink客户端“conf”目录下新建目录,例如ssl。
cd /Flink客户端目录/Flink/flink/conf/
mkdir ssl
- 移动“flink.keystore”和“flink.truststore”文件到新建目录中。
mv flink.keystore ssl/
mv flink.truststore ssl/
- 修改“flink-conf.yaml”文件中如下两个参数为相对路径。
vi /Flink客户端目录/Flink/flink/conf/flink-conf.yaml
security.ssl.keystore: ssl/flink.keystore security.ssl.truststore: ssl/flink.truststore
- 在Flink客户端“conf”目录下新建目录,例如ssl。
- 绝对路径
执行“generate_keystore.sh”脚本后,默认在“flink-conf.yaml”文件中将“flink.keystore”和“flink.truststore”文件路径自动配置为绝对路径,此时需要将“conf”目录中的“flink.keystore”和“flink.truststore”文件分别放置在Flink客户端以及Yarn各个节点的该绝对路径上。
- 相对路径(推荐)