CLI Kerberos 驗證

Presto 命令列介面可以連接到已啟用 Kerberos 驗證的 Presto 協調器

環境配置

Kerberos 服務

您需要一個 Kerberos KDC 在用戶端可以透過網路連線到的節點上執行。KDC 負責驗證主體並發出可用於啟用 Kerberos 的服務的工作階段金鑰。KDC 通常在連接埠 88 上執行,這是 IANA 指定給 Kerberos 的連接埠。

MIT Kerberos 配置

需要在用戶端上配置 Kerberos。至少,需要在 /etc/krb5.conf 檔案的 [realms] 區段中設定一個 kdc 項目。您可能還想要包含一個 admin_server 項目,並確保用戶端可以透過連接埠 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 主體。您需要使用 kadmin 在 Kerberos 中建立這些使用者。

此外,每個使用者都需要一個 金鑰表檔案。您可以在建立主體後使用 kadmin 建立金鑰表檔案。

kadmin
> addprinc -randkey someuser@EXAMPLE.COM
> ktadd -k /home/someuser/someuser.keytab someuser@EXAMPLE.COM

注意

執行 ktadd 會隨機化主體的金鑰。如果您剛建立主體,這沒有關係。如果主體已經存在,並且現有使用者或服務依賴於能夠使用密碼或金鑰表進行驗證,請使用 ktadd-norandkey 選項。

Java Cryptography Extension 政策檔案

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 協調器。Presto 協調器會使用 Java 金鑰儲存檔案進行其 TLS 配置。此檔案可以複製到用戶端電腦並用於其配置。

Presto CLI 執行

除了連線到不需要 Kerberos 驗證的 Presto 協調器時所需的選項之外,啟用 Kerberos 支援來叫用 CLI 還需要許多其他命令列選項。叫用 CLI 的最簡單方法是使用包裝腳本。

#!/bin/bash

./presto \
  --server https://presto-coordinator.example.com:7778 \
  --krb5-config-path /etc/krb5.conf \
  --krb5-principal someuser@EXAMPLE.COM \
  --krb5-keytab-path /home/someuser/someuser.keytab \
  --krb5-remote-service-name presto \
  --keystore-path /tmp/presto.jks \
  --keystore-password password \
  --catalog <catalog> \
  --schema <schema>

選項

描述

--server

Presto 協調器的位址和連接埠。連接埠必須設定為 Presto 協調器正在接聽 HTTPS 連線的連接埠。

--krb5-config-path

Kerberos 配置檔案。

--krb5-principal

驗證協調器時要使用的主體。

--krb5-keytab-path

可用於驗證 --krb5-principal 指定的主體的金鑰表位置

--krb5-remote-service-name

Presto 協調器 Kerberos 服務名稱。

--keystore-path

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

--keystore-password

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

疑難排解

許多可用於疑難排解 Presto 協調器的相同步驟也適用於疑難排解 CLI。

其他 Kerberos 除錯資訊

您可以在啟動 CLI 處理序時傳遞 -Dsun.security.krb5.debug=true 作為 JVM 引數,為 Presto CLI 處理序啟用其他 Kerberos 除錯資訊。這樣做需要透過 java 叫用 CLI JAR,而不是直接執行自我可執行 JAR。自我可執行 jar 檔案無法將選項傳遞給 JVM。

#!/bin/bash

java \
  -Dsun.security.krb5.debug=true \
  -jar presto-cli-*-executable.jar \
  --server https://presto-coordinator.example.com:7778 \
  --krb5-config-path /etc/krb5.conf \
  --krb5-principal someuser@EXAMPLE.COM \
  --krb5-keytab-path /home/someuser/someuser.keytab \
  --krb5-remote-service-name presto \
  --keystore-path /tmp/presto.jks \
  --keystore-password password \
  --catalog <catalog> \
  --schema <schema>

在設定 Presto 協調器的 Kerberos 驗證文件中列出的其他資源可能對解讀 Kerberos 除錯訊息有所幫助。