2

我正在尝试创建一个 Azure 角色分配,它将用户访问管理员角色分配给服务主体,但仅适用于 Azure 数据工厂资源。

我看到很多关于按订阅、资源组甚至资源设置范围的文档,但不知道如何为某种类型的所有资源设置它。

我试过这个成功运行但没有达到预期效果的 PowerShell 命令。服务主体仍无法对 ADF 资源执行该角色的操作。

New-AzRoleAssignment -ObjectId ddddddd-dddd-dddd-dddd-dddddddddddd -RoleDefinitionId 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9 -Scope "/providers/Microsoft.DataFactory"

Powershell 命令运行成功

我也尝试过在范围内使用通配符,但这似乎不受支持:/subscriptions/dddddddd-dddd-dddd-dddd-dddddddddddd/resourceGroups/*/providers/Microsoft.DataFactory/dataFactories/*

这是我已经阅读的文档:

4

2 回答 2

1

角色分配用于为用户分配预定义或自定义角色“角色定义”。

角色定义是定义角色范围的定义。角色的范围需要是订阅、资源组和资源。您不能定义资源类型。它更像是一个或多个位置。

范围结构

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”。例如 Microsoft.Network/virtualNetworks。只能与 ResourceGroupName、ResourceName 和(可选)ParentResource 参数一起使用,以标识资源的相对 URI 的形式构建分层范围。

有关更多详细信息,请参阅:https ://docs.microsoft.com/en-us/powershell/module/az.resources/new-azroleassignment?view=azps-3.3.0

于 2020-01-07T17:31:05.213 回答
0

现有的答案几乎是正确的,但是您可以做一些事情来使其发挥作用:

  1. 最明显的是将所有数据工厂限制为单个资源组(或其中几个),并向这些资源组授予 SP 所有者权限(或创建自定义 RBAC 角色)。
  2. 使用简单的脚本动态分配这些权限

如果您不能将所有数据工厂放在同一个资源组\资源组集中。脚本看起来像这样(“伪”代码,未经测试,但会给你这个想法):

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 
    }
}

并按计划运行

于 2020-01-07T20:40:12.937 回答