Общие сведения о блокировке ресурсов в Azure Blueprints

Это важно

Azure Blueprints (предварительная версия) будет выведена из эксплуатации 31 января 2027 года, при этом поэтапный вывод из эксплуатации начнется 31 июля 2026 года. Перенесите существующие определения и назначения схем в стеки развертывания (рекомендуется) и спецификации шаблонов. Артефакты схемы преобразуются в JSON-шаблоны ARM или Bicep-файлы, которые используются для определения стеков развертывания. Сведения о полном поэтапном графике, последствиях и часто задаваемых вопросах см. в разделе О прекращении поддержки Azure Blueprints или https://aka.ms/AzureBlueprintsRetirement. Узнайте, как создать артефакт в качестве ресурса ARM, см. в статье:

Создание согласованных сред в масштабе действительно ценно, если существует механизм поддержания этой согласованности. В этой статье объясняется, как работает блокировка ресурсов в Azure Blueprints. Пример блокировки ресурсов и применения назначений запретов см. в руководстве по защите новых ресурсов .

Замечание

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

Режимы блокировки и состояния

Режим блокировки применяется к присвоению чертежа и имеет три варианта: не блокировать, только для чтения или удаление запрещено. Режим блокировки настраивается во время развертывания артефактов во время назначения схемы. Другой режим блокировки можно задать, обновив назначение схемы. Однако не удается изменить режимы блокировки за пределами Azure Blueprints.

Ресурсы, созданные артефактами в назначении схемы, имеют четыре состояния: «Не заблокировано», «Только чтение», «Не удается изменить или удалить» или «Не удается удалить». Каждый тип артефакта может находиться в состоянии "Не заблокирован". Следующая таблица может использоваться для определения состояния ресурса:

Mode Тип ресурса артефакта Государство Description
Не блокируйте * Не заблокирован Ресурсы не защищены Azure Blueprints. Это состояние также используется для ресурсов, добавленных в артефакт ресурсной группы "Только для чтения" или "Не удалять" за пределами назначения плана проекта.
Только для чтения Группа ресурсов Не удается изменить или удалить Группа ресурсов доступна только для чтения и все его свойства, кроме тегов, не могут быть изменены. Не заблокированные ресурсы можно добавлять, перемещать, изменять или удалять из этой группы ресурсов.
Только для чтения Группа ресурсов, не относящихся к ресурсам Только для чтения За исключением тегов, ресурс остается неизменным и не может быть удален или изменен.
Не удалять * Не удается удалить Ресурсы могут быть изменены, но не могут быть удалены. Не заблокированные ресурсы можно добавлять, перемещать, изменять или удалять из этой группы ресурсов.

Переопределение состояний блокировки

Обычно это возможно, чтобы кто-то с соответствующим управлением доступом на основе ролей Azure (Azure RBAC) в подписке, например, с ролью 'Владелец', мог изменять или удалять любой ресурс. Этот вид доступа не имеет места, когда Azure Blueprints применяет блокировку в составе развернутого задания. Если назначение было задано с параметром "Только чтение " или " Не удалять ", даже владелец подписки не может выполнить заблокированное действие для защищенного ресурса.

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

Назначение в группе управления

Единственный способ запретить владельцам подписок удалить назначение схемы — назначить схему группе управления. В этом сценарии только владельцы группы управления имеют разрешения, необходимые для удаления назначения схемы.

Чтобы назначить схему группе управления вместо подписки, вызов REST API изменится следующим образом:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{assignmentMG}/providers/Microsoft.Blueprint/blueprintAssignments/{assignmentName}?api-version=2018-11-01-preview

Группа управления, определенная в {assignmentMG} иерархии групп управления, должна находиться в иерархии группы управления или в той же группе управления, где сохраняется определение схемы.

Текст запроса назначения схемы выглядит следующим образом:

{
    "identity": {
        "type": "SystemAssigned"
    },
    "location": "eastus",
    "properties": {
        "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
        "blueprintId": "/providers/Microsoft.Management/managementGroups/{blueprintMG}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
        "scope": "/subscriptions/{targetSubscriptionId}",
        "parameters": {
            "storageAccountType": {
                "value": "Standard_LRS"
            },
            "costCenter": {
                "value": "Contoso/Online/Shopping/Production"
            },
            "owners": {
                "value": [
                    "johnDoe@contoso.com",
                    "johnsteam@contoso.com"
                ]
            }
        },
        "resourceGroups": {
            "storageRG": {
                "name": "defaultRG",
                "location": "eastus"
            }
        }
    }
}

Ключевым различием в этом тексте запроса и тексте, назначенном подписке, является properties.scope свойство. Это необходимое свойство должно быть установлено для подписки, к которой применяется назначение плана. Подписка должна быть прямым дочерним элементом иерархии группы управления, где хранится назначение схемы.

Замечание

Схема, назначенная в области охвата группы управления, по-прежнему рассматривается как назначение схемы на уровне подписки. Единственное различие заключается в том, что назначение схемы хранится в другом месте, чтобы владельцы подписок не могли удалить его и связанные блокировки.

Удаление состояний блокировки

Если необходимо изменить или удалить ресурс, защищенный назначением, это можно сделать двумя способами.

  • Обновление назначения схемы в режим Не блокировать
  • Удалите назначение чертежа

При удалении назначения блоки, созданные Azure Blueprints, удаляются. Однако ресурс остается недействующим и его необходимо удалить с помощью обычных средств.

Как работают замки чертежей

Действие запрета назначения в Azure RBAC применяется к ресурсам артефактов во время присвоения плана, если для назначения выбран параметр "Только для чтения" или "Не удалять". Действие запрета добавляется управляемым удостоверением назначения схемы и может быть удалено только из ресурсов артефактов с помощью того же управляемого удостоверения. Эта мера безопасности применяет механизм блокировки и предотвращает снятие блокировки чертежа за пределами Azure Blueprints.

Снимок экрана: страница управления доступом (I A M) и вкладка

Свойства запрета назначения каждого режима следующие:

Mode Permissions.Actions Права.ДействияНет Субъекты[i]. Тип ExcludePrincipals[i]. Id DoNotApplyToChildScopes
Только для чтения * */Прочитать
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (Все пользователи) Назначение схемы и определяемое пользователем в исключенныхPrincipals Группа ресурсов — true; Ресурс — false
Не удалять */Удалить Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (Все пользователи) Назначение схемы и определяемое пользователем в исключенныхPrincipals Группа ресурсов — true; Ресурс — false

Это важно

Azure Resource Manager кэширует сведения о назначении ролей до 30 минут. В результате применения политики запрета назначений и действий на ресурсы черновика, они могут не сразу вступить в полную силу. В течение этого периода времени возможно удалить ресурс, предназначенный для защиты с помощью замков чертежа.

Исключение субъекта из назначения запрета

В некоторых сценариях проектирования или безопасности может потребоваться исключить субъект из назначения отказа, создаваемого схемой. Этот шаг выполняется в REST API путем добавления до пяти значений в массив excludedPrincipals в свойстве locks при создании присвоения. Следующее определение задания является примером тела запроса, которое включает исключенные принципалы:

{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "eastus",
  "properties": {
    "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
    "blueprintId": "/providers/Microsoft.Management/managementGroups/{mgId}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
    "locks": {
        "mode": "AllResourcesDoNotDelete",
        "excludedPrincipals": [
            "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
            "38833b56-194d-420b-90ce-cff578296714"
        ]
    },
    "parameters": {
      "storageAccountType": {
        "value": "Standard_LRS"
      },
      "costCenter": {
        "value": "Contoso/Online/Shopping/Production"
      },
      "owners": {
        "value": [
          "johnDoe@contoso.com",
          "johnsteam@contoso.com"
        ]
      }
    },
    "resourceGroups": {
      "storageRG": {
        "name": "defaultRG",
        "location": "eastus"
      }
    }
  }
}

Исключить действие из правила запрета

Аналогично исключению субъекта в назначении отказа в схеме, можно исключать определенные операции поставщика ресурсов Azure. В блоке properties.locks в том же месте, где находится excludedPrincipals, можно добавить excludedActions:

"locks": {
    "mode": "AllResourcesDoNotDelete",
    "excludedPrincipals": [
        "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
        "38833b56-194d-420b-90ce-cff578296714"
    ],
    "excludedActions": [
        "Microsoft.ContainerRegistry/registries/push/write",
        "Microsoft.Authorization/*/read"
    ]
},

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

Дальнейшие шаги