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

我们正在引入一些重要更改,以支持使用更细化的基于角色的访问来获取敏感信息。 在实施这些更改的过程中,如果你使用的是某个受影响的实体/方案,则可能需要在 2019 年 9 月 3 日之前采取某种措施。

有什么变化?

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

从 2019 年 9 月 3 日开始,访问这些机密需要 Microsoft.HDInsight/clusters/configurations/action 权限,这意味着这些机密不再可供具有“读取者”角色的用户访问。 拥有此权限的角色为“参与者”、“所有者”和新的“HDInsight 群集操作员”角色(下面将详细说明)。

另外,我们正在引入新的 HDInisght 群集操作员角色,无需向此角色授予“参与者”或“所有者”的管理权限,即可让他们检索机密。 总结:

角色 以前 今后
读取器 - 读取访问权限,包括机密。 - 读取访问权限,包括机密
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 Data Lake 和流分析工具

更新到 2.3.9000.1 或更高版本的用于 Visual Studio 的 Azure Data Lake 和流分析工具可以避免中断。 如需更新方面的帮助,请参阅文档:更新用于 Visual Studio 的 Data Lake 工具

用于 Eclipse 的 Azure 工具包

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

用于 .NET 的 SDK

版本 1.x 和 2.x

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

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

    • 今后若要检索所有配置(包括敏感参数),请使用 ClusterOperationsExtensions.ListConfigurations。 请注意,具有“读取者”角色的用户将无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。
    • 如果只要检索 HTTP 网关凭据,请使用 ClusterOperationsExtensions.GetGatewaySettings
  • ClusterOperationsExtensions.GetConnectivitySettings 现已弃用,已由 ClusterOperationsExtensions.GetGatewaySettings 取代。

  • ClusterOperationsExtensions.ConfigureHttpSettings 现已弃用,已由 ClusterOperationsExtensions.UpdateGatewaySettings 取代。

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

版本 3.x 和以上

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

用于 Python 的 SDK

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

SDK For Java

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

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

SDK For Go

请更新到 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 角色

常见问题

更新 API 请求和/或工具后,为何会出现 403(禁止)响应?

群集配置现在受到精细的基于角色的访问控制,需要拥有 Microsoft.HDInsight/clusters/configurations/* 权限才能访问这些配置。 若要获取此权限,请将“HDInsight 群集操作员”、“参与者”或“所有者”角色分配到尝试访问配置的用户或服务主体。

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

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

如果这仍然不起作用,请联系你的 Azure AD 管理员以获取正确的权限。

如果不采取任何措施,会发生什么情况?

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

如果使用上述适用于 Visual Studio、VSCode、IntelliJ 或 Eclipse 的旧版工具之一,在更新之前,这些工具将不再可正常运行。

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