Azure HDInsight 中企業安全性的一般資訊和指導方針

部署安全的 HDInsight 叢集時,有一些最佳做法應該會讓部署和叢集管理更容易。 這裡會討論一些一般資訊和指導方針。

使用安全叢集

  • 叢集將同時供多個使用者使用。
  • 使用者對相同資料的存取層級不同。

非必要

  • 您只會執行自動化作業 (例如單一使用者帳戶),標準叢集就已足夠。
  • 您可以使用標準叢集執行資料匯入,並在使用者可以執行分析作業的不同安全叢集上使用相同的儲存體帳戶。

使用本機帳戶

  • 如果您使用共用使用者帳戶或本機帳戶,則很難識別使用該帳戶來變更設定或服務的人員。
  • 當使用者不再屬於組織時,使用本機帳戶會有問題。

Ranger

原則

  • 根據預設,Ranger 會使用 [拒絕] 作為原則。

  • 透過啟用授權的服務進行資料存取時:

    • 已叫用 Ranger 授權外掛程式,並指定要求的內容。
    • Ranger 會套用為服務設定的原則。 如果 Ranger 原則失敗,存取檢查會延後至檔案系統。 某些服務 (例如 MapReduce) 只會檢查提交要求的相同使用者是否擁有檔案/資料夾。 Hive 之類的服務會檢查擁有權相符或適當的檔案系統權限 (rwx)。
  • 針對 Hive,除了擁有建立/更新/刪除的權限之外,使用者應該具有儲存體目錄和所有子目錄的 rwx 權限。

  • 原則可以套用至群組 (最好) 而不是個人。

  • Ranger 授權者會針對每個要求評估該服務的所有 Ranger 原則。 此評估可能會影響接受作業或查詢所需的時間。

儲存體存取

  • 如果儲存體類型為 WASB,則不會涉及 OAuth 權杖。
  • 如果 Ranger 已執行授權,則儲存體存取會使用受控識別進行。
  • 如果 Ranger 未執行任何授權,則儲存體存取會使用使用者的 OAuth 權杖進行。

階層式命名空間

當階層式命名空間未啟用時:

  • 沒有繼承的權限。
  • 唯一可運作的檔案系統權限是儲存體資料 XXXX Azure 角色,才能直接在 Azure 入口網站中指派給使用者。

預設 HDFS 權限

  • 根據預設,使用者無法存取 HDFS 上的 / 資料夾 (他們必須具有儲存體 Blob 擁有者角色,才能成功存取)。
  • 針對 mapreduce 和其他項目的預備目錄,會建立使用者特定的目錄並提供 sticky _wx 權限。 使用者可以在下方建立檔案和資料夾,但是無法查看其他項目。

URL 驗證

如果已啟用 URL 驗證:

  • 組態將會包含 URL 驗證中所涵蓋的前置詞 (例如 adl://)。
  • 如果存取適用於此 URL,則 Ranger 會檢查使用者是否在允許清單中。
  • Ranger 不會檢查任何精細的原則。

管理 Ranger 稽核記錄

若要防止 Ranger 稽核記錄在 hn0 前端節點上耗用太多磁碟空間,您可以變更天數以保留記錄。

  1. 登入 [Ambari UI]
  2. 瀏覽至 [服務] >[Ranger] >[設定] >[進階] >[進階 ranger-solr-configuration]
  3. 將 [保留天數上限] 變更為 7 天或更少。
  4. 選取 [儲存],然後重新啟動受影響的元件,使變更生效。

使用自訂 Ranger DB

建議您部署外部 Ranger DB 來搭配 ESP 叢集使用,以實現 Ranger 中繼資料的高可用性,確保即使在叢集無法使用的情況下仍可使用原則。 由於外部資料庫是由客戶所管理,因此您也可以調整 DB 大小,並跨多個 ESP 叢集共用資料庫。 您可以使用 Azure 入口網站、Azure Resource Manager、Azure CLI 等,在 ESP 叢集建立期間指定外部 Ranger DB

將 Ranger 使用者同步設定為每日執行

HDInsight ESP 叢集為 Ranger 設定每小時自動同步處理 AD 使用者。 Ranger 同步處理是使用者同步處理,且可能會造成 AD 執行個體的額外負載。 基於這個理由,我們建議您將 Ranger 使用者同步間隔變更為 24 小時。

  1. 登入 [Ambari UI]
  2. 瀏覽至 [服務] >[Ranger] >[設定] >[進階] >[ranger-ugsync-site]
  3. ranger.usersync.sleeptimeinmillisbetweensynccycle 屬性設定為 86400000 (24 小時,以毫秒為單位)。
  4. 選取 [儲存],然後重新啟動受影響的元件,使變更生效。

資源群組

針對每個叢集使用新的資源群組,以便區分叢集資源。

NSG、防火牆和內部閘道

  • 使用網路安全性群組 (NSG) 來鎖定虛擬網路。
  • 使用防火牆來處理輸出存取原則。
  • 使用未開放至公用網際網路的內部閘道。

Microsoft Entra ID

Microsoft Entra ID (Microsoft Entra ID) 是 Microsoft 的雲端式身分識別與存取管理服務。

原則

  • 使用 IP 位址型原則停用條件式存取原則。 這需要在部署叢集的 VNET 上啟用服務端點。 如果您針對 MFA 使用外部服務 (非 Microsoft Entra ID 的服務),IP 位址型原則將無法運作

  • AllowCloudPasswordValidation 原則是同盟使用者的必要項目。 由於 HDInsight 會直接使用使用者名稱/密碼從 Microsoft Entra ID 取得權杖,因此必須為所有同盟使用者啟用此原則。

  • 如果您需要使用信任 IP 的條件式存取略過,請啟用服務端點。

群組

  • 一律使用群組部署叢集。
  • 使用 Microsoft Entra ID 來管理群組成員資格 (比嘗試管理叢集中的個別服務更簡單)。

使用者帳戶

  • 針對每個案例使用唯一個使用者帳戶。 例如,針對匯入使用一個帳戶,針對查詢或其他處理作業使用另一個帳戶。
  • 使用群組型 Ranger 原則,而不是個別原則。
  • 規劃如何管理不應再具有叢集存取權的使用者。

Microsoft Entra 網域服務

Microsoft Entra Domain Services 提供受控網域服務,例如,網域加入、群組原則、輕量型目錄存取通訊協定 (LDAP) 和 Kerberos / NTLM 驗證,與 Windows Server Active Directory 完全相容。

安全叢集需要 Microsoft Entra Domain Services 才能加入網域。 HDInsight 無法相依於內部部署網域控制站或自訂網域控制站,因為引進太多錯誤點、認證共用、DNS 權限等等。 如需詳細資訊,請參閱 Microsoft Entra Domain Services 常見問題

選擇正確的 Microsoft Entra Domain Services SKU

建立受控網域時,您可以從不同的 SKU 中選擇,以提供不同等級的效能和功能。 使用 Microsoft Entra Domain Services 執行個體進行驗證要求的 ESP 叢集和其他應用程式數量會決定哪項 SKU 適用於您的組織。 如果您發現受控網域的 CPU 偏高或商業需求產生變更時,您可以升級 SKU。

Microsoft Entra Domain Services 執行個體

  • 使用 .onmicrosoft.com domain 建立執行個體。 如此一來,就不會有多個 DNS 伺服器提供網域。
  • 建立 LDAPS 的自我簽署憑證,並將其上傳至 Microsoft Entra Domain Services。
  • 使用對等互連的虛擬網路來部署叢集 (當您有一些小組部署 HDInsight ESP 叢集時,這很有幫助)。 這樣可確保您不需要使用網域控制站在虛擬網路上開啟連接埠 (NSG)。
  • 適當地設定虛擬網路的 DNS (Microsoft Entra Domain Services 網域名稱應該可以解析,不需任何主機檔案項目)。
  • 如果您要限制輸出流量,請確定您已閱讀 HDInsight 中的防火牆支援

考慮 Microsoft Entra Domain Services 複本集

當建立 Microsoft Entra Domain Services 受控網域時,您會定義一個非重複的命名空間,然後兩個域控制器 (DC) 將會部署到您所選取的 Azure 區域。 這個 DC 的部署稱為複本集。 新增其他副本集 會提供復原功能,並確保驗證服務的可用性,這對 Azure HDInsight 叢集至關重要。

設定範圍的使用者/群組同步處理

當您為 ESP 叢集啟用 Microsoft Entra Domain Services 時,您可以選擇同步處理 Microsoft Entra ID 或範圍群組及其成員的所有使用者和群組。 建議您選擇「範圍」進行同步處理,以獲得最佳效能。

範圍同步處理 可以修改為不同的群組選取範圍,或視需要轉換成「所有」使用者和群組。 除非您刪除並重新建立 Microsoft Entra Domain Services 實例,否則您無法將同步處理類型從「所有」變更為「範圍」。

從 Microsoft Entra ID 同步至 Microsoft Entra Domain Services 的屬性

  • Microsoft Entra Connect 會從內部部署同步處理至 Microsoft Entra ID。
  • Microsoft Entra Domain Services 從 Microsoft Entra ID 同步。

Microsoft Entra Domain Services 從 Microsoft Entra ID 定期同步。 Azure 入口網站上的 [Microsoft Entra Domain Services] 刀鋒視窗會顯示同步狀態。 在同步處理的每個階段期間,唯一的屬性可能會發生衝突並重新命名。 請注意從 Microsoft Entra ID 至 Microsoft Entra Domain Services 的屬性對應。

如需詳細資訊,請參閱 Microsoft Entra UserPrincipalName 母體擴展Microsoft Entra Domain Services 同步處理的運作方式

密碼雜湊同步處理

  • 密碼的同步方式與其他物件類型不同。 Microsoft Entra ID 和 Microsoft Entra Domain Services 中只會同步處理無法復原的密碼摘要
  • 內部部署至Microsoft Entra ID 必須透過 AD Connect 啟用
  • Microsoft Entra ID 至 Microsoft Entra Domain Services 為自動同步 (延遲小於 20 分鐘)。
  • 只有在密碼變更時,才會同步密碼雜湊。 當您啟用密碼雜湊同步處理時,所有現有的密碼不會自動同步處理,因為這些密碼是以不可逆轉的方式儲存。 當您變更密碼時,密碼雜湊會同步處理。

將 Ambari LDAP 同步設定為每日執行

將新 LDAP 使用者同步至 Ambari 的流程會自動設定為每小時執行一次。 每小時執行此動作可能會導致叢集前端節點和 AD 執行個體上過多的負載。 為了提升效能,建議您變更執行 Ambari LDAP 同步處理的 /opt/startup_scripts/start_ambari_ldap_sync.py 指令碼,以每天執行一次。 此指令碼會透過 crontab 作業執行,並儲存在叢集前端節點上的目錄 “/etc/cron.hourly/”。

若要每天執行一次,請執行下列步驟:

  1. 透過 SSH 連線至 hn0
  2. 將指令碼移至 cron 每日資料夾:sudo mv /etc/cron.hourly/ambarildapsync /etc/cron.daily/ambarildapsync
  3. 在 crontab 作業中套用變更:sudo service cron reload
  4. ssh 至 hn1 並重複步驟 1 - 3

如有需要,您可以使用 Ambari REST API,以立即手動同步處理新的使用者和群組

電腦物件位置

每個叢集都與單一 OU 相關聯。 內部使用者是在 OU 中佈建的。 所有節點都會加入相同 OU 的網域。

Active Directory 管理工具

如需如何在 Windows Server VM 上安裝 Active Directory 系統管理工具的步驟,請參閱安裝管理工具

疑難排解

叢集建立會重複失敗

最常見的原因:

  • DNS 設定不正確,叢集節點的網域加入失敗。
  • NSG 太嚴格,導致無法加入網域。
  • 受控識別沒有足夠的權限。
  • 叢集名稱的前六個字元不是唯一 (與其他即時叢集相同,或與已刪除的叢集相同)。

驗證設定和組態

使用者主體名稱 (UPN)

  • 請針對所有服務使用小寫 - ESP 叢集中的 UPN 不區分大小寫,但是
  • UPN 前置詞應符合 Microsoft Entra Domain Services 中的 SAMAccountName。 不需要與郵件欄位比對。

Ambari 組態中的 LDAP 屬性

如需影響 HDInsight 叢集組態的 Ambari 屬性完整清單,請參閱 Ambari LDAP 驗證設定

產生網域使用者金鑰表

在 ESP 叢集建立流程期間,系統會自動為您產生所有服務金鑰表。 若要啟用叢集與其他需要驗證之服務和/或作業之間的安全通訊,您可以為您的網域使用者名稱產生金鑰表。

使用其中一個 VM 叢集上的 ktutil 來建立 Kerberos 金鑰表:


ktutil
ktutil: addent -password -p <username>@<DOMAIN.COM> -k 1 -e aes256-cts-hmac-sha1-96
Password for <username>@<DOMAIN.COM>: <password>
ktutil: wkt <username>.keytab
ktutil: q

如果您的 TenantName 與 DomainName 不同,則需要使用 -s 選項來新增 SALT 值。 檢查 HDInsight 常見問題頁面,以在建立 Kerberos 金鑰表時判斷適當的 SALT 值

LDAP 憑證更新

HDInsight 會透過企業安全性套件 (ESP) 自動更新您用於叢集的受控識別憑證。 不過,當 Microsoft Entra Domain Services 和 ADLS Gen2 使用不同的受控識別時,就會出現限制,進而導致續約流程失敗。 請遵循下列 2 項建議,以確保我們能夠成功更新您的憑證:

  • 如果您針對 ADLS Gen2 和 Microsoft Entra Domain Services 叢集使用不同的受控識別,則兩者都應該有指派給它們的儲存體 Blob 資料擁有者HDInsight 網域服務參與者角色。
  • HDInsight 叢集需要公用 IP 進行憑證更新和其他維修,因此應移除任何在叢集上拒絕公用 IP 的原則

下一步