Развертывание группы управления с помощью файлов Bicep

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

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

Поддерживаемые ресурсы

Не все типы ресурсов можно развернуть на уровне группы управления. В этом разделе перечислены поддерживаемые типы ресурсов.

Для Azure Blueprints используйте следующие типы:

Для Политики Azure используйте следующие типы:

Для управления доступом используйте:

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

Для управления ресурсами используйте следующие типы:

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

Область — набор

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

targetScope = 'managementGroup'

Команды развертывания

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

Для Azure CLI используйте az deployment sub create:

az deployment mg create \
  --name demoMGDeployment \
  --location WestUS \
  --management-group-id myMG \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"

Более подробные сведения о командах и параметрах развертывания для развертывания шаблонов ARM приведены в следующих статьях:

Расположение и имя развертывания

На уровне группы управления требуется указать расположение для развертывания. Расположение развертывания отделено от расположения развертываемых ресурсов. В расположении развертывания указывается место хранения данных развертывания. Для развертываний подписок и клиентов также требуется указать расположение. При развертывании группы ресурсов для хранения данных развертывания используется расположение группы ресурсов.

Можно указать имя развертывания или использовать имя развертывания по умолчанию. Имя по умолчанию — это имя файла шаблона. Например, когда вы развертываете шаблон с именем main.bicep, создается имя развертывания по умолчанию main.

Для каждого имени развертывания расположение остается неизменным. Нельзя создать развертывание в одном расположении, если в другом уже есть развертывание с таким же именем. Например, если вы создаете развертывание группы управления с именем deployment1 в centralus, вы не сможете позже создать другое развертывание с именем deployment1, но уже в расположении westus. Если появится код ошибки InvalidDeploymentLocation, используйте другое имя или то же расположение, что и для предыдущего развертывания с этим именем.

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

В Bicep-файле все ресурсы, объявленные ключевым resource словом, должны быть развернуты в той же области, что и развертывание. Для развертывания группы управления это означает, что все resource объявления в файле Bicep должны быть развернуты в той же группе управления или в качестве дочернего или расширенного ресурса ресурса в той же группе управления, что и развертывание.

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

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

Модуль Bicep можно развернуть в файле Bicep области управления в следующих областях:

Область для группы управления

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

targetScope = 'managementGroup'

// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2025-03-01' = {
  ...
}

Чтобы назначить другую группу управления, добавьте модуль. Используйте функцию managementGroup, чтобы задать свойство scope. Укажите имя группы управления.

targetScope = 'managementGroup'

param otherManagementGroupName string

// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentMG'
  scope: managementGroup(otherManagementGroupName)
}

Область действия для подписки

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

Чтобы назначить подписку в группе управления, добавьте модуль. Используйте функцию subscription, чтобы задать свойство scope. Укажите идентификатор подписки.

targetScope = 'managementGroup'

param subscriptionID string

// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Область для группы ресурсов

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

Чтобы назначить группу ресурсов в группе управления, добавьте модуль. Используйте функцию resourceGroup, чтобы задать свойство scope. Укажите идентификатор подписки и имя группы ресурсов.

targetScope = 'managementGroup'

param subscriptionID string
param resourceGroupName string

// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Область для клиента

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

targetScope = 'managementGroup'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

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

Группа управления

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

В приведенном ниже примере показано как создать новую группу управления в корневой группе управления.

targetScope = 'managementGroup'

param mgName string = 'mg-${uniqueString(newGuid())}'

resource newMG 'Microsoft.Management/managementGroups@2024-02-01-preview' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output newManagementGroup string = mgName

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

targetScope = 'managementGroup'

param mgName string = 'mg-${uniqueString(newGuid())}'

resource newMG 'Microsoft.Management/managementGroups@2024-02-01-preview' = {
  scope: tenant()
  name: mgName
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
  }
}

output newManagementGroup string = mgName

Подписки

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

Для сведений о том, как развернуть шаблон, который перемещает существующую подписку Azure в новую группу управления, см. раздел Перемещение подписок в шаблоне ARM

Политика Azure

Определения пользовательских политик, которые вы внедряете в группу управления, являются расширениями этой группы. Чтобы получить идентификатор определения настраиваемой политики, используйте функцию extensionResourceId(). Когда вы вызываете эту функцию напрямую, первым аргументом должен быть полностью квалифицированный идентификатор ресурса управляющей группы. Это требование предотвращает сбои, когда развертывание начинается с более низкой сферы действия, например, с подпиской или группой ресурсов.

В Bicep предпочитайте символическое название определения политики и его id свойство, как показано в следующем примере. Определения встроенных политик — это ресурсы уровня клиента. Чтобы получить идентификатор определения настраиваемой политики, используйте функцию tenantResourceId().

В следующем примере показано, как определить политику на уровне группы управления и как назначить ее.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2025-03-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2025-03-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

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

Сведения о других областях приведены в следующих статьях: