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

Важно!

11 июля 2026 г. схемы (предварительная версия) будут устарели. Перенос существующих определений схемы и назначений в спецификации шаблонов и стеки развертывания. Артефакты схемы необходимо преобразовать в шаблоны JSON ARM или файлы Bicep, используемые для определения стеков развертывания. Сведения о создании артефакта в качестве ресурса ARM см. в статье:

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

Примечание.

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

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

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

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

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

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

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

Эта мера безопасности защищает определенную схему и среду, для создания которой предназначена эта схема, от случайного или программного удаления либо изменения.

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

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

Чтобы назначить схему не подписке, а группе управления, вызов 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.

Screenshot of the Access control (I A M) page and the Deny assignments tab for a resource group.

Ниже перечислены свойства запретов назначений для каждого режима:

Режим Permissions.Actions Permissions.NotActions Principals[i].Type ExcludePrincipals[i].Id DoNotApplyToChildScopes
Только для чтения * */чтение
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (все) Назначение схемы и пользовательские данные в excludedPrincipals Группа ресурсов — true, ресурс — false
Не удалять */delete Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (все) Назначение схемы и пользовательские данные в excludedPrincipals Группа ресурсов — true, ресурс — false

Важно!

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

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

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

{
  "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"
    ]
},

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

Следующие шаги