迁移到群集配置的基于角色的细化访问权限
我们正在引入一些重要更改,以支持使用更细化的基于角色的访问来获取敏感信息。 在实施这些更改的过程中,如果你使用的是某个受影响的实体/方案,则可能需要在 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 已更改或弃用:
- 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 可以更新网关设置(用户名和/或密码)。
如果使用版本 1.1.1 或更低版本,请更新到最新版本的 Azure HDInsight Tools for Visual Studio Code,以避免中断。
如果使用版本 3.20.0 或更低版本,请更新到最新版本的 Azure Toolkit for IntelliJ 插件,以避免中断。
更新到 2.3.9000.1 或更高版本的用于 Visual Studio 的 Azure Data Lake 和流分析工具可以避免中断。 如需更新方面的帮助,请参阅文档:更新用于 Visual Studio 的 Data Lake 工具。
如果使用 3.15.0 或更低版本,请更新到最新版本的 Azure Toolkit for Eclipse,以避免中断。
请更新到 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,因此不再需要这些方法。
请更新到 HDInsight SDK for .NET 版本 5.0.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationOperationsExtensions.Get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationOperationsExtensions.List
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClusterOperationsExtensions.GetGatewaySettings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperationsExtensions.Update
现已弃用,已由ClusterOperationsExtensions.UpdateGatewaySettings
取代。ConfigurationsOperationsExtensions.EnableHttp
和DisableHttp
现已弃用。 现在始终会启用 HTTP,因此不再需要这些方法。
请更新到 HDInsight SDK for Python 版本 1.0.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationsOperations.get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperations.list
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClusterOperations.get_gateway_settings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsOperations.update
现已弃用,已由ClusterOperations.update_gateway_settings
取代。
请更新到 HDInsight SDK for Java 版本 1.0.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationsInner.get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。ConfigurationsInner.update
现已弃用。
请更新到 HDInsight SDK for Go 版本 27.1.0 或更高版本。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改:
ConfigurationsClient.get
将不再返回敏感参数,例如存储密钥(核心站点)或 HTTP 凭据(网关)。- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsClient.list
。 具有“读者”角色的用户无法使用此方法。 这样便可以精细控制哪些用户可以访问群集的敏感信息。 - 如果只要检索 HTTP 网关凭据,请使用
ClustersClient.get_gateway_settings
。
- 今后若要检索所有配置(包括敏感参数),请使用
ConfigurationsClient.update
现已弃用,已由ClustersClient.update_gateway_settings
取代。
更新到 Az PowerShell 版本 2.0.0 或更高版本以避免中断。 如果使用受这些更改影响的方法,则可能需要对代码进行少量的修改。
Grant-AzHDInsightHttpServicesAccess
现已弃用,已由新的Set-AzHDInsightGatewayCredential
cmdlet 取代。Get-AzHDInsightJobOutput
在更新后支持对存储密钥进行细化的基于角色的访问。- 具有 HDInsight 群集的“操作员”、“参与者”或“所有者”角色的用户不受影响。
- 只具有“读者”角色的用户需要显式指定
DefaultStorageAccountKey
参数。
Revoke-AzHDInsightHttpServicesAccess
现已弃用。 现在始终会启用 HTTP,因此不再需要此 cmdlet。 如需更多详细信息,请参阅 az.HDInsight 迁移指南。
具有所有者角色的用户可以将 HDInsight 群集操作员角色分配给你希望对敏感 HDInsight 群集配置值(如群集网关凭据和存储帐户密钥)具有读/写访问权限的用户。
添加此角色分配的最简单方法是在 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 门户将 HDInsight 群集操作员角色分配添加到用户。 请参阅文档使用 Azure 门户分配 Azure 角色。
群集配置现在受到精细的基于角色的访问控制,需要拥有 Microsoft.HDInsight/clusters/configurations/*
权限才能访问这些配置。 若要获取此权限,请将“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 的旧版工具之一,在更新之前,这些工具将不再可正常运行。
有关更多详细信息,请参阅本文档中适用于你的方案的相应部分。