授權

Presto 可以設定為啟用 HTTP 端點的授權支援,讓系統管理員可以控制對 Presto 中不同 HTTP 端點的存取權限。

基於角色的存取控制

Presto 中的每個 HTTP 端點都受到一組角色的保護,而且只有屬於這些角色之一的身分才能存取。Presto 中定義了三個角色

  • user:應該可以存取外部端點的使用者,例如啟動查詢、檢查狀態、取得輸出資料以及為 UI 提供資料所需的端點。

  • internal:Presto 的內部元件(例如協調器和工作節點),它們可以存取諸如在工作節點上啟動任務和從另一個工作節點擷取交換資料的端點。

  • admin:可以存取內部服務端點(例如取得節點狀態)的系統管理員。

啟用授權

若要啟用授權,必須執行下列步驟

啟用驗證

Presto 授權需要驗證才能取得存取者的主體,因此請確保已啟用驗證。

  • 如果已正確設定 TLS/SSL,我們可以只使用憑證來識別存取者。

    http-server.authentication.type=CERTIFICATE
    
  • 也可以指定其他驗證類型,例如 KERBEROSPASSWORDJWT。可能需要其他設定。

    node.internal-address=<authentication type>
    

設定授權器

若要啟用授權,必須實作並繫結介面 com.facebook.airlift.http.server.Authorizer。它會根據傳入請求的主體和被請求端點的允許角色執行實際的授權檢查。

您可以使用預設的 ConfigurationBasedAuthorizer,也可以實作自己的授權器。

基於設定的授權器

這個外掛程式可讓您透過指定從角色到用於比對身分之正規表示式的對應,來開啟授權支援。請依照下列步驟開始使用基於設定的授權器

  1. 建立角色到身分正規表示式的對應,並將其儲存在檔案中。

    user=.*
    internal=coordinator
    admin=su.*
    
  2. config.properties 檔案中指定對應檔案的路徑

    configuration-based-authorizer.role-regex-map.file-path=<path to mapping file>
    
  3. 安裝 Guice 模組 com.facebook.airlift.http.server.ConfigurationBasedAuthorizerModule

設定授權設定

授權設定是在 config.properties 檔案中設定。工作節點和協調器節點上的授權使用相同的屬性集進行設定。

以下是需要新增至 config.properties 檔案的屬性範例

http-server.authorization.enabled=true
http-server.authorization.default-policy=ALLOW
http-server.authorization.default-allowed-roles=USER,ADMIN
http-server.authorization.allow-unsecured-requests=false

屬性

描述

http-server.authorization.enabled

啟用 Presto 的授權。應設定為 true。預設值為 false

http-server.authorization.default-policy

預設授權原則會套用至未指定允許角色的端點。可以設定為 ALLOWDENYDEFAULT_ROLES

http-server.authorization.default-allowed-roles

當 default-policy 設定為 DEFAULT_ROLES 時,允許存取未明確指定的端點的角色。

http-server.authorization.allow-unsecured-requests

略過未受保護請求的授權檢查。預設值為 false

警告

http-server.authorization.allow-unsecured-requests 提供做為從 HTTP 過渡到具有授權的 HTTPS 的方法,但這是一個安全漏洞,因為它允許未經驗證的請求略過授權檢查。僅在過渡期間啟用,並在您完成移轉到使用 HTTPS 後停用此設定。