如何创建范围为特定资源类型的 Azure 角色分配
How to create Azure Role Assignment scoped to a certain resource type
我正在尝试创建一个 Azure 角色分配,它将用户访问管理员角色分配给服务主体,但仅限于 Azure 数据工厂资源。
我看到很多关于按订阅、资源组甚至资源设置范围的文档,但无法弄清楚如何为特定类型的所有资源设置它。
我试过这个 PowerShell 命令,它运行成功但没有达到预期的效果。服务主体仍然无法在 ADF 资源上执行该角色的操作。
New-AzRoleAssignment -ObjectId ddddddd-dddd-dddd-dddd-dddddddddddd -RoleDefinitionId 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9 -Scope "/providers/Microsoft.DataFactory"
我也尝试过在范围内使用通配符,但这似乎不受支持:/subscriptions/dddddddd-dddd-dddd-dddd-dddddddddddd/resourceGroups/*/providers/Microsoft.DataFactory/dataFactories/*
这是我已经阅读过的文档:
角色分配用于为用户分配预定义或自定义角色 "role definition"。
角色定义是定义角色范围的定义。角色的范围需要是订阅、资源组和资源。您无法定义资源类型。它更像是一个或多个位置。
RBAC 范围的结构:
https://docs.microsoft.com/en-us/azure/role-based-access-control/overview#scope
如何创建自定义角色:
https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles
在您的情况下,如果您想授予用户能够处理所有 DataFactory 上的 IAM,您将需要手动定义每个数据工厂范围。然后使用 Microsoft.Authorization 提供程序中的操作:https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftauthorization
定义分配的范围时,您可以使用 -Scope <String>
参数或以下参数的组合来定义它。
-ResourceGroupName <String>
-ResourceName <String>
-ResourceType <String>
资源类型“-ResourceType”。例如微软Network/virtualNetworks。仅应与 ResourceGroupName、ResourceName 和(可选)ParentResource 参数结合使用,以标识资源的相对 URI 的形式构建分层范围。
有关详细信息,请参阅:https://docs.microsoft.com/en-us/powershell/module/az.resources/new-azroleassignment?view=azps-3.3.0
现有答案非常准确,但您可以采取一些措施使其发挥作用:
- 最明显的限制是将所有数据工厂限制为单个资源组(或其中几个)并授予 SP 所有者对这些资源组的权限(或创建自定义 RBAC 角色)。
- 使用简单的脚本动态分配这些权限
如果您不能将所有数据工厂放在同一个资源组 group\set 中。脚本看起来像这样("pseudo" 代码,未经测试,但会给你思路):
Get-AzSbuscription | Foreach-Object {
$_ | Select-AzSubscription
Get-AzDataFactory | Foreach-Object {
New-AzRoleAssignment -Scope $_.ResourceId`
-ObjectId ddddddd-dddd-dddd-dddd-dddddddddddd `
-RoleDefinitionId 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9
}
}
和运行按计划进行
我正在尝试创建一个 Azure 角色分配,它将用户访问管理员角色分配给服务主体,但仅限于 Azure 数据工厂资源。
我看到很多关于按订阅、资源组甚至资源设置范围的文档,但无法弄清楚如何为特定类型的所有资源设置它。
我试过这个 PowerShell 命令,它运行成功但没有达到预期的效果。服务主体仍然无法在 ADF 资源上执行该角色的操作。
New-AzRoleAssignment -ObjectId ddddddd-dddd-dddd-dddd-dddddddddddd -RoleDefinitionId 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9 -Scope "/providers/Microsoft.DataFactory"
我也尝试过在范围内使用通配符,但这似乎不受支持:/subscriptions/dddddddd-dddd-dddd-dddd-dddddddddddd/resourceGroups/*/providers/Microsoft.DataFactory/dataFactories/*
这是我已经阅读过的文档:
角色分配用于为用户分配预定义或自定义角色 "role definition"。
角色定义是定义角色范围的定义。角色的范围需要是订阅、资源组和资源。您无法定义资源类型。它更像是一个或多个位置。
RBAC 范围的结构: https://docs.microsoft.com/en-us/azure/role-based-access-control/overview#scope
如何创建自定义角色: https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles
在您的情况下,如果您想授予用户能够处理所有 DataFactory 上的 IAM,您将需要手动定义每个数据工厂范围。然后使用 Microsoft.Authorization 提供程序中的操作:https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftauthorization
定义分配的范围时,您可以使用 -Scope <String>
参数或以下参数的组合来定义它。
-ResourceGroupName <String>
-ResourceName <String>
-ResourceType <String>
资源类型“-ResourceType”。例如微软Network/virtualNetworks。仅应与 ResourceGroupName、ResourceName 和(可选)ParentResource 参数结合使用,以标识资源的相对 URI 的形式构建分层范围。
有关详细信息,请参阅:https://docs.microsoft.com/en-us/powershell/module/az.resources/new-azroleassignment?view=azps-3.3.0
现有答案非常准确,但您可以采取一些措施使其发挥作用:
- 最明显的限制是将所有数据工厂限制为单个资源组(或其中几个)并授予 SP 所有者对这些资源组的权限(或创建自定义 RBAC 角色)。
- 使用简单的脚本动态分配这些权限
如果您不能将所有数据工厂放在同一个资源组 group\set 中。脚本看起来像这样("pseudo" 代码,未经测试,但会给你思路):
Get-AzSbuscription | Foreach-Object {
$_ | Select-AzSubscription
Get-AzDataFactory | Foreach-Object {
New-AzRoleAssignment -Scope $_.ResourceId`
-ObjectId ddddddd-dddd-dddd-dddd-dddddddddddd `
-RoleDefinitionId 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9
}
}
和运行按计划进行