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