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


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

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

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

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

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

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

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

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

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

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

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

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

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

  • Удаление групп ресурсов в настоящее время проходит запретные назначения. При создании стека развертывания в области группы ресурсов файл Bicep не содержит определения для группы ресурсов. Несмотря на параметр запрета назначения, можно удалить группу ресурсов и его содержащийся стек. Однако если блокировка активна для любого ресурса в группе, операция удаления завершается ошибкой.
  • Поддержка What-if пока недоступна.
  • Стек с областью действия группы управления ограничен развертыванием в другой группе управления. Он может развертываться только в группе управления самого стека или в дочерней подписке.
  • Команда PowerShell содержит DeleteResourcesAndResourcesGroups значение для коммутатора ActionOnUnmanage . При использовании этого значения команда отсоединяет управляемые ресурсы и группы ресурсов. Это значение будет удалено в следующем обновлении. Не используйте это значение.
  • В некоторых случаях командлеты "Создать" и "Задать" 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. После внесения изменений можно обновить стек развертывания двумя способами: выполнить команду обновления или повторно запустить команду создания.

Список управляемых ресурсов можно полностью контролировать с помощью инфраструктуры в виде шаблона проектирования кода (IaC).

Использование команды 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"

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

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

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

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

Например:

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

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

При удалении групп ресурсов с параметром без управления действием задано значение DeleteAll, управляемые группы ресурсов и все ресурсы, содержащиеся в них, также будут удалены.

Обработка ошибки стека вне синхронизации

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

The deployment stack '{0}' may not have an accurate list of managed resources. To ensure no resources are accidentally deleted, please check that the managed resource list does not have any additional values. If there is any uncertainty, we recommend redeploying the stack with the same template and parameters as the current iteration. To bypass this warning, please specify the 'BypassStackOutOfSyncError' flag.

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

...
Resources: /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
           /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/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, а затем выполните команду обновления или повторно выполните команду создания. Дополнительные сведения см. в статье об обновлении стеков развертывания.

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

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

Параметр запрета применяется только к операциям плоскости управления, а не к операциям плоскости данных. Например, учетные записи хранения и хранилища ключей создаются с помощью уровня управления, что позволяет управлять ими стеком развертывания. Однако дочерние ресурсы, такие как секреты или контейнеры БОЛЬШИХ двоичных объектов, созданные с помощью плоскости данных, не могут управляться стеком развертывания.

Параметр запрета применяется только к явно созданным ресурсам, а неявно созданным. Например, управляемый кластер 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/server или ресурс Microsoft.Sql/server/servers/database .
  • 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>"

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

Сведения о кратком руководстве см . в кратком руководстве по созданию стека развертывания.