協調器 Kerberos 驗證¶
可以設定 Presto 協調器,以便為客戶端(例如 Presto CLI 或 JDBC 和 ODBC 驅動程式)啟用透過 HTTPS 的 Kerberos 驗證。
若要為 Presto 啟用 Kerberos 驗證,請在 Presto 協調器上進行組態變更。不需要變更工作節點配置;工作節點將繼續透過未驗證的 HTTP 連線至協調器。但是,如果您想要使用 SSL/TLS 保護 Presto 節點之間的通訊,請設定 安全內部通訊。
環境配置¶
Kerberos 服務¶
您需要一個在 Presto 協調器可以透過網路連線的節點上執行的 Kerberos KDC。KDC 負責驗證主體,並發出可用於啟用 Kerberos 的服務的工作階段金鑰。KDC 通常在 88 埠上執行,這是 IANA 指派給 Kerberos 的埠。
MIT Kerberos 配置¶
需要在 Presto 協調器上配置 Kerberos。至少,在 /etc/krb5.conf
檔案的 [realms]
區段中需要有一個 kdc
項目。您可能也會想要包含一個 admin_server
項目,並確保 Presto 協調器可以連線至 749 埠上的 Kerberos 管理伺服器。
[realms]
PRESTO.EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.presto.example.com = PRESTO.EXAMPLE.COM
presto.example.com = PRESTO.EXAMPLE.COM
krb5.conf
的完整文件是由 MIT Kerberos 專案所託管。如果您正在使用 Kerberos 通訊協定的不同實作,則需要調整組態以符合您的環境。
Kerberos 主體和金鑰表檔案¶
Presto 協調器需要一個 Kerberos 主體,而連線至 Presto 協調器的使用者也需要一個。您需要使用 kadmin 在 Kerberos 中建立這些使用者。
此外,Presto 協調器還需要一個金鑰表檔案。在您建立主體之後,可以使用 kadmin 建立金鑰表檔案
kadmin
> addprinc -randkey presto@EXAMPLE.COM
> addprinc -randkey presto/presto-coordinator.example.com@EXAMPLE.COM
> ktadd -k /etc/presto/presto.keytab presto@EXAMPLE.COM
> ktadd -k /etc/presto/presto.keytab presto/presto-coordinator.example.com@EXAMPLE.COM
注意
執行 ktadd 會隨機化主體的金鑰。如果您剛建立主體,這並不重要。如果主體已經存在,並且如果現有的使用者或服務依賴能夠使用密碼或金鑰表進行驗證,請使用 ktadd 的 -norandkey
選項。
Java 加密擴充原則檔案¶
Java Runtime Environment 隨附了原則檔案,這些檔案會限制可使用的加密金鑰強度。依預設,Kerberos 使用的金鑰大於隨附原則檔案支援的金鑰。有兩個可能的解決方案可以解決此問題
更新 JCE 原則檔案。
設定 Kerberos 以使用降低強度的金鑰。
在這兩個選項中,建議更新 JCE 原則檔案。JCE 原則檔案可以從 Oracle 下載。請注意,JCE 原則檔案會根據您執行的 Java 主要版本而有所不同。例如,Java 6 原則檔案無法與 Java 8 搭配使用。
Java 8 原則檔案可在此處取得。ZIP 封存檔中的 README
檔案中包含安裝原則檔案的指示。如果您在系統 JRE 中安裝原則檔案,則需要管理員存取權限才能安裝。
用於 TLS 的 Java 金鑰儲存檔案¶
使用 Kerberos 驗證時,應該透過 HTTPS 存取 Presto 協調器。您可以在協調器上建立 用於 TLS 的 Java 金鑰儲存檔案 來執行此操作。
系統存取控制外掛程式¶
啟用 Kerberos 的 Presto 協調器可能需要一個 系統存取控制 外掛程式,才能達到所需的安全性等級。
Presto 協調器節點配置¶
您必須先對環境進行上述變更,然後才能設定 Presto 協調器以使用 Kerberos 驗證和 HTTPS。在進行下列環境變更之後,您可以對 Presto 組態檔案進行變更。
config.properties¶
Kerberos 驗證是在協調器節點的 config.properties
檔案中設定。需要新增的項目如下所列。
http-server.authentication.type=KERBEROS
http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.service-hostname=presto.example.com
http.server.authentication.krb5.keytab=/etc/presto/presto.keytab
http.authentication.krb5.config=/etc/krb5.conf
http-server.https.enabled=true
http-server.https.port=7778
http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password
屬性 |
描述 |
---|---|
|
Presto 協調器的驗證類型。必須設定為 |
|
Presto 協調器的 Kerberos 服務名稱。必須與 Kerberos 主體相符。 |
|
Presto 協調器的 Kerberos 主機名稱。必須與 Kerberos 主體相符。此參數為選用。如果包含此參數,Presto 將在 Kerberos 主體的主機部分中使用此值,而不是電腦的主機名稱。 |
|
可用於驗證 Kerberos 主體的金鑰表位置。 |
|
Kerberos 組態檔案的位置。 |
|
為 Presto 協調器啟用 HTTPS 存取。應該設定為 |
|
HTTPS 伺服器埠。 |
|
將用於保護 TLS 的 Java 金鑰儲存檔案位置。 |
|
金鑰儲存的密碼。這必須與您在建立金鑰儲存時指定的密碼相符。 |
注意
啟用 HTTPS 後,監控 Presto 協調器上的 CPU 使用率。如果允許 Java 從一個很大的清單中選擇,它會偏好使用 CPU 密集度較高的密碼套件。如果在啟用 HTTPS 後 CPU 使用率高到無法接受,您可以設定 Java,透過設定 http-server.https.included-cipher
屬性來僅允許使用較省資源的密碼套件,以使用特定的密碼套件。預設情況下,非前向保密 (FS) 密碼套件是停用的。因此,如果您想選擇非 FS 密碼套件,您需要將 http-server.https.excluded-cipher
屬性設定為空清單,以覆蓋預設的排除設定。
http-server.https.included-cipher=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256
http-server.https.excluded-cipher=
Java 文件列出了支援的密碼套件。
access-controls.properties¶
至少,access-control.properties
檔案必須包含 access-control.name
屬性。所有其他設定都是針對正在設定的實作而定的。請參閱系統存取控制以獲取詳細資訊。
疑難排解¶
讓 Kerberos 身份驗證運作可能具有挑戰性。您可以獨立驗證 Presto 之外的一些設定,以幫助您在嘗試解決問題時縮小焦點。
Kerberos 驗證¶
請確保您可以使用 telnet 從 Presto 協調器連線到 KDC。
$ telnet kdc.example.com 88
驗證是否可以使用 keytab 檔案,透過 kinit 和 klist 成功取得票證。
$ kinit -kt /etc/presto/presto.keytab presto@EXAMPLE.COM
$ klist
Java 金鑰儲存檔案驗證¶
驗證金鑰儲存檔案的密碼,並使用 Java 金鑰儲存檔案驗證檢視其內容。
其他 Kerberos 除錯資訊¶
您可以透過將以下幾行新增到 Presto jvm.config
檔案中,為 Presto 協調器程序啟用其他 Kerberos 除錯資訊。
-Dsun.security.krb5.debug=true
-Dlog.enable-console=true
-Dsun.security.krb5.debug=true
會啟用來自 JRE Kerberos 函式庫的 Kerberos 除錯輸出。除錯輸出會傳送到 stdout
,而 Presto 會將其重新導向到記錄系統。-Dlog.enable-console=true
會啟用 stdout
的輸出顯示在記錄中。
Kerberos 除錯輸出傳送到記錄中的資訊量和實用性,取決於身份驗證失敗的位置。例外訊息和堆疊追蹤也可以提供有關問題本質的有用線索。