你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

迁移到群集配置的基于角色的细化访问权限

我们将引入一些重要更改,以支持更精细的基于角色的访问以获取敏感信息。 作为这些更改的一部分,如果您是在 2019 年 9 月 3 日 前使用 受影响的实体/方案之一,可能需要采取某些措施。

有哪些改变?

以前,处理“所有者”、“参与者”或“读取者”Azure 角色的群集用户可以通过 HDInsight API 获取机密,因为这些机密可以通过给具有 */read 权限的任何人。 机密被定义为可用于获得超出用户角色允许的访问权限的值,例如群集网关 HTTP 凭据、存储账户密钥和数据库凭据。

从 2019 年 9 月 3 日开始,访问这些机密将需要 Microsoft.HDInsight/clusters/configurations/action 权限,用户将无法使用“读者”角色访问它。 拥有此权限的角色为“参与者”、“所有者”和新的“HDInsight 群集操作员”角色。

我们还引入了一个新的 HDInsight 群集操作员 角色,该角色能够在未被授予参与者或所有者的管理权限的情况下检索机密。 总结:

角色 以前 今后
读取者 - 读取访问,包括机密。 - 读取访问,不包括机密
HDInsight 群集操作员
(新角色)
- 读/写访问,包括机密
贡献者 - 读/写访问,包括机密。
- 创建和管理所有类型的 Azure 资源。
- 执行脚本操作。
无更改
所有者 - 读/写访问,包括机密。
- 对所有资源的完全访问权限
- 将访问权限委托给其他人。
- 执行脚本操作。
无更改

有关如何将 HDInsight 群集操作员角色分配添加到用户以向其授予对群集机密的读/写访问权限的信息,请参阅 向用户添加 HDInsight 群集操作员角色分配

了解实体或方案是否受到影响

以下实体和方案会受到影响:

API

以下 API 已更改或弃用:

  • GET /configurations/{configurationName}(已删除敏感信息)
    • 以前用于获取单个配置类型(包括机密)。
    • 从 2019 年 9 月 3 日开始,此 API 调用现在返回省略机密的各个配置类型。 要获取所有配置(包括机密),请使用新的 POST /configurations 调用。 要仅获取网关设置,请使用新的 POST /getGatewaySettings 调用。
  • GET /configurations(已弃用)
    • 以前用于获取所有配置(包括机密)
    • 自 2019 年 9 月 3 日起,此 API 调用已弃用,不再受支持。 要获取以后的所有配置,请使用新的 POST /configurations 调用。 要获取省略敏感参数的配置,请使用 GET /configurations/{configurationName} 调用。
  • POST /configurations/{configurationName}(已弃用)
    • 以前用于更新网关凭证。
    • 自 2019 年 9 月 3 日起,此 API 调用已弃用,不再受支持。 请改用新的 POST /updateGatewaySettings。

添加了以下替换 API:

Azure HDInsight Tools for Visual Studio Code

如果使用版本 1.1.1 或更低版本,请更新到 最新版本的 Azure HDInsight Tools for Visual Studio Code ,以避免中断。

Azure Toolkit for IntelliJ

如果使用版本 3.20.0 或更低版本,请更新到 最新版本的 Azure Toolkit for IntelliJ 插件 ,以避免中断。

适用于 Visual Studio 的 Azure 数据湖和流分析工具

为避免中断,请将适用于 Visual Studio 的 Azure Data Lake 和流分析工具更新至 2.3.9000.1 或更高版本。 有关更新的帮助,请参阅我们的文档更新适用于 Visual Studio 的数据湖工具

Azure Toolkit for Eclipse

如果使用版本 3.15.0 或更低版本,请更新到 最新版本的 Azure Toolkit for Eclipse ,以避免中断。

用于 .NET 的 SDK

版本 1.x 和 2.x

更新到适用于 .NET 的 HDInsight SDK 版本 2.1.0。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改:

  • ClusterOperationsExtensions.GetClusterConfigurations 不再返回敏感参数 ,例如存储密钥(核心站点)或 HTTP 凭据(网关)。

    • 要检索所有配置(包括敏感参数),请在今后使用 ClusterOperationsExtensions.ListConfigurations。 具有“读者”角色的用户无法使用此方法。 它可以精细控制哪些用户可以访问群集的敏感信息。
    • 要仅检索 HTTP 网关凭证,请使用 ClusterOperationsExtensions.GetGatewaySettings
  • ClusterOperationsExtensions.GetConnectivitySettings 已弃用并替换为 ClusterOperationsExtensions.GetGatewaySettings

  • ClusterOperationsExtensions.ConfigureHttpSettings 已弃用并替换为 ClusterOperationsExtensions.UpdateGatewaySettings

  • ConfigurationsOperationsExtensions.EnableHttpDisableHttp 已弃用。 始终启用 HTTP,因此不再需要这些方法。

版本 3.x 及更高版本

更新到适用于 .NET 的 HDInsight SDK 版本 5.0.0 或更高版本。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改:

用于 Python 的 SDK

更新到适用于 Python 的 HDInsight SDK 版本 1.0.0 或更高版本。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改:

用于 Java 的 SDK

更新到适用于 Java 的 HDInsight SDK 版本 1.0.0 或更高版本。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改:

  • ConfigurationsInner.get 不再返回敏感参数 ,例如存储密钥(核心站点)或 HTTP 凭据(网关)。
  • ConfigurationsInner.update 已弃用。

用于 Go 的 SDK

更新到 HDInsight SDK for Go 版本 27.1.0 或更高版本。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改:

Az.HDInsight PowerShell

更新到 Az PowerShell 版本 2.0.0 或更高版本以避免中断。 如果使用受这些更改影响的方法,可能需要进行最少的代码修改。

  • Grant-AzHDInsightHttpServicesAccess 已弃用并替换为新的 Set-AzHDInsightGatewayCredential cmdlet。
  • Get-AzHDInsightJobOutput 已更新,以支持对存储密钥的基于角色的精细访问。
    • 具有 HDInsight 群集操作员、参与者或所有者角色的用户不会受到影响。
    • 只具有“读者”角色的用户需要显式指定 DefaultStorageAccountKey 参数。
  • Revoke-AzHDInsightHttpServicesAccess 已弃用。 始终启用 HTTP,因此不再需要此 cmdlet。 请参阅 az.HDInsight 迁移指南,了解更多详细信息。

将 HDInsight 群集操作员角色分配给用户

具有“所有者”角色的用户可以将 HDInsight 群集操作员角色分配给其他用户,从而使这些用户能够对敏感的 HDInsight 群集配置值(例如群集网关凭据和存储帐户密钥)拥有读/写权限

使用 Azure CLI

添加此角色分配的最简单方法是在 Azure CLI 中使用 az role assignment create 命令。

注释

此命令必须由具有“所有者”角色的用户运行,因为只有他们才能授予这些权限。 --assignee 是要获配 HDInsight 群集作员角色的用户的服务主体或电子邮件地址的名称。 如果收到权限不足错误,请参阅常见问题解答。

在资源(群集)级别授予角色

az role assignment create --role "HDInsight Cluster Operator" --assignee <user@domain.com> --scope /subscriptions/<SubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.HDInsight/clusters/<ClusterName>

在资源组级别授予角色

az role assignment create --role "HDInsight Cluster Operator" --assignee user@domain.com -g <ResourceGroupName>

在订阅级别授予角色

az role assignment create --role "HDInsight Cluster Operator" --assignee user@domain.com

使用 Azure 门户

或者,也可以使用 Azure 门户将 HDInsight 群集作员角色分配添加到用户。 请参阅文档使用 Azure 门户分配 Azure 角色

FAQ

更新 API 请求和/或工具后,为什么会出现“403(禁止访问)”响应?

群集配置现已受细化的基于角色的访问控制保护,访问这些配置需要具备 Microsoft.HDInsight/clusters/configurations/* 权限。 若要获取此权限,请将 HDInsight 群集操作员、参与者或所有者角色分配给尝试访问配置的用户或服务主体。

运行 Azure CLI 命令将“HDInsight 群集操作员”角色分配到另一个用户或服务主体时,为何会出现“权限不足,无法完成该操作”?

执行该命令的用户或服务主体除了要有“所有者”角色以外,还需要有足够的 Microsoft Entra 权限来查找被分配者的对象 ID。 此消息表示 Microsoft Entra 权限不足。 尝试将 -–assignee 参数替换为 –assignee-object-id,并提供被分派人的对象 ID 作为参数,而不是名称(如果是托管标识,则提供主体 ID)。 有关更多信息,请参阅 az role assignment create 文档的“可选参数”部分。

如果仍然不起作用,请联系Microsoft Entra 管理员获取正确的权限。

如果我没有采取任何行动,会发生什么情况?

从 2019 年 9 月 3 日开始,调用不再返回任何信息GET /configurationsPOST /configurations/gatewayGET /configurations/{configurationName}调用不再返回敏感参数,例如存储帐户密钥或群集密码。 对应的 SDK 方法和 PowerShell cmdlet 也遵循相同的原则。

如果使用的是 Visual Studio、VS Code、IntelliJ 或 Eclipse 的旧版工具之一,则在更新之前,它将不再正常运行。

有关更多详细信息,请参阅本文档中适用于你方案的相应部分。