協調器 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

屬性

描述

http-server.authentication.type

Presto 協調器的驗證類型。必須設定為 KERBEROS

http.server.authentication.krb5.service-name

Presto 協調器的 Kerberos 服務名稱。必須與 Kerberos 主體相符。

http.server.authentication.krb5.principal-hostname

Presto 協調器的 Kerberos 主機名稱。必須與 Kerberos 主體相符。此參數為選用。如果包含此參數,Presto 將在 Kerberos 主體的主機部分中使用此值,而不是電腦的主機名稱。

http.server.authentication.krb5.keytab

可用於驗證 Kerberos 主體的金鑰表位置。

http.authentication.krb5.config

Kerberos 組態檔案的位置。

http-server.https.enabled

為 Presto 協調器啟用 HTTPS 存取。應該設定為 true

http-server.https.port

HTTPS 伺服器埠。

http-server.https.keystore.path

將用於保護 TLS 的 Java 金鑰儲存檔案位置。

http-server.https.keystore.key

金鑰儲存的密碼。這必須與您在建立金鑰儲存時指定的密碼相符。

注意

啟用 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 檔案,透過 kinitklist 成功取得票證。

$ 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 除錯輸出傳送到記錄中的資訊量和實用性,取決於身份驗證失敗的位置。例外訊息和堆疊追蹤也可以提供有關問題本質的有用線索。

其他資源

常見的 Kerberos 錯誤訊息 (A-M)

常見的 Kerberos 錯誤訊息 (N-Z)

MIT Kerberos 文件:疑難排解