登錄安全性

本文檔說明服務登錄中如何實作安全性

在未啟用 Kerberos 的 Hadoop 群集中,登錄完全不提供任何安全性:登錄可供全世界寫入。

因此,本文檔僅與安全群集相關。

安全性模型

登錄的安全性模型旨在符合安全登錄的下列目標:1. 在安全的 ZK 安裝上提供功能性安全性。1. 允許 RM 為註冊空間建立每個使用者的區域1. 允許屬於使用者的應用程式將登錄項目寫入其空間部分。這些可能是短暫或長期的 YARN 應用程式,或可能是靜態應用程式。1. 禁止其他使用者寫入其他使用者的登錄部分。1. 允許系統服務註冊到登錄的 /services 區段。1. 提供讀取存取權給登錄的客戶端。1. 允許未來支援 DNS1. 允許未來支援註冊私人資料給使用者。這允許服務發布繫結憑證(金鑰等)供客戶端使用。1. 不需要 YARN 群集中的每個使用者的家目錄中都有 ZK keytab。這表示 YARN 應用程式無法使用 kerberos 憑證。

ZK 安全性使用 ACL 模型,記載於 Zookeeper and SASL,其中不同的驗證機制可用於限制對不同 znode 的存取。這允許註冊表使用混合 Kerberos + 私密密碼模型。

  • 基於 YARN 的註冊表 (RMRegistryOperationsService) 使用 kerberos 作為 YARN 本身的驗證機制。
  • 註冊表將註冊表的基礎設定為僅能由其本身和其他持有相關 kerberos 憑證的 hadoop 系統帳戶寫入。
  • 樹狀結構的使用者特定部分也設定為允許相同的系統帳戶寫入和操作樹狀結構的該部分。
  • 使用者帳戶會使用授予其樹狀結構部分寫入存取權的 (username,password) 金鑰對建立。
  • 金鑰對的機密部分儲存在 HDFS 上使用者的家目錄中,使用 Hadoop 憑證 API。
  • 最初,整個註冊表樹狀結構將可供全世界讀取。

這種機制的限制是什麼?

  1. 使用者特定註冊表金鑰對必須保密非常重要。這仰賴檔案系統安全性,讓檔案僅能由(經過驗證的)使用者讀取。
  2. 正如 ZK 文件所述,*「驗證是透過傳送明文的使用者名稱:密碼來完成的」*
  3. 雖然可以變更帳戶的密碼,但這會涉及遞迴走訪註冊表樹狀結構,並且會讓所有正在執行的服務無法重新載入金鑰之前,驗證寫入存取權。
  4. 可供全世界讀取的註冊表樹狀結構會揭露關於叢集的資訊。這裡有一些緩解措施,因為存取可能會受到 IP 位址的限制。
  5. 還有需要將資訊從註冊表傳播到客戶端,以設定 ACL。

ACL 設定傳播

註冊表管理員無法依賴客戶端持續設定 ZK 權限。至少,他們無法依賴客戶端應用程式無意間為系統服務的帳戶提供錯誤的值

解決方案:最初,此處使用登錄許可權。

自動網域延伸

在 kerberos 網域中,kerberos 化用戶可以從本地用戶的 kerberos 憑證(用於與 YARN 或 HDFS 通訊)在執行階段確定叢集的領域。

這可用於自動產生具有正確領域的帳戶名稱,以供系統帳戶使用,從而有助於擁有有效的常數。

這允許登錄支援 hadoop.registry.system.accounts 的預設組態值

  "sasl:yarn@, sasl:mapred@, sasl:hdfs@, sasl:hadoop@";

核心繫結資料的登錄內發布

另一種策略是在登錄的根目錄中建立一個 ServiceRecord,實際上定義登錄(包括在 data 欄位中列出那些預設繫結值)。

稽核

某些項目(可能是 RM)可以掃描使用者的登錄部分,並偵測一些 ACL 問題:IP/世界存取過於寬鬆、管理員帳戶設定錯誤。除非它具有 ADMIN 許可權,否則它無法檢視或修復 ACL 許可權,不過至少可以偵測到該情況。由於 RM 必須在堆疊中具有 DELETE 許可權,因此它可以刪除樹的錯誤部分,儘管這可能會造成毀滅性的過度反應。

進一步閱讀