部署安全的 HDInsight 群集时,可以遵循一些最佳做法来简化部署和群集管理工作。 本文介绍了一些常规信息和准则。
- 群集将由多个用户同时使用。
- 不同用户对同一数据的访问权限级别不同。
- 你只需运行自动化作业(像单用户帐户一样),使用标准群集就足够了。
- 你可以使用标准群集执行数据导入,在可供用户运行分析作业的不同安全群集上使用同一存储帐户。
- 如果你使用共享用户帐户或本地帐户,则很难确定使用过该帐户更改配置或服务的人员。
- 当用户不再是组织的成员时,使用本地帐户会出现问题。
默认情况下,Ranger 使用“拒绝”作为策略。
通过在其中启用了授权的服务进行数据访问时:
- 会调用 Ranger 授权插件并为其提供请求上下文。
- Ranger 应用为服务配置的策略。 如果 Ranger 策略失败,则会将访问检查推迟到文件系统。 某些服务(如 MapReduce)仅检查提交请求的用户所拥有的文件/文件夹。 Hive 之类的服务会检查所有权是否匹配或文件系统权限是否适当 (
rwx
)。
对于 Hive,用户除了拥有执行创建/更新/删除操作的权限外,还应当对存储上的目录和所有子目录拥有
rwx
权限。可以将策略应用于组(首选)而不是个人。
Ranger 授权程序会针对每个请求评估针对该服务的所有 Ranger 策略。 此评估可能会影响接受作业或查询所耗费的时间。
- 如果存储类型为 WASB,则不涉及任何 OAuth 令牌。
- 如果 Ranger 已执行授权操作,则可使用托管标识进行存储访问。
- 如果 Ranger 未执行任何授权操作,则会使用用户的 OAuth 令牌进行存储访问。
如果未启用分层命名空间,则:
- 没有继承的权限。
- 能够使用的唯一文件系统权限是存储数据 XXXX Azure 角色,该角色直接在 Azure 门户中分配给用户。
- 默认情况下,用户无权访问 HDFS 上的 / 文件夹(需要具有存储 blob 所有者角色才能成功访问)。
- 对于 MapReduce 和其他服务的暂存目录,系统会创建特定于用户的目录,并为其提供
sticky _wx
权限。 用户可以在其下创建文件和文件夹,但不能查看其他项目。
如果启用了 URL 身份验证,则:
- 配置将涉及 URL 身份验证中包含哪些前缀(例如
adl://
)。 - 如果访问权限是针对此 URL 的,则 Ranger 会检查用户是否在允许列表中。
- Ranger 不检查任何细化策略。
若要防止 Ranger 审核日志在 hn0 头节点上消耗过多磁盘空间,可以更改保留日志的天数。
- 登录到 Ambari UI。
- 导航到“服务”>“Ranger”>“配置”>“高级”>“Advanced ranger-solr-configuration”。
- 将“最长保留天数”更改为 7 天或更短。
- 选择“保存”并重启受影响的组件,使更改生效。
建议部署外部 Ranger DB 以与 ESP 群集配合使用,以实现 Ranger 元数据的高可用性,从而确保即使群集不可用,策略也可用。 由于外部数据库由客户管理,因此还可以优化 DB 大小,并在多个 ESP 群集之间共享数据库。 可以使用 Azure 门户、Azure 资源管理器、Azure CLI 等指定 ESP 集群创建过程中的外部 Ranger DB。
为 Ranger 配置 HDInsight ESP 群集,每小时自动同步 AD 用户。 Ranger 同步是用户同步,可能会导致 AD 实例上产生额外负载。 出于此原因,建议将 Ranger 用户同步间隔更改为 24 小时。
- 登录到 Ambari UI。
- 导航到“服务”>“Ranger”>“配置”>“高级”>“ranger-ugsync-site”
- 将属性“ranger.usersync.sleeptimeinmillisbetweensynccycle”设置为 86400000(24 小时制,以毫秒为单位)。
- 选择“保存”并重启受影响的组件,使更改生效。
为每个群集使用新的资源组,以便区分群集资源。
- 使用网络安全组 (NSG) 锁定虚拟网络。
- 使用防火墙处理出站访问策略。
- 请使用未向公共 Internet 开放的内部网关。
Microsoft Entra ID (Microsoft Entra ID) 是 Azure 的集中式标识和访问管理服务。
禁用使用了基于 IP 地址的策略的条件访问策略。 这要求在部署群集的 VNET 上启用服务终结点。 如果对 MFA 使用外部服务(不同于 Microsoft Entra ID 的服务),则基于 IP 地址的策略将不起作用
对于联合用户,
AllowCloudPasswordValidation
策略是必需的。 由于 HDInsight 直接使用用户名/密码从 Microsoft Entra ID 获取令牌,因此必须为所有联合用户启用此策略。如果需要使用受信任的 IP 来绕过条件访问,请启用服务终结点。
- 始终通过组来部署群集。
- 使用 Microsoft Entra ID 来管理组成员身份(比尝试管理群集中的各项服务更轻松)。
- 为每个方案使用唯一的用户帐户。 例如,将一个帐户用于导入,将另一个帐户用于查询或其他处理作业。
- 使用基于组的 Ranger 策略,而不是使用个体策略。
- 计划如何管理不应再访问群集的用户。
Microsoft Entra 域服务提供与 Windows Server Active Directory 完全兼容的托管域服务,例如域加入、组策略、轻型目录访问协议 (LDAP) 和 Kerberos/NTLM 身份验证。
若要让安全群集加入域,Microsoft Entra 域服务是必需的。 HDInsight 不能依赖于本地域控制器或自定义域控制器,因为它引入了太多的故障点、凭据共享、DNS 权限等。 有关详细信息,请参阅 Microsoft Entra 域服务常见问题解答。
创建托管域时,可以从提供不同级别的性能和功能的不同 SKU 中进行选择。 将使用 Microsoft Entra 域服务实例进行身份验证请求的 ESP 群集和其他应用程序的数量决定了哪个 SKU 适合你的组织。 如果发现托管域的 CPU 利用率过高或业务要求发生更改,可以升级 SKU。
- 创建使用
.partner.onmschina.cn domain
的实例。 这样就不会有多个 DNS 服务器为域提供服务。 - 为 LDAPS 创建自签名证书并将其上传到 Microsoft Entra 域服务。
- 使用对等互连虚拟网络来部署群集(当你有许多团队部署 HDInsight ESP 群集时,这会很有用)。 这可以确保你不需要在具有域控制器的虚拟网络上打开端口 (NSG)。
- 为虚拟网络正确配置 DNS(Microsoft Entra 域服务域名应该可以在没有任何 hosts 文件条目的情况下进行解析)。
- 如果要限制出站流量,请确保已通读 HDInsight 中的防火墙支持一文
创建 Microsoft Entra 域服务托管域时,定义一个唯一的命名空间,然后将两个域控制器 (DC) 部署到所选 Azure 区域。 DC 的这种部署称为副本集。 添加其他副本集将提供复原能力并确保身份验证服务的可用性,这对 Azure HDInsight 群集至关重要。
为 ESP 群集启用 Microsoft Entra 域服务 时,可以选择从 Microsoft Entra ID 或作用域组及其成员同步所有用户和组。 为了获得最佳性能,建议选择“作用域”同步。
可以使用不同的组选择修改作用域内同步,或者根据需要转换为“全部”用户和组。 无法将同步类型从“全部”更改为“作用域”,除非删除并重新创建 Microsoft Entra 域服务实例。
- Microsoft Entra Connect 可将用户从本地同步到 Microsoft Entra ID。
- Microsoft Entra 域服务从 Microsoft Entra ID 同步。
Microsoft Entra 域服务定期从 Microsoft Entra ID 同步对象。 Azure 门户上的 Microsoft Entra 域服务边栏选项卡会显示同步状态。 在每个同步阶段,唯一属性可能会在出现冲突后重命名。 请注意从 Microsoft Entra ID 到 Microsoft Entra 域服务的属性映射。
有关详细信息,请参阅 Microsoft Entra UserPrincipalName 填充和Microsoft Entra 域服务同步的工作原理。
- 密码的同步与其他对象类型不同。 只有不可逆的密码哈希会在 Microsoft Entra ID 和 Microsoft Entra 域服务中同步
- 必须通过 AD Connect 启用从本地到 Microsoft Entra ID 的同步
- Microsoft Entra ID 到 Microsoft Entra 域服务的同步是自动进行的(延迟低于 20 分钟)。
- 只有在密码已更改的情况下,才会同步密码哈希。 启用密码哈希同步时,所有现有的密码都不会自动同步,因为它们是以不可逆方式存储的。 更改密码时,密码哈希会同步。
将新 LDAP 用户同步到 Ambari 的过程会自动配置为每小时运行一次。 每小时运行一次可能会导致群集的头节点和 AD 实例产生过多负载。 为了提高性能,建议将运行 Ambari LDAP 同步的 /opt/startup_scripts/start_ambari_ldap_sync.py 脚本更改为每天运行一次。 此脚本将运行一个 crontab 作业,且其存储在群集头节点上的目录“/etc/cron.hourly/”中。
若要使其每天运行一次,请执行以下步骤:
- ssh 到 hn0
- 将脚本移动到 cron 每日文件夹:
sudo mv /etc/cron.hourly/ambarildapsync /etc/cron.daily/ambarildapsync
- 在 crontab 作业中应用更改:
sudo service cron reload
- 从 ssh 连接到 hn1 并重复步骤 1-3
如果需要,可以立即使用 Ambari REST API 手动同步新用户和组。
每个群集都与单个 OU 相关联。 OU 中预配了一个内部用户。 所有节点都以域加入方式加入到同一个 OU 中。
有关详细信息,请参阅安装管理工具。
最常见原因:
- DNS 配置不正确,群集节点的域加入操作失败。
- NSG 过于严格,阻止加入域。
- 托管标识没有足够的权限。
- 群集名称的前六个字符不唯一(与其他实时群集或已删除群集的相同)。
- 请为所有服务使用小写,不过 UPN 在 ESP 群集中不区分大小写
- UPN 前缀应与 Microsoft Entra 域服务中的 SAMAccountName 匹配。 不要求与邮件字段匹配。
有关影响 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 值。
HDInsight 将自动续签用于使用企业安全性套餐 (ESP) 的群集的托管标识的证书。 但是,当 Microsoft Entra 域服务和 ADLS Gen2 使用不同的托管标识时,存在可能导致续签过程失败的限制。 请遵循以下 2 条建议,确保成功续签证书:
- 如果你对 ADLS Gen2 和 Microsoft Entra 域服务群集使用了不同的托管标识,则它们都应分配有“存储 blob 数据所有者”和“HDInsight 域服务参与者”角色。
- HDInsight 群集需要公共 IP 来进行证书更新和其他维护,因此应删除拒绝群集上公共 IP 的任何策略。