迁移到群集配置的基于角色的细化访问权限
我们正在引入一些重要更改,以支持使用更细化的基于角色的访问来获取敏感信息。 在实施这些更改的过程中,如果你使用的是某个受影响的实体/方案,则可能需要在 2019 年 9 月 3 日之前采取某种措施。
有什么变化?
以前,处理“所有者”、“参与者”或“读取者”Azure 角色的群集用户可以通过 HDInsight API 获取机密,因为这些机密可以通过给具有 */read
权限的任何人。 机密定义为值,可用于获取比用户角色允许的访问权限更高的权限。 这些值包括群集网关 HTTP 凭据、存储帐户密钥和数据库凭据等值。
从 2019 年 9 月 3 日开始,访问这些机密需要 Microsoft.HDInsight/clusters/configurations/action
权限,用户无法使用读者角色访问它。 拥有此权限的角色为“参与者”、“所有者”和新的“HDInsight 群集操作员”角色。
另外,我们正在引入新的 HDInisght 群集操作员角色,无需向此角色授予“参与者”或“所有者”的管理权限,即可让他们检索机密。 总结:
角色 | 以前 | 今后 |
---|---|---|
读取器 | - 读取访问权限,包括机密。 | - 读取访问权限,不包括机密 |
HDInsight 群集操作员 (新角色) |
空值 | - 读/写访问权限,包括机密 |
参与者 | - 读/写访问权限,包括机密。 - 创建和管理所有类型的 Azure 资源。 - 执行脚本操作。 |
没有变化 |
所有者 | - 读/写访问权限,包括机密。 - 对所有资源的完全访问权限 - 将访问权限委托给其他人。 - 执行脚本操作。 |
没有变化 |
了解如何向用户添加 HDInsight 群集操作员角色分配,以授予其对群集机密的读/写访问权限的信息,请参阅以下部分将 HDInsight 群集操作员角色分配添加到用户。
我是否受此更改的影响?
以下实体和方案将受到影响:
- API:使用
/configurations
或/configurations/{configurationName}
终结点的用户。 - Azure HDInsight Tools for Visual Studio Code 1.1.1 或更低版本。
- Azure Toolkit for IntelliJ 3.20.0 或更低版本。
- 适用于 Visual Studio 的 Azure Data Lake 和流分析工具版本 2.3.9000.1。
- Azure Toolkit for Eclipse 3.15.0 或更低版本。
- SDK for .NET
- 版本 1.x 或 2.x:从 ConfigurationsOperationsExtensions 类使用
GetClusterConfigurations
、GetConnectivitySettings
、ConfigureHttpSettings
、EnableHttp
或DisableHttp
方法的用户。 - 版本 3.x 和以上:从
ConfigurationsOperationsExtensions
类使用Get
、Update
、EnableHttp
或DisableHttp
方法的用户。
- 版本 1.x 或 2.x:从 ConfigurationsOperationsExtensions 类使用
- SDK for Python:从
ConfigurationsOperations
类使用get
或update
方法的用户。 - SDK for Java:从
ConfigurationsInner
类使用update
或get
方法的用户。 - SDK for Go:从
ConfigurationsClient
构造使用Get
或Update
方法的用户。 - Az.HDInsight PowerShell 版本 2.0.0。 请参阅以下部分(或使用上面的链接)了解适用于你的方案的迁移步骤。
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:
- POST /configurations
- 使用此 API 可以获取所有配置(包括机密)。
- POST /getGatewaySettings
- 使用此 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.EnableHttp
和DisableHttp
现已弃用。 现在始终会启用 HTTP,因此不再需要这些方法。
版本 3.x 和以上
请更新到 HDInsight SDK for .NET 版本 5.0.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationOperationsExtensions.Get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationOperationsExtensions.List
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClusterOperationsExtensions.GetGatewaySettings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperationsExtensions.Update
现已弃用,已由ClusterOperationsExtensions.UpdateGatewaySettings
取代。ConfigurationsOperationsExtensions.EnableHttp
和DisableHttp
现已弃用。 现在始终会启用 HTTP,因此不再需要这些方法。
用于 Python 的 SDK
请更新到 HDInsight SDK for Python 版本 1.0.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationsOperations.get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperations.list
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClusterOperations.get_gateway_settings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperations.update
现已弃用,已由ClusterOperations.update_gateway_settings
取代。
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 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationsClient.get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsClient.list
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClustersClient.get_gateway_settings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsClient.update
现已弃用,已由ClustersClient.update_gateway_settings
取代。
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 群集操作员”角色分配到另一个用户或服务主体时,为何会出现“权限不足,无法完成该操作”?
执行该命令的用户或服务主体除了要有“所有者”角色以外,还需要有足够的 Microsoft Entra 权限来查找被分配者的对象 ID。 此消息表示 Microsoft Entra 权限不足。 尝试将 --assignee
参数替换为 -assignee-object-id
,并提供被分配者的对象 ID 作为参数,而不要提供名称(如果使用托管标识,则提供主体 ID)。 有关详细信息,请参阅 Azure 角色分配创建文档的“可选参数”部分。
如果仍然不起作用,请联系你的 Microsoft Entra 管理员以获取正确的权限。
如果不采取任何措施,会发生什么情况?
从 2019 年 9 月 3 日开始,GET /configurations
和 POST /configurations/gateway
调用将不再返回任何信息,GET /configurations/{configurationName}
调用将不再返回存储帐户密钥或群集密码等敏感参数。 对于相应的 SDK 方法和 PowerShell cmdlet,也是如此。
如果使用上述适用于 Visual Studio、VSCode、IntelliJ 或 Eclipse 的旧版工具之一,在更新之前,这些工具将不再可正常运行。
有关更多详细信息,请参阅本文档中适用于你的方案的相应部分。