Azure HDInsight ID 代理程式 (HIB)
本文描述如何設定和使用 Azure HDInsight ID 代理程式功能。 您可以使用此功能來取得 Apache Ambari 的新式 OAuth 驗證,同時強制執行多重要素驗證,而不需要 Microsoft Entra Domain Services 中的舊版密碼雜湊。
概觀
HDInsight ID 代理程式可簡化下列情節中的複雜驗證設定:
- 您的組織依賴同盟來驗證使用者是否可以存取雲端資源。 之前,若要使用 HDInsight 企業安全性套件叢集,您必須啟用從內部部署環境到 Microsoft Entra ID 的密碼雜湊同步。 對於某些組織而言,這項需求可能很困難或不需要。
- 您的組織想要針對 Apache Ambari 和其他叢集資源的 Web 型或 HTTP 型存取強制執行多重要素驗證。
HDInsight ID 代理程式提供驗證基礎結構,可讓通訊協定從 OAuth (新式) 轉換至 Kerberos (舊版),而不需要將密碼雜湊同步至 Microsoft Entra Domain Services。 此基礎結構包含 Windows Server 虛擬機器 (VM) 上執行且已啟用 HDInsight ID 代理程式節點的元件,以及叢集閘道節點。
使用下表,根據貴組織的需求來判斷最佳驗證選項。
驗證選項 | HDInsight 設定 | 考量的因素 |
---|---|---|
完全 OAuth | 企業安全性套件 + HDInsight ID 代理程式 | 最安全的選項。 (支援多重要素驗證。)不需要密碼雜湊同步。 內部部署帳戶沒有 ssh/kinit/keytab 存取權,表示在 Microsoft Entra Domain Services 中沒有密碼雜湊。 僅限雲端的帳戶仍然可以 ssh/kinit/keytab。 透過 OAuth 對 Ambari 進行 Web 型存取。 需要更新舊版應用程式 (例如,JDBC/ODBC) 以支援 OAuth。 |
OAuth + 基本驗證 | 企業安全性套件 + HDInsight ID 代理程式 | 透過 OAuth 對 Ambari 進行 Web 型存取。 舊版應用程式會繼續使用基本驗證。必須停用多重要素驗證,才能進行基本驗證存取。 不需要密碼雜湊同步。 內部部署帳戶沒有 ssh/kinit/keytab 存取權,表示在 Microsoft Entra Domain Services 中沒有密碼雜湊。 僅限雲端的帳戶仍然可以 ssh/kinit。 |
完全基本驗證 | 企業安全性套件 | 最類似於內部部署設定。 需要密碼雜湊同步處理至 Microsoft Entra Domain Services。 內部部署帳戶可以 ssh/kinit 或使用 keytab。 如果支援儲存體是 Azure Data Lake Storage Gen2,則必須停用多重要素驗證。 |
下圖顯示啟用 HDInsight ID 代理程式之後所有使用者的新式 OAuth 型驗證流程,包括同盟使用者:
在此圖表中,用戶端 (也就是瀏覽器或應用程式) 必須先取得 OAuth 權杖。 然後,其會在 HTTP 要求中將權杖呈現給閘道。 如果您已登入其他 Azure 服務,例如 Azure 入口網站,則可以使用單一登入體驗登入 HDInsight 叢集。
仍有許多舊版應用程式只支援基本驗證 (也就是使用者名稱和密碼)。 對於這些情節,您仍然可以使用 HTTP 基本驗證來連線到叢集閘道。 在此設定中,您必須確保可透過網路從閘道節點連線到 Active Directory Federation Services (AD FS) 端點,以確保可從閘道節點直接看見。
下圖顯示同盟使用者的基本驗證流程。 首先,閘道會嘗試使用 ROPC 流程完成驗證。 如果沒有同步至 Microsoft Entra ID 的密碼雜湊,其會回復為探索 AD FS 端點,並藉由存取 AD FS 端點來完成驗證。
啟用 HDInsight ID 代理程式
若要建立已啟用 HDInsight ID 代理程式的企業安全性套件叢集,
- 登入 Azure 入口網站。
- 請遵循企業安全性套件叢集的基本建立步驟。 如需詳細資訊,請參閱使用企業安全性套件建立 HDInsight 叢集。
- 選取 [啟用 HDInsight ID 代理程式]。
HDInsight ID 代理程式功能會將一個額外的 VM 新增至叢集。 此 VM 是 HDInsight ID 代理程式節點,其中包含支援驗證的伺服器元件。 HDInsight ID 代理程式節點已加入 Microsoft Entra Domain Services 網域。
使用 Azure 資源管理員範本
如果您將稱為 idbrokernode
並具有下列屬性的新角色加入至範本的計算設定檔,則會在已啟用 HDInsight ID 代理程式節點的情況下建立叢集:
.
.
.
"computeProfile": {
"roles": [
{
"autoscale": null,
"name": "headnode",
....
},
{
"autoscale": null,
"name": "workernode",
....
},
{
"autoscale": null,
"name": "idbrokernode",
"targetInstanceCount": 2,
"hardwareProfile": {
"vmSize": "Standard_A2_V2"
},
"virtualNetworkProfile": {
"id": "string",
"subnet": "string"
},
"scriptActions": [],
"dataDisksGroups": null
}
]
}
.
.
.
若要查看 ARM 範本的完整範例,請參閱這裡發佈的範本。
工具整合
HDInsight 工具會更新為原生支援 OAuth。 使用這些工具,對叢集進行新式 OAuth 型存取。 HDInsight IntelliJ 外掛程式可以用於 Java 型應用程式,例如 Scala。 適用於 Visual Studio Code 的 Spark 和 Hive 工具可以用於 PySpark 和 Hive 作業。 這些工具同時支援批次和互動式作業。
在 Microsoft Entra Domain Services 中沒有密碼雜湊的 SSH 存取
SSH 選項 | 考量的因素 |
---|---|
本機 VM 帳戶 (例如,sshuser) | 您已在建立叢集時提供此帳戶。 此帳戶沒有 Kerberos 驗證。 |
僅限雲端帳戶 (例如,alice@contoso.onmicrosoft.com) | 密碼雜湊可在 Microsoft Entra Domain Services 中使用。 Kerberos 驗證可透過 SSH Kerberos 進行。 |
內部部署帳戶 (例如,alice@contoso.com) | 只有密碼雜湊可在 Microsoft Entra Domain Services 中使用時,才能進行 SSH Kerberos 驗證。 否則,此使用者無法 SSH 到叢集。 |
若要 SSH 到已加入網域的 VM 或執行 kinit
命令,您必須提供密碼。 SSH Kerberos 驗證需要雜湊可在 Microsoft Entra Domain Services 中使用。 如果只想將 SSH 用於系統管理情節,您可以建立一個僅限雲端帳戶,並將其用於 SSH 到叢集。 其他內部部署使用者仍然可以使用 Ambari 或 HDInsight 工具或 HTTP 基本驗證,沒有可在 Microsoft Entra Domain Services 中使用的密碼雜湊。
如果貴組織未將密碼雜湊同步至 Microsoft Entra Domain Services,最佳做法是在 Microsoft Entra ID 中建立一個僅限雲端使用者。 然後,在建立叢集時將其指派為叢集管理員,並用於管理用途。 您可以使用其透過 SSH 取得 VM 的根存取權。
若要針對驗證問題進行疑難排解,請參閱本指南。
搭配 HDInsight ID 代理程式使用 OAuth 連線到 HDInsight 閘道的用戶端
在 HDInsight ID 代理程式設定中,可以更新連線至閘道的自訂應用程式和用戶端,先取得必要的 OAuth 權杖。 如需詳細資訊,請參閱如何使用 Azure 服務驗證 .NET 應用程式。 授權存取 HDInsight 閘道所需的金鑰值如下:
- OAuth 資源 URI:
https://hib.azurehdinsight.net
- AppId:0000111-aaaa-2222-bbbb-3333cccc4444
- 權限:(名稱:Cluster.ReadWrite、識別碼:8f89faa0-ffef-4007-974d-4989b39ad77d)
在取得 OAuth 權杖之後,請在叢集閘道 HTTP 要求的授權標頭中使用該權杖 (例如,https://<clustername>-int.azurehdinsight.net)。 Apache Livy API 的範例 Curl 命令看起來可能像下列範例:
curl -k -v -H "Authorization: Bearer Access_TOKEN" -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://<clustername>-int.azurehdinsight.net/livy/batches" -H "X-Requested-By:<username@domain.com>"
如需使用 Beeline 和 Livy,您也可以遵循此處提供的範例程式碼,來設定用戶端以使用 OAuth 並連線到叢集。
常見問題集
Microsoft Entra ID 中的 HDInsight 會建立哪個應用程式?
針對每個叢集,協力廠商應用程式將會在 Microsoft Entra ID 中註冊,而叢集 URI 做為 identifierUri (例如 https://clustername.azurehdinsight.net
)。
為何在使用啟用 HIB 的叢集之前,會提示使用者同意?
在 Microsoft Entra ID 中,所有協力廠商應用程式必須同意,然後才能驗證使用者或存取資料。
是否可以程式設計方式核准同意?
Microsoft Graph API 可讓您將同意自動化,請參閱 API 文件。將同意自動化的順序如下:
- 註冊應用程式,並將 Application.ReadWrite.All 權限授與應用程式,以存取 Microsoft Graph
- 在建立叢集之後,請根據識別碼 URI 查詢叢集應用程式
- 應用程式的註冊同意
刪除叢集時,HDInsight 會刪除應用程式,而且不需要清除任何同意。