Azure自定义角色:授权一组特定角色的角色分配

时间:2019-12-10 15:44:50

标签: azure azure-active-directory

我正在尝试在Azure中创建一个自定义角色,该角色将允许订阅“所有者”执行除取消/重新命名自己的订阅或移至另一个管理组之外的所有工作。

我还希望他们能够向他们想要的人授予权限(特别是内置的“贡献者”角色),但又不允许他们授予“所有者”权限,否则我的自定义角色很容易被欺骗。 / p>

最后我得到了以下自定义角色定义,到目前为止,该定义很好并且可以正常工作,当然还有角色分配:

{
  "Name": "MyCustomRole",
  "IsCustom": true,
  "Description": "Role designed for Azure subscriptions ownership limitations",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "Microsoft.Management/managementGroups/subscriptions/write",
    "Microsoft.Subscription/cancel/action",
    "Microsoft.Subscription/rename/action"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/providers/Microsoft.Management/managementGroups/root.mg"
  ]
}

在Azure文档中,我发现的唯一用于角色分配的操作是Microsoft.Authorization/roleAssignments/write

是否有任何方法可以直接在自定义角色中将其限制为-例如贡献者角色分配?

从本质上讲,Azure策略可能会解决问题(甚至不确定),但是由于某些运营商/专家/其他人最终可能会成为所有者,因此我不希望策略引擎显示“不符合规定”的资源。这会导致客户产生我想避免的误会。

3 个答案:

答案 0 :(得分:4)

您可能想尝试Azure策略,可以将其应用于IAM模型。您可以根据治理结构在“订阅”或“管理组”级别上分配策略。

下面的策略定义将阻止所有尝试分配“所有者”角色的请求,没有例外。内置所有者角色由“ 8e3af657-a8ff-443c-a75c-2fe8c4bcb635”表示,在所有Azure租户中均使用相同的GUID。

但是仍然可以进行其他RBAC角色的角色分配。这应该可以满足您的用例。

https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles

{
  "policyType": "Custom",
  "mode": "All",
  "displayName": "DenyOwnerAssisgnment",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "Microsoft.Authorization/roleAssignments/roleDefinitionId",
          "contains": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
        },
        {
          "field": "type",
          "equals": "Microsoft.Authorization/roleAssignments"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "type": "Microsoft.Authorization/policyDefinitions"
}

答案 1 :(得分:1)

据我所知-不,您不能做得很细。您只能限制特定操作。

答案 2 :(得分:0)

是的,在分配策略时应该可以,因此它不是定义的一部分,而是分配的一部分。您可以在订阅级别范围内分配策略,并排除资源组。您可以通过“ notScopes”来做到这一点。

有关操作步骤,请参阅Azure策略文档(排除范围

分配的范围包括所有子资源容器和 子资源。如果是子资源容器或子资源 不应该应用定义,可以将每个定义排除在外 通过设置notScope进行评估。此属性是要启用的数组 从中排除一个或多个资源容器或资源 评价。 notScope可以在创建后添加或更新 初始作业。

https://docs.microsoft.com/en-us/azure/governance/policy/concepts/assignment-structure

您可以在分配策略时或通过使用valid_keys = [key for key, val in x_wins.items() if val is True] 参数通过PowerShell来在门户中包括排除的范围。