Развертывание группы управления с помощью файлов Bicep
В этой статье показано, как задать область с помощью Bicep при развертывании в группе управления.
По мере развития вашей организации вы можете развернуть файл Bicep для создания ресурсов на уровне группы управления. Например, может потребоваться определить и назначить политики или Управление доступом на основе ролей Azure (Azure RBAC) для группы управления. С помощью шаблонов уровня группы управления вы можете декларативно применять политики и назначать роли на уровне группы управления.
Обучающие материалы
Дополнительные сведения об областях развертывания, а также практические инструкции вы найдете в модуле Развертывание ресурсов в подписках, группах управления и арендаторах с помощью Bicep
Поддерживаемые ресурсы
Не все типы ресурсов можно развернуть на уровне группы управления. В этом разделе перечислены поддерживаемые типы ресурсов.
Для Azure Blueprints используйте следующие типы:
Для Политики Azure используйте следующие типы:
Для управления доступом используйте:
- privateLinkAssociations
- roleAssignments;
- roleAssignmentScheduleRequests
- roleDefinitions.
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Для вложенных шаблонов, которые развертываются в подписках или группах ресурсов, используйте следующие типы:
Для управления ресурсами используйте следующие типы:
Группы управления — это ресурсы уровня клиента. Тем не менее, вы можете создать группы управления в развертывании группы управления, установив область действия новой группы управления для клиента. См. раздел Группа управления.
Область — набор
Чтобы задать область для группы управления, используйте следующую команду:
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 приведены в следующих статьях:
- Развертывание ресурсов с помощью шаблонов ARM и Azure CLI
- Развертывание ресурсов с помощью шаблонов ARM и Azure PowerShell
- Развертывание шаблонов ARM из Cloud Shell
Расположение и имя развертывания
На уровне группы управления требуется указать расположение для развертывания. Расположение развертывания отделено от расположения развертываемых ресурсов. В расположении развертывания указывается место хранения данных развертывания. Для развертываний подписок и клиентов также требуется указать расположение. При развертывании группы ресурсов для хранения данных развертывания используется расположение группы ресурсов.
Можно указать имя развертывания или использовать имя развертывания по умолчанию. Имя по умолчанию — это имя файла шаблона. Например, когда вы развертываете шаблон с именем main.bicep, создается имя развертывания по умолчанию main.
Для каждого имени развертывания расположение остается неизменным. Нельзя создать развертывание в одном расположении, если в другом уже есть развертывание с таким же именем. Например, если вы создаете развертывание группы управления с именем deployment1 в centralus, вы не сможете позже создать другое развертывание с именем deployment1, но уже в расположении westus. Если появится код ошибки InvalidDeploymentLocation
, используйте другое имя или то же расположение, что и для предыдущего развертывания с этим именем.
Области развертывания
При развертывании в группе управления можно развернуть следующие ресурсы:
- целевую группу управления из операции;
- другую группу управления в клиенте;
- подписки в группе управления;
- группы ресурсов в группе управления;
- клиенте для группы ресурсов.
Ресурс расширения можно ограничить целевым объектом, который отличается от целевого объекта развертывания.
Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.
Область для группы управления
Чтобы развернуть ресурсы в целевой группе управления, добавьте их с использованием ключевого слова resource
.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-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@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
В приведенном ниже примере показано как создать новую группу управления в группе управления, предназначенной для развертывания. Он использует функцию группы управления.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Подписки
Чтобы использовать шаблон ARM для создания новой подписки Azure в группе управления, см. следующие статьи:
- Программное создание подписок Azure для Соглашения Enterprise
- Программное создание подписок Azure для Клиенсткого соглашения Майкрософт
- Программное создание подписок Azure для Соглашения с партнером Майкрософт
Для сведений о том, как развернуть шаблон, который перемещает существующую подписку Azure в новую группу управления, см. раздел Перемещение подписок в шаблоне ARM
Политика Azure
Определения настраиваемой политики, развернутые в группе управления, являются расширениями группы управления. Чтобы получить идентификатор определения настраиваемой политики, используйте функцию extensionResourceId(). Определения встроенных политик — это ресурсы уровня клиента. Чтобы получить идентификатор определения настраиваемой политики, используйте функцию 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@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Следующие шаги
Сведения о других областях приведены в следующих статьях: