MAPREDUCE服务 MRS-配置Flink认证和加密:安全认证
安全认证
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认证。
- 针对 MRS 3.x之前版本,Flink不支持使用security cookie方式进行认证。
表1 安全认证方式 安全认证方式
说明
配置方法
Kerberos认证
当前只支持keytab认证方式。
- 从 FusionInsight Manager下载用户keytab,并将keytab放到Flink客户端所在主机的某个文件夹下。
- 在“flink-conf.yaml”上配置:
- keytab路径。
security.kerberos.login.keytab: /home/flinkuser/keytab/abc222.keytab
说明:
“/home/flinkuser/keytab/abc222.keytab”表示的是用户目录。
- principal名。
security.kerberos.login.principal: abc222
- 对于HA模式,如果配置了ZooKeeper,还需要设置ZK kerberos认证相关的配置。配置如下:
zookeeper.sasl.disable: false security.kerberos.login.contexts: Client
- 如果用户对于Kafka client和Kafka broker之间也需要做kerberos认证,配置如下:
security.kerberos.login.contexts: Client,KafkaClient
- keytab路径。
Security Cookie 认证
-
- 参考签发Flink证书样例章节生成“generate_keystore.sh”脚本并放置在Flink客户端的“bin”目录下,调用“generate_keystore.sh”脚本,生成“Security Cookie”、“flink.keystore”文件和“flink.truststore”文件。
执行sh generate_keystore.sh,输入用户自定义密码。密码不允许包含#。说明:
执行脚本后,在Flink客户端的“conf”目录下生成“flink.keystore”和“flink.truststore”文件,并且在客户端配置文件“flink-conf.yaml”中将以下配置项进行了默认赋值。
- 将配置项“security.ssl.keystore”设置为“flink.keystore”文件所在绝对路径。
- 将配置项“security.ssl.truststore”设置为“flink.truststore”文件所在的绝对路径。
- 将配置项“security.cookie”设置为“generate_keystore.sh”脚本自动生成的一串随机规则密码。
- 默认“flink-conf.yaml”中“security.ssl.encrypt.enabled: false”,“generate_keystore.sh”脚本将配置项“security.ssl.key-password”、“security.ssl.keystore-password”和“security.ssl.truststore-password”的值设置为调用“generate_keystore.sh”脚本时输入的密码。配置文件中包含认证密码信息可能存在安全风险,建议当前场景执行完毕后删除相关配置文件或加强安全管理。
- MRS 3.x及之后版本,如果需要使用密文时,设置“flink-conf.yaml”中“security.ssl.encrypt.enabled: true”,“generate_keystore.sh”脚本不会配置“security.ssl.key-password”、“security.ssl.keystore-password”和“security.ssl.truststore-password”的值,需要使用Manager明文加密API进行获取,执行curl -k -i -u user name:password -X POST -HContent-type:application/json -d '{"plainText":"password"}' 'https://x.x.x.x:28443/web/api/v2/tools/encrypt'
其中user name:password分别为当前系统登录用户名和密码;"plainText"的password为调用“generate_keystore.sh”脚本时的密码;x.x.x.x为集群Manager的浮动IP。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。
- 查看是否打开“Security Cookie”开关,即查看配置“flink-conf.yaml”文件中的“security.enable: true”,查看“security cookie”是否已配置成功,例如:
security.cookie: ae70acc9-9795-4c48-ad35-8b5adc8071744f605d1d-2726-432e-88ae-dd39bfec40a9
说明:用户需要获取SSL证书,放置到Flink客户端中。具体操作可参考签发Flink证书样例。
使用MRS客户端预制“generate_keystore.sh”脚本获取SSL证书有效期为5年。参考签发Flink证书样例获取的SSL证书有效期为10年。
若要关闭默认的SSL认证方式,需在“flink-conf.yaml”文件中配置“security.ssl.enabled”的值为“false”,并且注释如下参数:security.ssl.key-password、security.ssl.keystore-password、security.ssl.keystore、security.ssl.truststore-password、security.ssl.trustore。
YARN内部认证方式
该方式是YARN内部的认证方式,不需要用户配置。
-
当前一个Flink集群只支持一个用户,一个用户可以创建多个Flink集群。