Статьи

Заблокируйте свои ресурсы Azure

Обычный вопрос при работе с Azure: «Как защитить свои критически важные ресурсы?» Часто этот вопрос связан с защитой этих ресурсов от того, кто делает что-то, чего не должен делать. Существует несколько способов применить различные уровни контроля к ресурсам Azure: управление доступом на основе ролей (RBAC) и блокировки ресурсов.

Управление доступом на основе ролей (RBAC)

Используя контроль доступа на основе ролей, можно ограничить доступ к плоскости управления различными ресурсами Azure. Роли могут быть назначены для подписки, группы ресурсов и отдельной области ресурсов. Роль связана с конкретными правами (одно или несколько значений «действие», а не «действие»). В настоящее время есть 23 встроенных роли.

Использование RBAC — это отличный способ защитить ресурсы в Azure. С помощью Reader и различных ролей участника (например, участник виртуальной машины, участник учетной записи хранения, участник базы данных SQL и т. Д.) Вы можете эффективно ограничивать действия, которые пользователь может выполнять с ресурсом. Тем не менее, даже с одной из ролей участника, все еще возможно удалить определенные ресурсы. Это позволяет очень легко случайно удалить элемент. , , часто предмет, который не так легко вернуть, например учетную запись хранилища Azure. К сожалению! Блокировки ресурсов позволяют предотвратить удаление ресурсов.

Чтобы узнать больше о RBAC, ознакомьтесь с более ранней статьей Нила Макензи, озаглавленной « RBAC и Azure Resource Manager », а также « Ролевое управление доступом на портале Microsoft Azure » на главном сайте Azure.

Ресурсные замки

Оставшаяся часть этого поста будет посвящена относительно новой функции Azure Resource Manager — блокировке ресурсов. Чтобы работать с блокировками ресурсов, вам потребуется использовать командлеты Azure PowerShell в режиме диспетчера ресурсов Azure.

Switch-AzureMode AzureResourceManager

Вам также необходимо быть в роли «Владелец» или «Администратор доступа пользователя» для требуемой области, поскольку только Владельцы и Администраторы доступа пользователя имеют разрешение на запись в ресурсы Microsoft.Authorization, которые являются поставщиком ресурсов, который обрабатывает блокировки ресурсов.

Для получения дополнительной информации о «действиях» и «не действиях», связанных с конкретными ролями, см. Https://azure.microsoft.com/en-us/documentation/articles/role-based-access-control-configure/# встроенные роли .

Создать блокировку ресурса

Блокировка ресурса может применяться либо к группе ресурсов, либо к области ресурсов. Начиная с версии Azure PowerShell 0.9.3 доступен только один уровень блокировки — CanNotDelete .

Чтобы увидеть блокировки ресурсов в действии, давайте рассмотрим базовый пример создания учетной записи хранилища Azure и применения блокировки ресурса CanNotDelete .

$resourceGroup = 'CollierMedia'
$location = 'East US'
$storageAccountName = 'collierfiles2014'

# Create a new resource group.
New-AzureResourceGroup -Name $resourceGroup -Location $location

# Create a new Azure storage account in the new resource group.
New-AzureStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName -Location $location -Type Standard_GRS

# Apply a resource lock to the storage account.
New-AzureResourceLock -LockLevel CanNotDelete `
-LockNotes 'No deleting!' `
-LockName 'CollierLock' `
-ResourceName $storageAccountName `
-ResourceType 'Microsoft.Storage/storageAccounts' `
-ResourceGroup $resourceGroup -Verbose

# List all the resource locks in the current subscription.
Get-AzureResourceLock

После выполнения вышеуказанных команд PowerShell вы должны увидеть следующий результат:

powershell - создать аккаунт и применить блокировку

Обратите внимание, что на снимке экрана выше показано, что была создана группа ресурсов «CollierMedia», в группе ресурсов «CollierMedia» была создана новая учетная запись хранения «collierfiles2014», и к учетной записи хранения была применена блокировка ресурса. Обратите особое внимание на ResourceId для блокировки — это будет полезно при попытке удалить блокировку.

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

powershell - удалить аккаунт (замаскированный)

В приведенном выше примере демонстрируется создание блокировки ресурса для определенного ресурса. Но как насчет блокировки всей группы ресурсов? Установка блокировки ресурса для всей группы может быть полезна в ситуациях, когда вы хотите убедиться, что никакие ресурсы в этой группе не удалены, например, группа ресурсов, содержащая учетные записи хранения, используемые для виртуальных машин Azure. Пример ниже демонстрирует наложение блокировки на всю группу ресурсов «CollierMedia».

New-AzureResourceLock -LockLevel CanNotDelete `
-LockNotes 'No deleting!' `
-LockName 'CollierGroupLock' `
-ResourceGroup 'CollierMedia' -Verbose

powershell - блокировка группы ресурсов (маскируется)

Удалить блокировку ресурса

Один из простых способов удалить ресурс — использовать ResourceId, связанный с блокировкой. ResourceId возвращается при создании блокировки. Его также можно получить с помощью командлета Get-AzureResourceLock . По умолчанию Get-AzureResourceLock возвращает список всех блокировок в текущей подписке Azure.

powershell - get-azureresourcelock (в маске)

Просмотрите справку ( > get-help Get-AzureResourceLock ), чтобы узнать о дополнительных способах фильтрации возвращаемых блокировок.

Используйте командлет Remove-AzureResourceLock , предоставляя требуемый ResourceId, чтобы снять блокировку.

Remove-AzureResourceLock -ResourceId '/subscriptions/0bbbc191-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/CollierMedia/providers/Microsoft.Storage/storageAccounts/collierfiles2014/providers/Microsoft.Authorization/locks/CollierLock'

Блокировка ресурсов с помощью шаблона Azure Resource Manager

Другой способ заблокировать ресурс — сделать это во время создания с помощью шаблона диспетчера ресурсов Azure (ARM). Шаблон ARM — это файл в формате JSON, который описывает требуемое состояние логически связанной группы ресурсов Azure. Шаблон может содержать ресурсы, необходимые для определенного веб-сайта (например, кэш Redis Azure, база данных SQL Azure, учетная запись хранилища Azure и веб-приложение Azure) или, возможно, просто группа связанных виртуальных машин Azure — выбор за вами. Для получения дополнительной информации о шаблонах Azure Resource Manager перейдите по ссылкам ниже:

В приведенном ниже шаблоне ARM показан пример создания учетной записи хранения Azure и применения блокировки ресурса CannotDelete .

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newStorageAccountName": {
"type": "string",
"metadata": {
"description": "Name of the Storage Account"
}

},

"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS"
],

"metadata": {
"description": "Storage Account type"

}

},

"location": {
"type": "string",
"allowedValues": [
"East US",
"West US",
"West Europe",
"East Asia",
"Southeast Asia"
],

"metadata": {
"description": "Location of storage account"
}
}
},

"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[parameters('newStorageAccountName')]",
"apiVersion": "2015-05-01-preview",
"location": "[parameters('location')]",
"properties": {
"accountType": "[parameters('storageAccountType')]"
},

"resources": [
{
"type": "Microsoft.Storage/storageAccounts/providers/locks",
"name": "[concat(parameters('newStorageAccountName'), '/Microsoft.Authorization/collierLock')]",
"apiVersion": "2015-01-01",
"dependsOn": [ "[concat('Microsoft.Storage/storageAccounts/', parameters('newStorageAccountName'))]" ],
"properties": {
"level": "CannotDelete",
"notes": "Mike's important files - do not delete!"
}
}
]
}
]
}

Соответствующие файлы параметров шаблона выглядят следующим образом:

{

"location": {

"value": "East US"

},

"newStorageAccountName" : {

"value" : "collierimages2015"

},

"storageAccountType": {

"value": "Standard_GRS"

}

}

Для выполнения этого шаблона можно использовать следующий командлет PowerShell:

New-AzureResourceGroupDeployment -ResourceGroupName 'CollierMedia' `
-TemplateFile 'azuredeploy.json' `
-TemplateParameterFile 'azuredeploy.parameters.json' `
-Verbose

Совет. Если вы хотите проверить шаблон ARM перед его развертыванием, вы можете использовать командлет Test-AzureResourceGroupTemplate , например:

Test-AzureResourceGroupTemplate -ResourceGroupName 'CollierMedia' `
-TemplateFile 'azuredeploy.json' `
-TemplateParameterFile 'azuredeploy.parameters.json' `
-Verbose

Выполнение вышеуказанных командлетов должно привести к следующему выводу:

powershell - new-azureresourcegroup - создать учетную запись с блокировками 2

Если мы снова выполним командлет Get-AzureResourceLock , мы заметим, что блокировка ресурса «collierlock» успешно применяется только к только что созданной учетной записи хранения «collierimages2015».

powershell - get-azureresourcelock 2 (в маске)

Следует отметить одну вещь, касающуюся шаблона ARM для создания блокировки ресурса в учетной записи хранения, — это имя вложенного ресурса. В шаблоне (см. Также скриншот ниже) вы заметите, что имя ресурса представляет собой объединение имени учетной записи хранения и имени блокировки, в частности «/Microsoft.Authorization/collierlock». В этом примере «collierlock» — это имя блокировки ресурса.

arm - пример имени блокировки ресурса

Имя ресурса должно отражать, что это вложенный ресурс. В противном случае, если имя ресурса было таким простым, как «collierlock», попытка проверить шаблон с помощью Test-AzureResourceGroupTemplate приведет к ошибке, такой как:

Код: InvalidTemplate

Сообщение: сбой проверки шаблона развертывания: «Ресурс шаблона« collierlock »для типа« Microsoft.Storage/storageAccounts/providers/locks »в строке« 49 »и столбце« 14 »имеет неправильную длину сегмента. Вложенный тип ресурса должен иметь такое же количество сегментов, что и его имя ресурса. Корневой тип ресурса должен иметь длину сегмента на один больше, чем его имя ресурса. ‘.

Завершение

Функции управления доступом на основе ролей в Azure, а также блокировки ресурсов предоставляют несколько вариантов, помогающих защитить критически важные ресурсы Azure. Роли RBAC предоставляют отличный способ ограничить действия для различных типов ресурсов Azure. Однако владелец может удалить ресурс. Ошибки случаются, и ценный ресурс может быть случайно удален. Используя блокировку ресурсов для этих наиболее важных ресурсов Azure, вы можете помочь устранить эти «упс». , , я удалил это ”моменты.

В предыдущих разделах демонстрировалось, как создать блокировку ресурса для отдельной учетной записи хранения, снять блокировку ресурса и применить блокировку ресурса как часть шаблона диспетчера ресурсов Azure. Другой пример использования блокировок ресурсов см. В публикации Александра Бризбуа по адресу https://alexandrebrisebois.wordpress.com/2015/05/26/protect-mission-critial-azure-virtual-machines-from-accidental-deletion/ . В своем посте Александр демонстрирует, как создать блокировку ресурса для виртуальных машин Azure.

Особая благодарность Нилу Маккензи, Чарльзу Ламанна и Райану Джонсу за помощь в рассмотрении этого поста. Передайте  образец Райана Джонса на GitHub  за информацию о том, как создать блокировку ресурса для учетной записи хранения.