本文檔說明服務登錄中如何實作安全性
在未啟用 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 + 私密密碼模型。
RMRegistryOperationsService
) 使用 kerberos 作為 YARN 本身的驗證機制。(username,password)
金鑰對建立。這種機制的限制是什麼?
註冊表管理員無法依賴客戶端持續設定 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
許可權,因此它可以刪除樹的錯誤部分,儘管這可能會造成毀滅性的過度反應。