Политика Azure для запрета назначения ролей для определенных идентификаторов ролей (ролей)

Попытка настроить, какие идентификаторы (роли) определений ролей Azure могут быть назначены посредством назначения ролей с использованием политики Azure.

Все приведенные ниже политики создаются без ошибок, но назначение ролей Azure по-прежнему возможно для всех ролей, несмотря на создание / назначение этой политики.

Я пробовал значение параметра snytax '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c', а также просто идентификатор роли 'b24988ac-6180-42a0-ab88-20f7382dd24c'

Кажется, ничего не имеет значения, когда дело доходит до политики, фактически предотвращающей назначение ролей.

У меня есть жестко запрограммированные значения, а также проверенные параметры

Политика следования этой теме, которая не запрещает назначение ролей:

Политика Azure для ограничения на основе ролей контроль доступа (IAM) для пользователей на уровне группы ресурсов в Azure

resource "azurerm_policy_definition" "allowedRoleAssignments" {
  name                  = "${var.project_ident}-${var.cs_env_ident}-allowedRoleAssignments"
  policy_type           = "Custom"
  mode                  = "Indexed"
  display_name          = "${var.project_ident}-${var.cs_env_ident}-allowedRoleAssignments"
  management_group_name = var.mgmtGroupName

  metadata = <<METADATA
    {
        "category": "General"
    }
METADATA

  policy_rule = <<POLICY_RULE
  {
        "if": {
            "allOf": [
                {
                    "field": "type",
                    "equals": "Microsoft.Authorization/roleAssignments"
                },
                {
                    "not": {
                        "field": "Microsoft.Authorization/roleAssignments/roleDefinitionId",
                        "in": "[parameters('roleDefinitionIds')]"
                    }
                }
            ]
        },
        "then": {
            "effect": "deny"
        }
    }
POLICY_RULE

  parameters = <<PARAMETERS
    {
        "roleDefinitionIds": {
            "type": "Array",
            "metadata": {
                "displayName": "roleDefinitionIds",
                "description": "This policy defines a blacklist of role definitions that cannot be used in IAM, for role assignments"
            }
        }
    }
PARAMETERS
}

Параметры инициативы:

  policy_definition_reference {
    policy_definition_id = azurerm_policy_definition.allowedRoleAssignments.id
    parameters = {
        roleDefinitionIds = "[parameters('roleDefinitionIds')]"
  }
}

Назначение политики:

resource "azurerm_policy_assignment" "set-assignment-1" {
  name                 = "${var.cs_env_ident}-sec-controls" 
  scope                = var.policy_assignment_scope
  description          = "policy set definition assignment to specified management groups"
  display_name         = "${var.project_ident}-${var.cs_env_ident}-sec-controls"
  policy_definition_id = var.policy_set_definition_id
  identity { type = "SystemAssigned" }
  location             = var.location
  
  parameters = <<PARAMETERS
    {
    "roleDefinitionIds": {
      "value": ${jsonencode(var.roleDefinitionIds)}
    }
  }
PARAMETERS
}

Параметры, передаваемые в назначении политики через переменную Terraform:

variable "roleDefinitionIds" {
  description = "List of allowed role definition Ids"
  default = [
    "/providers/Microsoft.Authorization/roleDefinitions/1c0163c0-47e6-4577-8991-ea5c82e286e4"
  ] 
}

Политики, применяемые для других потоков, которые имеют аналогичную, но другую логику для достижения той же цели, но также не препятствуют назначению ролей:

Очень полезное руководство, составленное сотрудником Azure, но, опять же, политика не ограничивает назначение ролей

https://blog.soft-cor.com/empowering-developer-teams-to-manage-their-own-azure-rbac-permissions-in-highly-regulated-industries/

Другие похожие темы Пользовательская роль Azure: авторизация назначения ролей для определенного набора ролей

 resource "azurerm_policy_definition" "allowedRoleAssignments" {
      name                  = "${var.project_ident}-${var.cs_env_ident}-allowedRoleAssignments"
      policy_type           = "Custom"
      mode                  = "Indexed"
      display_name          = "${var.project_ident}-${var.cs_env_ident}-allowedRoleAssignments"
      management_group_name = var.mgmtGroupName
    
      metadata = <<METADATA
        {
            "category": "General"
        }
    METADATA
    
      policy_rule = <<POLICY_RULE
        {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Authorization/roleAssignments"
                    },
                    {
                        "value": "[last(split(field('Microsoft.Authorization/roleAssignments/roleDefinitionId'),'/'))]",
                        "notIn": "[parameters('roleDefinitionIds')]"
                    }
                ]
            },
            "then": {
                "effect": "Deny"
            }
        }
    POLICY_RULE
    
      parameters = <<PARAMETERS
        {
            "roleDefinitionIds": {
                "type": "Array",
                "metadata": {
                    "displayName": "roleDefinitionIds",
                    "description": "This policy defines a blacklist of role definitions that cannot be used in IAM, for role assignments"
                }
            }
        }
    PARAMETERS
    }

Любая помощь приветствуется. Политики не терпят неудачу при создании и кажутся логически разумными.

Я не понимаю, почему, независимо от того, создан он как белый или черный список, назначение ролей не срабатывает.

Я создаю и назначаю эти политики группе управления, поэтому проверяйте, используя подписку / ресурсы в группе управления.

Я пробовал массив идентификаторов определений ролей, идентификаторов отдельных определений, но ничего успешно не препятствует назначению соответствующей роли для каждой политики.


person Gvazzana    schedule 23.02.2021    source источник


Ответы (1)


Это было решено после долгого тестирования и чтения. Проблема в том, что идентификаторы определения ролей RBAC Azure не являются ресурсом и не помечены тегами, поэтому проблема была в режиме политики:

Помеченные ресурсы и местоположения обрабатываются в режиме индексированной политики.

mode                  = "Indexed"

Чтобы решить эту проблему, для параметра "Режим политики" должно быть установлено значение "Все".

mode                  = "All"

В противном случае я предоставил полное рабочее решение по этому вопросу!

Ваше здоровье

person Gvazzana    schedule 23.02.2021