Поделиться через


Создание и развертывание стеков развертывания Azure в Bicep

Стек развертывания Azure — это ресурс, который позволяет управлять группой ресурсов Azure в виде единой единой единицы. При отправке Bicep-файла или шаблона JSON Azure Resource Manager (шаблона ARM JSON) в стек развертывания необходимо определить ресурсы, управляемые стеком. При удалении ресурса из шаблона, его можно отсоединить или удалить в зависимости от действия, указанного в параметре actionOnUnmanage стека развертывания. Вы можете ограничить доступ к стеку развертывания с помощью управления доступом на основе ролей Azure (Azure RBAC), аналогично другим ресурсам Azure.

Чтобы создать и обновить стек развертывания, используйте Azure CLI, Azure PowerShell или портал Azure с файлами Bicep. Стек транспилирует эти файлы Bicep в шаблоны JSON ARM и развертывает их в качестве объекта развертывания. Стек развертывания предоставляет дополнительные возможности за пределами знакомых ресурсов развертывания и является супермножеством этих возможностей.

Microsoft.Resources/deploymentStacks — это тип ресурса для стеков развертывания. Он состоит из основного шаблона, который может выполнять обновления между несколькими элементами в пределах сфер ресурсов, описанных им, и блокировать любые нежелательные изменения этих ресурсов.

При планировании развертывания и определении групп ресурсов, которые должны быть частью одного стека, рассмотрите жизненный цикл управления этих ресурсов, включая создание, обновление и удаление. Например, может потребоваться подготовить некоторые тестовые виртуальные машины для различных групп приложений в разных областях группы ресурсов. Стек развертывания можно использовать для создания этих тестовых сред и обновления конфигураций тестовой виртуальной машины с помощью последующих обновлений стека развертывания. После завершения проекта может потребоваться удалить все созданные вами ресурсы, например тестовые виртуальные машины. Используйте стек развертывания и укажите соответствующий флаг удаления для удаления управляемых ресурсов. Этот упрощенный подход экономит время во время очистки среды, так как он включает в себя одно обновление ресурса стека, а не отдельное изменение или удаление каждой тестовой виртуальной машины в различных областях группы ресурсов.

Для стеков развертывания требуется Azure PowerShell версии 12.0.0 или более поздней версии или Azure CLI версии 2.61.0 или более поздней.

Чтобы создать первый стек развертывания, пройдите Краткое руководство: создание стека развертывания.

Зачем использовать стеки развертывания?

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

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

Известные ограничения

  • Стек развертывания не управляет неявно созданными ресурсами. Поэтому для этих ресурсов нельзя использовать запретные назначения или очистку.
  • Назначения с отказом не поддерживают теги.
  • Запретные назначения не поддерживаются на уровне группы управления. Их поддержка осуществляется в стеке группы управления, если развертывание указывает на область подписки.
  • Стеки развертывания не могут удалять секреты из хранилища ключей Key Vault. Если вы удаляете секреты хранилища ключей из шаблона, обязательно выполните команду обновления и удаления стека развертывания с режимом отсоединения.

Известные проблемы

  • Удаление групп ресурсов в настоящее время обходит отказ в назначениях. При создании стека развертывания в области группы ресурсов файл Bicep не содержит определение группы ресурсов. Несмотря на параметр "Запретить назначение", можно удалить группу ресурсов и его содержащийся стек. Однако, если замок активен для любого ресурса в группе, операция удаления не удается.
  • Поддержка What-if пока недоступна.
  • Стек, сфокусированный на группе управления, не может развертываться в другую группу управления. Он может развертываться только в группе управления самого стека или в дочерней подписке.
  • Справка по команде Azure PowerShell перечисляет значение DeleteResourcesAndResourcesGroups для переключателя ActionOnUnmanage. При использовании этого значения команда отсоединяет управляемые ресурсы и группы ресурсов. Это значение удаляется в следующем обновлении. Не используйте это значение.
  • В некоторых случаях командлеты New и Set Azure PowerShell могут возвращать общую ошибку проверки шаблона, без явного указания действия. Эта ошибка будет исправлена в следующем выпуске. Если ошибка не понятна, запустите командлет в режиме отладки, чтобы увидеть более подробную ошибку в необработанном ответе.
  • Поставщик Microsoft Graph не поддерживает стеки развертывания.

Встроенные роли

Предупреждение

Внедрение разрешения RBAC Microsoft.Resources/deploymentStacks/manageDenySetting/action проходит в различных регионах, включая облака для государственных организаций.

Есть две встроенные роли для развертывания стека:

  • Участник Azure Deployment Stack. Пользователи могут управлять стеками развертывания, но не могут создавать или удалять назначения запретов в стеках развертывания.
  • Владелец Azure Deployment Stack: Пользователи могут управлять стеками развертывания, включая тех пользователей, у которых имеются запреты на назначение ролей.

Создание стеков развертывания

Вы можете создать ресурс стека развертывания в области группы ресурсов, подписки или группы управления. Шаблон, предоставляемый стеком развертывания, определяет ресурсы для создания или обновления в целевой области.

  • Стек в области группы ресурсов может развернуть шаблон в той же группе ресурсов, где существует стек развертывания.
  • Стек в области подписки может развернуть шаблон в группе ресурсов или в той же подписке, где существует стек развертывания.
  • Стек на уровне группы управления может развернуть шаблон в подписке.

Важно отметить, что там, где существует стек развертывания, создается назначение запрета с использованием возможности настройки запрета. Например, создав стек развертывания на уровне подписки, который развертывает шаблон на уровне группы ресурсов и использует режим параметров DenyDeleteзапрета, вы можете легко подготовить управляемые ресурсы для указанной группы ресурсов и заблокировать попытки удаления этих ресурсов. Этот подход помогает повысить безопасность стека развертывания, разделив его на уровне подписки, а не на уровне группы ресурсов. Это разделение гарантирует, что команды разработчиков, работающие с подготовленными ресурсами, имеют только возможность видеть и изменять группы ресурсов. Стек развертывания остается изолированным на более высоком уровне. Эта конфигурация ограничивает количество пользователей, которые могут редактировать стек развертывания и изменять настройки запрета доступа. Дополнительные сведения см. в разделе "Защита управляемого ресурса от удаления".

Вы также можете использовать команды create-stack для обновления стеков развертывания.

Чтобы создать стек развертывания в области группы ресурсов, выполните следующие действия.

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

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

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Параметр DeploymentResourceGroupName указывает группу ресурсов, используемую для хранения управляемых ресурсов. Если параметр не указан, управляемые ресурсы хранятся в области подписки.

Чтобы создать стек развертывания в области группы управления, выполните следующие действия.

New-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Параметр deploymentSubscriptionId указывает подписку, используемую для хранения управляемых ресурсов. Если параметр не указан, управляемые ресурсы хранятся в области группы управления.

Отобразить список стеков развертывания

Чтобы перечислить ресурсы стека развертывания на уровне группы ресурсов:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Чтобы перечислить ресурсы стека развертывания на уровне подписки:

Get-AzSubscriptionDeploymentStack

Чтобы перечислить ресурсы стека развертывания на уровне группы управления:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Обновление стеков развертывания

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

Шаблон проектирования инфраструктуры как кода обеспечивает полный контроль над списком управляемых ресурсов.

Использование команды Set

Чтобы обновить стек развертывания в области группы ресурсов, выполните следующие действия.

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

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

Set-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

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

Чтобы обновить стек развертывания в области группы управления, выполните следующие действия.

Set-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Используйте команду «Новая»

Вы получите предупреждение, аналогичное следующему:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Дополнительные сведения см. в разделе "Создание стеков развертывания".

Отсоединение и удаление элементов управления

Отсоединяемый ресурс (или неуправляемый ресурс) ссылается на ресурс, который стек развертывания не отслеживает или не управляет, но по-прежнему существует в Azure.

Чтобы указать Azure удалить неуправляемые ресурсы, обновите стек с помощью команды создания стека и включите переключатель ActionOnUnmanage . Дополнительные сведения см. в разделе "Создание стека развертывания".

Используйте переключатель ActionOnUnmanage, чтобы определить, что происходит с ресурсами, которые больше не управляются после обновления или удаления стека. Допустимые значения:

  • deleteAll: Используйте удаление вместо отсоединения для управляемых ресурсов и групп ресурсов.
  • deleteResources: используйте функцию удаления вместо отсоединения только для управляемых ресурсов.
  • detachAll: отключите управляемые ресурсы и ресурсные группы.

Например:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -ActionOnUnmanage "deleteAll" 

Предупреждение

При удалении групп ресурсов с переключателем action-on-unmanage, установленным на deleteAll, происходит удаление управляемых групп ресурсов и всех содержащихся в них ресурсов.

Обработка ошибки несогласованности стека

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

The deployment stack '{0}' might not have an accurate list of managed resources. To prevent resources from being accidentally deleted, check that the managed resource list doesn't have any additional values. If there is any uncertainty, it's recommended to redeploy the stack with the same template and parameters as the current iteration. To bypass this warning, specify the 'BypassStackOutOfSyncError' flag.

Список ресурсов можно получить из портала Azure или повторно развернуть текущий Bicep-файл с теми же параметрами. В выходных данных показаны управляемые ресурсы.

...
Resources: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
           /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk

После просмотра и проверки списка ресурсов в группе повторно выполните команду с переключателем BypassStackOutOfSyncError в Azure PowerShell (или bypass-stack-out-of-sync-error в Azure CLI). Используйте этот параметр только после тщательного просмотра списка ресурсов в стеке. Не используйте этот параметр по умолчанию.

Удаление стеков развертывания

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

  • DeleteAll: удалите как ресурсы, так и группы ресурсов.
  • DeleteResources: удалите только ресурсы.
  • DetachAll: отсоедините ресурсы.

Даже если указать переключатель delete-all, неуправляемые ресурсы в группе ресурсов, где находится стек развертывания, препятствуют удалению как неуправляемых ресурсов, так и самой группы ресурсов.

Чтобы удалить ресурсы стека развертывания в контексте группы ресурсов, выполните следующие действия.

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

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

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Чтобы удалить ресурсы стека развертывания на уровне группы управления, выполните следующие действия.

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Просмотр управляемых ресурсов в стеке развертывания

В службе стека развертывания пока нет графического интерфейса пользователя (GUI) для портала Azure. Чтобы просмотреть управляемые ресурсы в стеке развертывания, используйте следующие команды Azure PowerShell или Azure CLI:

Чтобы просмотреть управляемые ресурсы в области группы ресурсов, выполните следующие действия.

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

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

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Чтобы просмотреть управляемые ресурсы в области группы управления, выполните следующие действия.

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Добавление ресурсов в стек развертывания

Чтобы добавить управляемый ресурс, добавьте определение ресурса в базовые файлы Bicep, а затем выполните команду обновления или повторно выполните команду create. Дополнительные сведения см. в статье Обновление стеков развертывания.

Удаление управляемых ресурсов из стека развертывания

Чтобы удалить управляемый ресурс, удалите определение ресурса из базовых файлов Bicep, а затем выполните команду обновления или повторно выполните команду создания. Дополнительные сведения см. в статье Обновление стеков развертывания.

Защита управляемых ресурсов

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

Параметр запрета применяется только к операциям плоскости управления , а не к операциям плоскости данных. Например, вы создаете учетные записи хранения и хранилища ключей с помощью плоскости управления, что означает, что стек развертывания управляет ими. Однако вы создаете дочерние ресурсы, такие как секреты или контейнеры Blob, через канал данных, что означает, что стек развертывания не может управлять ими.

Параметр запрета применяется только к явно созданным ресурсам, а не к неявно созданным. Например, управляемый кластер AKS создает несколько других служб для ее поддержки, например виртуальной машины. В этом случае, так как виртуальная машина не определена в файле Bicep и является неявно созданным ресурсом, он не подлежит запрету параметров стека развертывания.

Примечание.

Для новейшего выпуска требуются определенные разрешения в области стека:

  • Создайте или обновите стек развертывания и настройте параметр «запрет» для значения, отличного от None.
  • Обновите или удалите стек развертывания с существующим параметром запрета, отличающимся от None значения.

Используйте роли встроенные в стек развертывания для предоставления разрешений.

Azure PowerShell включает следующие параметры для настройки отказа в предоставлении доступа:

  • DenySettingsMode: определяет операции, которые запрещены для управляемых ресурсов для защиты от несанкционированных субъектов безопасности, пытающихся удалить или обновить их. Это ограничение применяется ко всем пользователям, если вы явно не предоставляете доступ. К значениям относятся: None, DenyDeleteи DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: когда эти настройки режима запрета указаны, они также применяются к дочернему уровню управляемых ресурсов. Например, файл Bicep определяет ресурс Microsoft.Sql/servers (родительский) и ресурс Microsoft.Sql/servers/database (дочерний). Если вы создаете стек развертывания с помощью файла Bicep, при включенном параметре DenySettingsApplyToChildScopes, и установленном DenySettingsMode в DenyWriteAndDelete, вы не можете добавить дополнительные дочерние ресурсы ни к ресурсу Microsoft.Sql/servers, ни к ресурсу Microsoft.Sql/servers/databases.
  • DenySettingsExcludedAction: список операций управления на основе ролей, исключенных из параметров запрета. Разрешено до 200 действий.
  • DenySettingsExcludedPrincipal: список основных идентификаторов Microsoft Entra, исключённых из блокировки. Разрешено до пяти руководителей.

Чтобы применить параметры запрета в области группы ресурсов, выполните указанные ниже действия.

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

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

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

DeploymentResourceGroupName Используйте параметр, чтобы указать имя группы ресурсов, в которой создается стек развертывания. Если область не указана, используется область стека развертывания.

Чтобы применить параметры запрета в области группы управления, выполните указанные ниже действия.

New-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Используйте параметр DeploymentSubscriptionId , чтобы указать идентификатор подписки, на котором создается стек развертывания. По умолчанию, если область действия не указана, используется область стека развертывания.

Отсоединение управляемых ресурсов от стека развертывания

По умолчанию стеки развертывания отсоединяются и не удаляют неуправляемые ресурсы, если они больше не содержатся в области управления стека. Дополнительные сведения см. в статье Обновление стеков развертывания.

Экспорт шаблонов из стеков развертывания

Ресурсы из стека развертывания можно экспортировать в выходные данные JSON. Выходные данные можно передать в файл.

Чтобы экспортировать стек развертывания в области группы ресурсов, выполните следующие действия.

Save-AzResourceGroupDeploymentStack `
   -Name "<deployment-stack-name>" `
   -ResourceGroupName "<resource-group-name>" `

Чтобы экспортировать стек развертывания в области подписки, выполните следующие действия.

Save-AzSubscriptionDeploymentStack `
  -name "<deployment-stack-name>"

Чтобы экспортировать стек развертывания на уровне группы управления, выполните следующие действия.

Save-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>"

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

Чтобы пройти краткое руководство по развертыванию Bicep, см. краткое руководство: создание и развертывание стека развертывания с помощью Bicep.