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'
單擊保存。
單擊頁面右上方的啟動按鈕。