【问题标题】:Azure custom role: authorize role assignment for a specific set of rolesAzure 自定义角色:授权为一组特定角色分配角色
【发布时间】:2020-04-03 20:32:01
【问题描述】:

我正在尝试在 Azure 中创建一个自定义角色,它允许订阅“所有者”执行所有操作,但取消/重命名他们自己的订阅或移动到另一个管理组。

我还希望他们能够授予他们想要的权限访问权限(尤其是内置的“贡献者”角色),但不允许他们授予“所有者”权限,否则我的自定义角色很容易被欺骗。

除了角色分配之外,我最终得到了以下自定义角色定义,到目前为止它非常好用:

{
  "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 Policy 在技术上可能会奏效(甚至不确定),但由于一些操作/专家/任何人可能最终成为所有者,我不希望策略引擎显示“不合规”的资源。这会导致客户产生我想避免的误解。

【问题讨论】:

    标签: azure azure-active-directory


    【解决方案1】:

    据我所知 - 不,你不能细化。您只能限制特定的操作。

    ps。从技术上讲,这是正确的。但是上面的策略使用真的很聪明;)

    【讨论】:

      【解决方案2】:

      您可能想尝试 Azure Policy,您可以在 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"
      }
      

      【讨论】:

      • 感谢您提供此解决方法。是否可以定义范围策略层次结构?我的意思是有一个政策拒绝您在订阅范围内的请求,但允许它们在特定资源组中?
      • 是的,这应该是可能的。请参阅我关于排除范围的第二个答案docs.microsoft.com/en-us/azure/governance/policy/concepts/…
      【解决方案3】:

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

      请参阅 Azure Policy 文档了解如何执行此操作(排除范围章节)

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

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

      您可以在分配策略时或通过PowerShell 包括-NotScope 参数在门户中包括排除范围。

      【讨论】:

        猜你喜欢
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-20
        • 2021-07-26
        • 2021-07-24
        • 2021-08-09
        • 1970-01-01
        相关资源
        最近更新 更多