Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Администратор может заблокировать подписку, группу ресурсов или ресурс Azure, чтобы защитить их от случайного удаления или изменения пользователем. Блокировка переопределяет любые разрешения пользователя.
Вы можете задать блокировки, которые препятствуют удалению или изменению. На портале эти блокировки называются Delete и Read-only. В командной строке эти блокировки называются CanNotDelete и ReadOnly.
- CanNotDelete означает, что авторизованные пользователи могут читать и изменять ресурс, но не могут удалить его.
- ReadOnly означает, что авторизованные пользователи смогут читать ресурс, но не смогут удалить или обновить его. Применение этой блокировки похоже на ограничение авторизованных пользователей, когда у них остаются только разрешения, предоставляемые ролью Читатель.
В отличие от управления доступом на основе ролей (RBAC), вы используете блокировки управления для применения ограничения для всех пользователей и ролей. Сведения о настройке разрешений для пользователей и ролей см. в статье Azure RBAC.
Наследование блокировки
При применении блокировки к родительской области все ресурсы в этой области наследуют ту же блокировку. Даже ресурсы, добавляемые позже, наследуют ту же родительскую блокировку. Самая ограничивающая блокировка в цепочке наследования имеет приоритет.
Ресурсы расширения наследуют блокировки от ресурса, к которому они применены. Например, Microsoft.Insights/diagnosticSettings — это тип ресурса расширения. При применении параметра диагностики к хранилищу BLOB и блокировке учетной записи хранения вы не сможете удалить параметр диагностики. Это наследование имеет смысл, так как полный ресурсный идентификатор диагностического параметра:
/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}/blobServices/default/providers/microsoft.insights/diagnosticSettings/{setting-name}"
Идентификатор ресурса заблокированного ресурса должен соответствовать следующему формату:
/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}
Если к ресурсу применена блокировка Delete, то при попытке удалить группу ресурсов эта функция заблокирует всю операцию удаления. Удаление не будет выполнено, даже если группа ресурсов или другие ресурсы в группе ресурсов не заблокированы. Частичное удаление невозможно.
- Блокировка ресурса не запрещает отмену подписки.
- Azure сохраняет ресурсы, деактивируя их вместо немедленного удаления.
- Безвозвратное удаление ваших ресурсов в Azure выполняется только после истечения периода ожидания.
Понять область действия блокировок
Примечание.
Блокировки применяются только к операциям Azure уровня управления, а не к операциям плоскости данных.
Операции уровня управления Azure направляются в раздел https://management.azure.com. Операции плоскости данных Azure отправляются экземпляру вашей службы, например, https://myaccount.blob.core.windows.net/. Дополнительные сведения см. в плоскости управления Azure и плоскости данных. Чтобы узнать, какие операции используют URL-адрес уровня управления, см. статью REST API Azure.
Различие означает, что блокировка защищает ресурс от изменений, но не ограничивает то, как ресурс выполняет свои функции. Например, блокировка ReadOnly на База данных SQL логическом сервере защищает его от удаления или изменений. Она разрешает создавать, обновлять и удалять данные в базе данных сервера. Операции плоскости данных разрешают транзакции данных. Эти запросы не направляются в раздел https://management.azure.com.
Моменты, которые следует учесть перед применением блокировок
Применение блокировок может привести к непредвиденным результатам. Некоторые операции, которые, как представляется, не изменяют ресурс, требуют заблокированных действий. Блокировки не позволяют методу POST отправлять данные в API Azure Resource Manager. Ниже приведены некоторые распространенные примеры заблокированных операций:
Блокировка "только для чтения" учетной записи хранения запрещает пользователям просматривать ключи учетной записи. Запрос POST обрабатывает операцию Список ключей службы хранилища Azure для защиты доступа к ключам учетной записи. Ключи учетной записи обеспечивают полный доступ к данным в учетной записи хранения. Если блокировка только для чтения настроена для учетной записи хранения, пользователи, у которых нет ключей учетной записи, должны использовать учетные данные Microsoft Entra для доступа к данным BLOB-объектов или очередей. Блокировка "только для чтения" также запрещает назначать роли RBAC Azure, областью действия которых является учетная запись хранения или контейнер данных (контейнер BLOB-объектов или очередь).
Блокировка только для чтения при учетной записи хранения защищает назначения RBAC, областью действия которых является учетная запись хранения или контейнер данных (контейнер объектов данных или очередь).
Блокировка только для чтения на учетной записи хранилища предотвращает создание blob-контейнера.
Блокировка только для чтения на учетной записи хранилища предотвращает создание BLOB-контейнера. Однако операции создания учетной записи хранения можно выполнять как с помощью плоскости управления, так и плоскости данных. Блокировки только для чтения блокируют только запросы на создание плоскости управления, но пользователь по-прежнему может выполнять действительную операцию создания ресурса через плоскость данных.
Блокировка только для чтения или блокировка, предотвращающая удаление учетной записи хранения, не защищает данные от удаления или изменения. Кроме того, он не защищает данные в объекте BLOB, очереди, таблице или файле.
API учетной записи хранения предоставляет операции с data plane и control plane. Если запрос использует операции плоскости данных, блокировка учетной записи хранения не защищает содержащиеся в ней данные BLOB-объектов, очередей, таблиц и файлов. Однако блокировка защищает эти ресурсы, если запрос использует операции плоскости управления.
Например, если запрос использует File Shares - Delete, операцию плоскости управления, удаление завершается ошибкой. Если запрос использует Удаление общего ресурса, как операцию плоскости данных, то удаление проходит успешно. Рекомендуется использовать операции плоскости управления.
Блокировка режима "только для чтения" в группе безопасности сети (NSG) предотвращает создание журнала NSG трафика. Блокировка неудаляемойгруппы безопасности сети (NSG) не предотвращает создание или изменение соответствующего журнала потоков NSG.
Кроме того, применение блокировки "только для чтения" к ресурсу службы приложений не позволит обозревателю сервера Visual Studio отображать файлы для ресурса, так как для их взаимодействия требуется доступ на запись.
Блокировка "только для чтения" группы ресурсов, содержащей план службы приложений, не позволяет увеличивать размер или расширять план.
Блокировка "только для чтения" группы ресурсов, которая содержит виртуальную машину, не позволяет пользователям запускать или перезапускать виртуальную машину. Для этих операций требуется запрос, использующий метод POST.
Блокировка только для чтения в группе ресурсов предотвращает перемещение существующих ресурсов в группу ресурсов или из нее. Но вы можете переместить ресурс с блокировкой только для чтения в другую группу ресурсов.
Блокировка только для чтения в группе ресурсов, которая содержит учетную запись автоматизации, предотвращает запуск всех руководств по выполнению операций. Для этих операций требуется запрос, использующий метод POST.
Блокировка не удаляемого ресурса или группы ресурсов предотвращает удаление назначений Azure RBAC.
Блокировка, не позволяющая удалять ресурсную группу, предотвращает автоматическое удаление развертываний в истории Resource Manager. При достижении 800 развертываний в истории ваши развертывания будут завершаться сбоем.
Резервные копии завершаются сбоем, если не удается удалить блокировку группы ресурсов, созданной службой архивации Azure. Служба поддерживает не более 18 точек восстановления. При наличии блокировки служба резервного копирования не может удалять точки восстановления. Более подробные сведения см. в разделе Часто задаваемые вопросы о резервном копировании виртуальных машин Azure.
Блокировка неудаляемойгруппы ресурсов, содержащей рабочие области Azure Machine Learning, мешает корректной работе автомасштабирования вычислительных кластеров Azure Machine Learning. При блокировке автомасштабирование не может удалить неиспользуемые узлы. Решение потребляет больше ресурсов, чем требуется для рабочей нагрузки.
Блокировка только для чтения в рабочей области Log Analytics не позволяет включить аналитику поведения пользователей и сущностей (UEBA).
Блокировка, которую нельзя удалить, в рабочей области Log Analytics не предотвращает операции очистки данных. Вместо этого удалите роль Удаление данных у пользователя.
Блокировка "только для чтения" в подписке не позволяет Azure Advisor работать корректно. Помощник не может хранить результаты своих запросов.
Блокировка "только для чтения" шлюза приложений не позволяет получить сведения о работоспособности серверной части шлюза приложений. Эта операция использует метод POST, который запрещается блокировкой "только для чтения".
Блокировка "только для чтения" в кластере Azure Kubernetes Service (AKS) ограничивает доступ к ресурсам кластера через портал. Блокировка "только для чтения" не позволяет использовать раздел "Ресурсы Kubernetes" кластера AKS на портале Azure для выбора ресурса кластера. Для выполнения этих операций требуется запрос проверки подлинности, использующий метод POST.
Блокировка „нельзя удалить“ на виртуальной машине, защищенной посредством Site Recovery, предотвращает удаление некоторых ресурсных ссылок, связанных с Site Recovery, при снятии защиты или отключении репликации. Если вы планируете снова защитить виртуальную машину позже, удалите блокировку перед отключением защиты. Если блокировка не удалена, необходимо выполнить определенные действия, чтобы очистить устаревшие ссылки, прежде чем защитить виртуальную машину. Дополнительные сведения см. в статье об устранении ошибок репликации виртуальных машин Azure в Azure.
Для PostgreSQL виртуальная сеть не должна иметь блокировок ресурсов на уровне виртуальной сети или подсети, так как блокировки могут препятствовать операциям сети и системы доменных имен. Прежде чем создавать сервер в виртуальной сети, убедитесь, что вы удалили любые блокировки на удаление или доступ только для чтения из вашей виртуальной сети и всех подсетей. После создания сервера можно повторно применить блокировки.
Кто может создавать или удалять блокировки
Для создания или удаления блокировок управления необходим доступ к действию Microsoft.Authorization/* или Microsoft.Authorization/locks/*. Пользователи, назначенные на роль владельца и роль администратора доступа пользователей, имеют необходимый доступ. Некоторые специализированные встроенные роли также предоставляют этот доступ. Вы также можете создать настраиваемую роль с необходимыми разрешениями.
Управляемые приложения и блокировки
Некоторые службы Azure используют управляемые приложения для реализации службы; Azure Databricks в одном примере. В этом случае служба создает две группы ресурсов. Одна из них — это разблокированная группа ресурсов, содержащая общие сведения о службе. Другая — заблокированная группа ресурсов, содержащая инфраструктуру службы.
При попытке удалить инфраструктурную группу ресурсов отображается ошибка с уведомлением о том, что группа ресурсов заблокирована. Если попытаться удалить блокировку инфраструктурной группы ресурсов, отображается ошибка с уведомлением о том, что удалить блокировку невозможно, так как она принадлежит системному приложению.
Вместо этого необходимо удалить службу, в результате чего будет удалена и инфраструктурная группа ресурсов.
В случае с управляемыми приложениями выбирайте развернутую вами службу.
Обратите внимание, что служба содержит ссылку на группу управляемых ресурсов. Эта группа ресурсов содержит инфраструктуру и заблокирована. Удалить ее можно только косвенно.
Чтобы удалить все данные для службы, включая заблокированную инфраструктурную группу ресурсов, выберите Удалить для этой службы.
Настройка блокировок
Портал Azure
На панели навигации слева находятся функция блокировки подписки (Блокировки ресурсов) и функция блокировки группы ресурсов (Блокировки).
В колонке параметров для ресурса, группы ресурсов или подписки, которые необходимо заблокировать, выберите Блокировки.
Примечание.
Вы не можете добавить блокировку в группы управления.
Чтобы добавить блокировку, выберите Добавить. Если вы хотите создать блокировку на родительском уровне, выберите родителя. Выбранный ресурс наследует блокировку от родителя. Например, можно заблокировать группу ресурсов, чтобы применить блокировку ко всем ее ресурсам.
Присвойте блокировке имя и уровень блокировки. При необходимости можно добавить примечания, описывающие блокировку.
Нажмите кнопку Удалить, чтобы удалить выбранную блокировку.
Шаблон
При использовании шаблона Resource Manager (шаблона ARM) или Bicep-файла для развертывания блокировки необходимо понять, как область развертывания и область блокировки работают вместе. Чтобы применить блокировку в области развертывания, например при блокировке группы ресурсов или подписки, не устанавливайте свойство области. При блокировке ресурса в области развертывания задайте свойство области блокировки.
Следующий шаблон применяет блокировку к группе ресурсов. Обратите внимание, что в ресурсе блокировки нет свойства области действия, так как область блокировки соответствует области развертывания. Разверните этот шаблон на уровне группы ресурсов.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"resources": [
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "rgLock",
"properties": {
"level": "CanNotDelete",
"notes": "Resource group should not be deleted."
}
}
]
}
Чтобы создать группу ресурсов и заблокировать ее, разверните предыдущий шаблон на уровне подписки.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "lockDeployment",
"resourceGroup": "[parameters('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "rgLock",
"properties": {
"level": "CanNotDelete",
"notes": "Resource group and its resources should not be deleted."
}
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
При применении блокировки к ресурсу в группе ресурсов добавьте свойство "Scope". Введите имя ресурса в качестве области блокировки.
В следующем примере показан шаблон, который позволяет создать план обслуживания приложений, веб-сайт и блокировку на веб-сайте. В качестве области действия блокировки устанавливается веб-сайт.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"hostingPlanName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"siteName": "[concat('ExampleSite', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2020-12-01",
"name": "[parameters('hostingPlanName')]",
"location": "[parameters('location')]",
"sku": {
"tier": "Free",
"name": "f1",
"capacity": 0
},
"properties": {
"targetWorkerCount": 1
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2020-12-01",
"name": "[variables('siteName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
],
"properties": {
"serverFarmId": "[parameters('hostingPlanName')]"
}
},
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "siteLock",
"scope": "[concat('Microsoft.Web/sites/', variables('siteName'))]",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('siteName'))]"
],
"properties": {
"level": "CanNotDelete",
"notes": "Site should not be deleted."
}
}
]
}
Azure PowerShell
Используйте Azure PowerShell, чтобы с помощью команды New-AzResourceLock заблокировать развернутые ресурсы.
Чтобы заблокировать ресурс, укажите имя ресурса, тип ресурса и имя группы ресурсов.
New-AzResourceLock -LockLevel CanNotDelete -LockName LockSite -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup
Чтобы заблокировать группу ресурсов, укажите имя группы ресурсов.
New-AzResourceLock -LockName LockGroup -LockLevel CanNotDelete -ResourceGroupName exampleresourcegroup
Для получения информации о блокировке используйте команду Get-AzResourceLock. Чтобы получить все блокировки в подписке, выполните следующую команду:
Get-AzResourceLock
Чтобы получить все блокировки для ресурса, выполните следующую команду:
Get-AzResourceLock -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup
Чтобы получить все блокировки для группы ресурсов, выполните следующую команду:
Get-AzResourceLock -ResourceGroupName exampleresourcegroup
Чтобы удалить блокировку для ресурса, используйте:
$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzResourceLock -LockId $lockId
Чтобы удалить блокировку для группы ресурсов, используйте:
$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup).LockId
Remove-AzResourceLock -LockId $lockId
Azure CLI
Чтобы заблокировать развернутые ресурсы с помощью Azure CLI, используйте az lock create команду.
Чтобы заблокировать ресурс, укажите имя ресурса, тип ресурса и имя группы ресурсов.
az lock create --name LockSite --lock-type CanNotDelete --resource-group exampleresourcegroup --resource-name examplesite --resource-type Microsoft.Web/sites
Чтобы заблокировать группу ресурсов, укажите имя группы ресурсов.
az lock create --name LockGroup --lock-type CanNotDelete --resource-group exampleresourcegroup
Чтобы получить сведения о блокировке, выполните команду az lock list. Чтобы получить все блокировки в подписке, выполните следующую команду:
az lock list
Чтобы получить все блокировки для ресурса, выполните следующую команду:
az lock list --resource-group exampleresourcegroup --resource-name examplesite --namespace Microsoft.Web --resource-type sites --parent ""
Чтобы получить все блокировки для группы ресурсов, выполните следующую команду:
az lock list --resource-group exampleresourcegroup
Чтобы удалить блокировку для ресурса, используйте:
lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --resource-type Microsoft.Web/sites --resource-name examplesite --output tsv --query id)
az lock delete --ids $lockid
Чтобы удалить блокировку для группы ресурсов, используйте:
lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --output tsv --query id)
az lock delete --ids $lockid
Python
Чтобы заблокировать развернутые ресурсы с помощью Python, используйте ManagementLockClient.management_locks.create_or_update_at_resource_group_level команду.
Чтобы заблокировать ресурс, укажите имя ресурса, тип ресурса и имя группы ресурсов.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.create_or_update_at_resource_level(
"exampleGroup",
"Microsoft.Web",
"",
"sites",
"examplesite",
"lockSite",
{
"level": "CanNotDelete"
}
)
Чтобы заблокировать группу ресурсов, укажите ее имя.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.create_or_update_at_resource_group_level(
"exampleGroup",
"lockGroup",
{
"level": "CanNotDelete"
}
)
Чтобы получить сведения обо всех блокировках в подписке, используйте ManagementLockClient.management_locks.get.
Чтобы получить все блокировки в подписке, выполните следующую команду:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.list_at_subscription_level()
for lock in lock_result:
print(f"Lock name: {lock.name}")
print(f"Lock level: {lock.level}")
print(f"Lock notes: {lock.notes}")
Чтобы получить блокировку ресурса, используйте:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.get_at_resource_level(
"exampleGroup",
"Microsoft.Web",
"",
"sites",
"examplesite",
"lockSite"
)
print(f"Lock ID: {lock_result.id}")
print(f"Lock Name: {lock_result.name}")
print(f"Lock Level: {lock_result.level}")
Чтобы получить блокировку для группы ресурсов, используйте следующий код:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.get_at_resource_group_level(
"exampleGroup",
"lockGroup"
)
print(f"Lock ID: {lock_result.id}")
print(f"Lock Level: {lock_result.level}")
Чтобы удалить блокировку для ресурса, используйте:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_client.management_locks.delete_at_resource_level(
"exampleGroup",
"Microsoft.Web",
"",
"sites",
"examplesite",
"lockSite"
)
Чтобы удалить блокировку для группы ресурсов, используйте:
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_client.management_locks.delete_at_resource_group_level("exampleGroup", "lockGroup")
REST API
Вы можете заблокировать развернутые ресурсы с помощью REST API для блокировок управления. REST API позволяет создавать и удалять блокировки и получать информацию о существующих блокировках.
Чтобы создать блокировку, выполните следующую команду:
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/locks/{lock-name}?api-version={api-version}
Областью может быть подписка, группа ресурсов или ресурс. Название блокировки может быть любым. Для версии API укажите значение 2016-09-01.
В запросе включите объект JSON, который задает свойства блокировки.
{
"properties": {
"level": "CanNotDelete",
"notes": "Optional text notes."
}
}
Следующие шаги
- Сведения о том, как логически упорядочивать ресурсы, см. в статье "Использование тегов для организации ресурсов Azure и иерархии управления".
- Ограничения и соглашения можно применять внутри подписки с помощью настраиваемых политик. Дополнительные сведения см. в статье "Что такое политика Azure"?
- Инструкции по использованию портал Azure для управления политиками подписок см. в статье "Управление политиками подписки Azure".