Azure HDInsight 中的身份验证问题
本文介绍在与 Azure HDInsight 群集交互时出现的问题的故障排除步骤和可能的解决方案。
在由 Azure Data Lake(Gen1 或 Gen2)提供支持的安全群集上,当域用户通过 HDI 网关登录到群集服务时(例如登录到 Apache Ambari 门户),HDI 网关会首先尝试从 Microsoft Entra 获取 OAuth 令牌,然后从 Microsoft Entra 域服务获取 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: 09cc9b95-4354-46b7-91f1-efd92665ae00\r\n Correlation ID: 4209bedf-f195-4486-b486-95a15b70fbe4\r\nTimestamp: 2019-01-28 17:49:58Z","error_codes":[70002,50126], "timestamp":"2019-01-28 17:49:58Z","trace_id":"09cc9b95-4354-46b7-91f1-efd92665ae00","correlation_id":"4209bedf-f195-4486-b486-95a15b70fbe4"}
原因
Microsoft Entra 错误代码 50126 意味着租户尚未设置 AllowCloudPasswordValidation
策略。
解决方法
Microsoft Entra 租户的全局管理员应支持 Microsoft Entra ID 对 ADFS 支持的用户使用密码哈希。 应用 AllowCloudPasswordValidationPolicy
,如在 HDInsight 中使用企业安全性套餐一文所示。
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: bbb819b2-4c6f-4745-854d-0b72006d6800\r\nCorrelation ID: b009c737-ee52-43b2-83fd-706061a72b41\r\nTimestamp: 2019-04-29 15:52:16Z", "error_codes":[50034],"timestamp":"2019-04-29 15:52:16Z","trace_id":"bbb819b2-4c6f-4745-854d-0b72006d6800", "correlation_id":"b009c737-ee52-43b2-83fd-706061a72b41"}
原因
用户名不正确(不存在)。 用户所使用的用户名与 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: 844ac5d8-8160-4dee-90ce-6d8c9443d400\r\nCorrelation ID: 23fe8867-0e8f-4e56-8764-0cdc7c61c325\r\nTimestamp: 2019-06-06 09:47:23Z","error_codes":[50053],"timestamp":"2019-06-06 09:47:23Z","trace_id":"844ac5d8-8160-4dee-90ce-6d8c9443d400","correlation_id":"23fe8867-0e8f-4e56-8764-0cdc7c61c325"}
原因
使用错误密码进行了过多的登录尝试。
解决方法
等待 30 分钟左右,停止任何可能尝试进行身份验证的应用程序。
invalid_grant 或 unauthorized_client,50053 (#2)
问题
密码已过期,错误代码为 50053。 错误消息类似于:
{"error":"user_password_expired","error_description":"AADSTS50055: Password is expired.\r\nTrace ID: 241a7a47-e59f-42d8-9263-fbb7c1d51e00\r\nCorrelation ID: c7fe4a42-67e4-4acd-9fb6-f4fb6db76d6a\r\nTimestamp: 2019-06-06 17:29:37Z","error_codes":[50055],"timestamp":"2019-06-06 17:29:37Z","trace_id":"241a7a47-e59f-42d8-9263-fbb7c1d51e00","correlation_id":"c7fe4a42-67e4-4acd-9fb6-f4fb6db76d6a","suberror":"user_password_expired","password_change_url":"https://portal.partner.microsoftonline.cn/ChangePassword.aspx"}
原因
密码已过期。
解决方法
(在本地系统上)在 Azure 门户中更改密码,然后等待 30 分钟以便同步跟上进度。
interaction_required
问题
收到错误消息 interaction_required
。
原因
条件访问策略或 MFA 正在应用于用户。 由于目前尚不支持交互式身份验证,因此需要从 MFA /条件访问中豁免用户或群集。 如果选择免除群集(基于 IP 地址的免除策略),请确保为该 vnet 启用 AD ServiceEndpoints
。
解决方法
使用条件访问策略并豁免 HDInisght 群集进行 MFA,如使用 Microsoft Entra 域服务配置具有企业安全性套餐的 HDInsight 群集中所示。
登录被拒绝
问题
登录被拒绝。
原因
要进入此阶段,你的 OAuth 身份验证不是问题,但 Kerberos 身份验证是问题。 如果此群集由 ADLS 提供支持,则在尝试 Kerberos 身份验证之前,OAuth 登录已成功。 在 WASB 群集上,不会尝试 OAuth 登录。 Kerberos 失败可能有多个原因,例如密码哈希不同步、用户帐户在 Microsoft Entra 域服务中被锁定等。 仅当用户更改密码时,才会同步密码哈希。 在创建 Microsoft Entra 域服务实例时,它将开始同步创建后更改的密码。 它无法以追溯方式同步在它启动之前设置的密码。
解决方法
如果你认为密码可能不同步,请尝试更改密码并等待几分钟,以便完成同步。
尝试以 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
失败。
原因
用户名或密码不正确。
解决方法
检查你的用户名和密码。 还要检查所述的其他属性。 若要启用详细调试,请在尝试 kinit 之前从会话运行 export KRB5_TRACE=/tmp/krb.log
。
作业/HDFS 命令因 TokenNotFoundException 而失败
问题
由于 TokenNotFoundException
,作业/HDFS 命令失败。
原因
找不到成功执行作业/命令所需的 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 门户提交支持请求。 从菜单栏中选择“支持” ,或打开“帮助 + 支持” 中心。