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”>“配置”>“高级”>“Advanced ranger-solr-configuration”。
  3. 将“最长保留天数”更改为 7 天或更短。
  4. 选择“保存”并重启受影响的组件,使更改生效。

使用自定义 Ranger DB

建议部署外部 Ranger DB 以与 ESP 群集配合使用,以实现 Ranger 元数据的高可用性,从而确保即使群集不可用,策略也可用。 由于外部数据库由客户管理,因此还可以优化 DB 大小,并在多个 ESP 群集之间共享数据库。 可以使用 Azure 门户、Azure 资源管理器、Azure CLI 等指定 ESP 集群创建过程中的外部 Ranger DB

将 Ranger 用户同步设置为每天运行

为 Ranger 配置 HDInsight ESP 群集,每小时自动同步 AD 用户。 Ranger 同步是用户同步,可能会导致 AD 实例上产生额外负载。 出于此原因,建议将 Ranger 用户同步间隔更改为 24 小时。

  1. 登录到 Ambari UI。
  2. 导航到“服务”>“Ranger”>“配置”>“高级”>“ranger-ugsync-site”
  3. 将属性“ranger.usersync.sleeptimeinmillisbetweensynccycle”设置为 86400000(24 小时制,以毫秒为单位)。
  4. 选择“保存”并重启受影响的组件,使更改生效。

资源组

为每个群集使用新的资源组,以便区分群集资源。

NSG、防火墙和内部网关

  • 使用网络安全组 (NSG) 锁定虚拟网络。
  • 使用防火墙处理出站访问策略。
  • 请使用未向公共 Internet 开放的内部网关。

Microsoft Entra ID

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 域服务

Microsoft Entra 域服务提供与 Windows Server Active Directory 完全兼容的托管域服务,例如域加入、组策略、轻型目录访问协议 (LDAP) 和 Kerberos/NTLM 身份验证。

若要让安全群集加入域,Microsoft Entra 域服务是必需的。 HDInsight 不能依赖于本地域控制器或自定义域控制器,因为它引入了太多的故障点、凭据共享、DNS 权限等。 有关详细信息,请参阅 Microsoft Entra 域服务常见问题解答

选择正确的 Microsoft Entra 域服务 SKU

创建托管域时,可以从提供不同级别的性能和功能的不同 SKU 中进行选择。 将使用 Microsoft Entra 域服务实例进行身份验证请求的 ESP 群集和其他应用程序的数量决定了哪个 SKU 适合你的组织。 如果发现托管域的 CPU 利用率过高或业务要求发生更改,可以升级 SKU。

Microsoft Entra 域服务实例

  • 创建使用 .partner.onmschina.cn domain 的实例。 这样就不会有多个 DNS 服务器为域提供服务。
  • 为 LDAPS 创建自签名证书并将其上传到 Microsoft Entra 域服务。
  • 使用对等互连虚拟网络来部署群集(当你有许多团队部署 HDInsight ESP 群集时,这会很有用)。 这可以确保你不需要在具有域控制器的虚拟网络上打开端口 (NSG)。
  • 为虚拟网络正确配置 DNS(Microsoft Entra 域服务域名应该可以在没有任何 hosts 文件条目的情况下进行解析)。
  • 如果要限制出站流量,请确保已通读 HDInsight 中的防火墙支持一文

考虑 Microsoft Entra 域服务副本集

创建 Microsoft Entra 域服务托管域时,定义一个唯一的命名空间,然后将两个域控制器 (DC) 部署到所选 Azure 区域。 DC 的这种部署称为副本集。 添加其他副本集将提供复原能力并确保身份验证服务的可用性,这对 Azure HDInsight 群集至关重要。

配置作用域内用户/组同步

为 ESP 群集启用 Microsoft Entra 域服务 时,可以选择从 Microsoft Entra ID 或作用域组及其成员同步所有用户和组。 为了获得最佳性能,建议选择“作用域”同步。

可以使用不同的组选择修改作用域内同步,或者根据需要转换为“全部”用户和组。 无法将同步类型从“全部”更改为“作用域”,除非删除并重新创建 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 分钟)。
  • 只有在密码已更改的情况下,才会同步密码哈希。 启用密码哈希同步时,所有现有的密码都不会自动同步,因为它们是以不可逆方式存储的。 更改密码时,密码哈希会同步。

将 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)

  • 请为所有服务使用小写,不过 UPN 在 ESP 群集中不区分大小写
  • UPN 前缀应与 Microsoft Entra 域服务中的 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 域服务和 ADLS Gen2 使用不同的托管标识时,存在可能导致续签过程失败的限制。 请遵循以下 2 条建议,确保成功续签证书:

  • 如果你对 ADLS Gen2 和 Microsoft Entra 域服务群集使用了不同的托管标识,则它们都应分配有“存储 blob 数据所有者”和“HDInsight 域服务参与者”角色。
  • HDInsight 群集需要公共 IP 来进行证书更新和其他维护,因此应删除拒绝群集上公共 IP 的任何策略。

后续步骤