Azure HDInsight 中的驗證問題
本文說明與 Azure HDInsight 叢集互動時若遇到問題,可使用哪些疑難排解步驟和可能的解決方案。
在 Azure Data Lake Gen2 所支援的安全叢集上,當網域使用者透過 HDI 閘道登入叢集服務時 (例如登入 Apache Ambari 入口網站),HDI 閘道會先嘗試從 Microsoft Entra 取得 OAuth 權杖,然後從 Microsoft Entra Domain Services 取得 Kerberos 票證。 驗證可能在這些階段的任一階段中失敗。 本文旨在偵錯其中一些問題。
驗證失敗時,系統會提示您輸入認證。 如果您取消此對話方塊,則會顯示錯誤訊息。 以下是一些常見的錯誤訊息:
invalid_grant 或 unauthorized_client,50126
問題
同盟使用者登入失敗,出現錯誤碼 50126 (雲端使用者登入成功)。 錯誤訊息類似:
Reason: Bad Request, Detailed Response: {"error":"invalid_grant","error_description":"AADSTS70002: Error validating credentials. AADSTS50126: Invalid username or password\r\nTrace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333\r\n Correlation ID: aaaa0000-bb11-2222-33cc-444444dddddd\r\nTimestamp: 2019-01-28 17:49:58Z","error_codes":[70002,50126], "timestamp":"2019-01-28 17:49:58Z","trace_id":"0000aaaa-11bb-cccc-dd22-eeeeee333333","correlation_id":"aaaa0000-bb11-2222-33cc-444444dddddd"}
原因
Microsoft Entra 錯誤碼 50126 表示租用戶未設定 AllowCloudPasswordValidation
原則。
解決方法
Microsoft Entra 租用戶的管理員應該讓 Microsoft Entra ID 針對 ADFS 支援的使用者使用密碼雜湊。 如在 HDInsight 中使用企業安全性套件一文所示套用 AllowCloudPasswordValidationPolicy
。
invalid_grant 或 unauthorized_client,50034
問題
登入失敗,出現錯誤碼 50034。 錯誤訊息類似:
{"error":"invalid_grant","error_description":"AADSTS50034: The user account Microsoft.AzureAD.Telemetry.Diagnostics.PII doesn't exist in the 0c349e3f-1ac3-4610-8599-9db831cbaf62 directory. To sign into this application, the account must be added to the directory.\r\nTrace ID: 2222cccc-33dd-eeee-ff44-aaaaaa555555\r\nCorrelation ID: cccc2222-dd33-4444-55ee-666666ffffff\r\nTimestamp: 2019-04-29 15:52:16Z", "error_codes":[50034],"timestamp":"2019-04-29 15:52:16Z","trace_id":"2222cccc-33dd-eeee-ff44-aaaaaa555555", "correlation_id":"cccc2222-dd33-4444-55ee-666666ffffff"}
原因
使用者名稱不正確 (不存在)。 使用者未使用在 Azure 入口網站中使用的相同使用者名稱。
解決方法
使用在該入口網站中運作的相同使用者名稱。
invalid_grant 或 unauthorized_client,50053
問題
使用者帳戶已鎖定,錯誤碼 50053。 錯誤訊息類似:
{"error":"unauthorized_client","error_description":"AADSTS50053: You've tried to sign in too many times with an incorrect user ID or password.\r\nTrace ID: 00aa00aa-bb11-cc22-dd33-44ee44ee44ee\r\nCorrelation ID: 11bb11bb-cc22-dd33-ee44-55ff55ff55ff\r\nTimestamp: 2019-06-06 09:47:23Z","error_codes":[50053],"timestamp":"2019-06-06 09:47:23Z","trace_id":"aaaa0000-bb11-2222-33cc-444444dddddd","correlation_id":"aaaa0000-bb11-2222-33cc-444444dddddd"}
原因
使用不正確的密碼嘗試登入太多次。
解決方法
等候大約 30 分鐘,停止任何可能嘗試進行驗證的任何應用程式。
invalid_grant 或 unauthorized_client,50053 (#2)
問題
密碼已過期,錯誤碼 50053。 錯誤訊息類似:
{"error":"user_password_expired","error_description":"AADSTS50055: Password is expired.\r\nTrace ID: 6666aaaa-77bb-cccc-dd88-eeeeee999999\r\nCorrelation ID: eeee4444-ff55-6666-77aa-888888bbbbbb\r\nTimestamp: 2019-06-06 17:29:37Z","error_codes":[50055],"timestamp":"2019-06-06 17:29:37Z","trace_id":"6666aaaa-77bb-cccc-dd88-eeeeee999999","correlation_id":"eeee4444-ff55-6666-77aa-888888bbbbbb","suberror":"user_password_expired","password_change_url":"https://portal.microsoftonline.com/ChangePassword.aspx"}
原因
密碼已過期。
解決方法
在 Azure 入口網站中變更密碼 (內部部署系統上),然後等候 30 分鐘讓同步趕上。
interaction_required
問題
收到錯誤訊息 interaction_required
。
原因
使用者套用了條件式存取原則或 MFA。 由於尚不支援互動式驗證,因此使用者或叢集必須從 MFA/條件式存取中免除。 如果您選擇豁免該叢集 (以 IP 位址為基礎的豁免原則),則請確定已針對該 VNet 啟用 AD ServiceEndpoints
。
解決方法
使用條件式存取原則並將 HDInisght 叢集從 MFA 中豁免,如使用 Microsoft Entra Domain Services 設定具有企業安全性套件的 HDInsight 叢集所示。
登入遭拒
問題
登入遭拒。
原因
若要到達此階段,您的 OAuth 驗證不是問題,但 Kerberos 驗證是問題。 如果此叢集是由 ADLS 支援,則嘗試 Kerberos 驗證之前,OAuth 登入已成功。 在 WASB 叢集上,不會嘗試 OAuth 登入。 Kerberos 失敗的原因有很多,例如密碼雜湊不同步、使用者帳戶在 Microsoft Entra Domain Services 中遭到鎖定等等。 密碼雜湊只會在使用者變更密碼時同步。 建立 Microsoft Entra Domain Services 執行個體時,其會開始同步在建立之後變更的密碼。 其無法回溯同步在開始之前設定的密碼。
解決方法
如果您認為密碼可能不同步,請嘗試變更密碼,並等候幾分鐘的時間來同步。
嘗試透過 SSH 連接。您必須嘗試從已加入網域的電腦,使用相同使用者認證來驗證 (kinit)。 使用本機使用者透過 SSH 連接至前端/邊緣節點,然後執行 kinit。
kinit 失敗
問題
Kinit 失敗。
原因
變動。
解決方法
若要讓 kinit 成功,您必須知道您的 sAMAccountName
(這是簡短帳戶名稱,沒有領域)。 sAMAccountName
通常是帳戶前置詞 (例如 bob@contoso.com
中的 bob)。 對於某些使用者而言,可能會不同。 您必須能夠瀏覽/搜尋目錄,才能知道您的 sAMAccountName
。
尋找 sAMAccountName
的方法:
如果您可以使用本機 Ambari 系統管理員登入 Ambari,查看使用者的清單。
如果您有已加入網域的 Windows 電腦,則可以使用標準 Windows AD 工具來瀏覽。 這需要網域中的工作帳戶。
從前端節點,您可以使用 SAMBA 命令來搜尋。 這需要有效的 Kerberos 工作階段 (成功的 kinit)。 net ads search "(userPrincipalName=bob*)"
搜尋/瀏覽結果應該會顯示
sAMAccountName
屬性。 此外,您也可以查看其他屬性,例如pwdLastSet
、badPasswordTime
、userPrincipalName
等等,以查看這些屬性是否符合您的預期。
kinit 失敗並且出現預先驗證失敗
問題
Kinit 失敗並且 Preauthentication
失敗。
原因
使用者名稱或密碼不正確。
解決方法
檢查您的使用者名稱和密碼。 另請檢查所述的其他屬性。 若要啟用詳細資訊偵錯,請先從工作階段執行 export KRB5_TRACE=/tmp/krb.log
,然後再嘗試 kinit。
作業/HDFS 命令因 TokenNotFoundException 而失敗
問題
作業/HDFS 命令因 TokenNotFoundException
而失敗。
原因
找不到作業/命令成功所需的 OAuth 存取權杖。 ADLS/ABFS 驅動程式會先嘗試從認證服務擷取 OAuth 存取權杖,再提出儲存要求。 使用相同使用者登入 Ambari 入口網站時,就會註冊此權杖。
解決方法
確保您已成功透過身分識別用來執行作業的使用者名稱登入 Ambari 入口網站一次。
擷取存取權杖時發生錯誤
問題
使用者收到錯誤訊息 Error fetching access token
。
原因
使用者嘗試使用 ACL 存取 ADLS Gen2 時間歇性地發生此錯誤,並且 Kerberos 權杖已到期。
解決方法
若為 Azure Data Lake Storage Gen1,請清除瀏覽器快取,然後再次登入 Ambari。
若為 Azure Data Lake Storage Gen2,請針對嘗試登入的使用者執行
/usr/lib/hdinsight-common/scripts/RegisterKerbTicketAndOAuth.sh <upn>
下一步
如果您沒有看到您的問題,或無法解決您的問題,請瀏覽下列其中一個管道以取得更多支援:
透過 Azure 社群支援獲得由 Azure 專家所提供的解答。
連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 將 Azure 社群連線到正確的資源:解答、支援和專家。
如果需要更多協助,您可在 Azure 入口網站提交支援要求。 從功能表列中選取 [支援] 或開啟 [說明 + 支援] 中樞。 如需詳細資訊,請參閱如何建立 Azure 支援要求。 Microsoft Azure 訂用帳戶包括訂用帳戶管理及帳務支援的存取權,而技術支援由其中一項 Azure 支援方案提供。