Kerberos是一种网络身份验证协议,用于提供安全的身份验证服务,以保证通信的安全性。只有在Flink开发控制台正确配置Kerberos和Kafka服务的信息,Flink作业才能访问开启Kerberos认证服务的Kafka集群。本文为您介绍如何为Kafka客户端开启Kerberos认证。
使用限制
云消息队列Kafka版暂不支持Kerberos认证。
步骤一:准备工作
在开始认证之前,您需要进行以下操作。
获取配置文件。
krb5.conf
是Kerberos认证环境下的配置文件。定义了Kerberos集群和连接配置,配置项的说明请参见Kerberos文档。keytab
文件包含用户的身份验证凭据,用于向Kerberos服务器认证身份。
配置域名解析。
Kerberos依赖于域名解析进行认证,需要将KDC和Kafka服务的域名和IP地址配置在Flink开发控制台中,域名解析的配置方式请参见管理域名。
KDC服务器:KDC服务器域名和IP地址定义在
krb5.conf
配置文件中。Kafka broker:broker的域名和IP地址定义在
server.properties
配置文件中。重要Kafka客户端必须使用broker在Kerberos服务中注册的域名进行连接,否则Kerberos无法认证。您可以通过查看
principal
来确定broker是否在Kerberos服务中注册了域名,详情请参见Kerberos基础使用。Kafka集群所有的broker都需要设置域名解析。例如Kafka broker1在Kerberos服务中注册的principal为
kafka/broker1.example.com@EXAMPLE.com
,则请为broker1.example.com
配置域名解析。
配置访问规则。
KDC所在机器的88端口地址需要允许来自Flink所在的网络连接。
步骤二:上传Kerberos配置文件
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在左侧导航栏,单击文件管理。
单击上传资源。选择您要上传的
krb5.conf
和keytab
文件。后续作业配置时,如果上传后的文件名为
krb5.conf
和keytab
,则可通过路径/flink/usrlib/krb5.conf
和/flink/usrlib/keytab
引用两个文件。说明Flink开发控制台支持为不同的Kafka客户端配置不同的Kerberos用户,如果您的作业使用了多个Kerberos用户,请上传全部用户的keytab文件。
单击打开,进行资源上传。
步骤三:配置Kerberos
方式一:SQL作业
配置Kafka表。
新建或打开已有SQL作业,新建作业请参见SQL作业开发。
在Kafka表的WITH参数中添加以下配置来为Kafka客户端开启Kerberos认证。
CREATE TEMPORARY TABLE kafka_kerberos ( ... )WITH ( 'connector' = 'kafka', // 必须使用Kafka在Kerberos中注册的域名 'properties.bootstrap.servers' = 'broker1.example.com:9092', // 本文以SASL_PLAINTEXT为例 'properties.security.protocol' = 'SASL_PLAINTEXT', 'properties.sasl.mechanism' = 'GSSAPI', // 根据实际情况修改配置中的principal中的用户名和realm 'properties.sasl.jaas.config' = 'com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/flink/usrlib/keytab" principal="user@EXAMPLE.COM";', // 该值是在Kerberos中注册的principal的服务名 'properties.sasl.kerberos.service.name' = 'kafka', // 请补充其余配置 ... )
参数项说明请参见CONFIGURATION。
部署作业,详情请参见部署作业。
配置运行参数。
前往
页面,单击目标作业名称。在部署详情页签运行参数配置区域的其他配置中添加如下配置项,为JVM指定Kerberos配置文件。
env.java.opts: '-Djava.security.krb5.conf=/flink/usrlib/krb5.conf'
单击保存。
单击页面右上方的启动按钮。
方式二:DataStream作业
配置Kafka Source和Kafka Sink。
开发DataStream作业,详情请参见JAR作业开发。
在代码中设置以下配置来为Kafka客户端开启Kerberos认证。
KafkaSource.builder() ... // 必须使用Kafka在Kerberos中注册的域名 .setBootstrapServers("broker1.example.com:9092") // 本文以SASL_PLAINTEXT为例 .setProperty("security.protocol", "SASL_PLAINTEXT") .setProperty("sasl.mechanism", "GSSAPI") // 根据Kerberos上注册的信息来配置principal中的用户名和realm .setProperty("sasl.jaas.config", "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab=\"/flink/usrlib/keytab\" principal=\"user@EXAMPLE.COM\";") // 该值是在Kerberos中注册的principal的服务名 .setProperty("sasl.kerberos.service.name", "kafka") KafkaSink.builder() ... // 必须使用Kafka在Kerberos中注册的域名 .setBootstrapServers("broker1.example.com:9092") // 本文以SASL_PLAINTEXT为例 .setProperty("security.protocol", "SASL_PLAINTEXT") .setProperty("sasl.mechanism", "GSSAPI") // 根据Kerberos上注册的信息来配置principal中的用户名和realm .setProperty("sasl.jaas.config", "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab=\"/flink/usrlib/keytab\" principal=\"user@EXAMPLE.COM\";") // 该值是在Kerberos中注册的principal的服务名 .setProperty("sasl.kerberos.service.name", "kafka")
参数项说明请参见CONFIGURATION。
配置运行参数。
完成DataStream作业开发后,将项目工程打包。
将生产的JAR包上传和部署到Flink开发控制台,详情请参见部署JAR作业。
在作业运维页面部署详情页签运行参数配置区域的其他配置中添加以下配置项,为JVM指定Kerberos配置文件。
env.java.opts: '-Djava.security.krb5.conf=/flink/usrlib/krb5.conf'
单击保存。
单击页面右上方的启动按钮。