Развертывание арендаторов с помощью шаблонов ARM
По мере развития организации может потребоваться определить и назначить политики или управление доступом на основе ролей Azure (Azure RBAC) в клиенте Microsoft Entra. С помощью шаблонов уровня клиента можно декларативно применять политики и назначать роли на глобальном уровне.
Совет
Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Дополнительные сведения см. в разделе Развертывания клиентов.
Поддерживаемые ресурсы
Не все типы ресурсов можно развернуть на уровне арендатора. В этом разделе перечислены поддерживаемые типы ресурсов.
Для Управления доступом на основе ролей Azure (Azure RBAC) используйте следующие типы:
Для вложенных шаблонов, которые развертываются в группах управления, подписках или группах ресурсов, используйте следующие типы:
Для создания групп управления используйте следующие типы:
Для создания подписок используйте следующие типы:
Для управления затратами используйте следующие типы:
Для настройки портала используйте следующие типы:
Встроенные определения политик — это ресурсы уровня арендатора, однако развертывать на арендаторе пользовательские определения политик нельзя. Пример назначения встроенного определения политики ресурсу см. в примере для tenantResourceId.
Схема
Схема, используемая для развертываний клиентов, отличается от схемы развертываний группы ресурсов.
Для шаблонов используйте:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
...
}
Схема для файла параметров одинакова для всех областей развертывания. Для файлов параметров используйте:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Требуемый доступ
У субъекта, развертывающего шаблон, должны быть разрешения на создание ресурсов в области клиента. У субъекта должно быть разрешение на действия развертывания (Microsoft.Resources/deployments/*
) и создание ресурсов, определенных в шаблоне. Например, чтобы создать группу управления, у субъекта должно быть разрешение "Участник" в области клиента. Чтобы создавать назначения ролей, у участника должно быть разрешение "Владелец".
Глобальный Администратор istrator для идентификатора Microsoft Entra id не имеет разрешения на назначение ролей. Чтобы включить развертывания шаблонов в области клиента, глобальному администратору следует выполнить такие действия:
Повысить уровень доступа к учетной записи, чтобы глобальный администратор мог назначать роли. Дополнительные сведения см. в статье Повышение прав доступа для управления всеми подписками Azure и группами управления.
Назначьте роль "Владелец" или "Участник" субъекту, который будет развертывать шаблоны.
New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
У субъекта теперь есть необходимые разрешения для развертывания шаблона.
Команды развертывания
Команды, используемые для развертываний клиентов, отличаются от команд для развертываний группы ресурсов.
Для Azure CLI используйте az deployment tenant create:
az deployment tenant create \
--name demoTenantDeployment \
--location WestUS \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"
Более подробные сведения о командах и параметрах развертывания для развертывания шаблонов ARM приведены в следующих статьях:
- Развертывание ресурсов с помощью шаблонов ARM и портала Microsoft Azure
- Развертывание ресурсов с помощью шаблонов ARM и Azure CLI
- Развертывание ресурсов с помощью шаблонов ARM и Azure PowerShell
- Развертывание ресурсов с помощью шаблонов ARM и REST API Resource Manager
- Использование кнопки развертывания для развертывания шаблонов из репозитория GitHub
- Развертывание шаблонов ARM из Cloud Shell
Расположение и имя развертывания
Для развертываний на уровне клиента необходимо указать расположение для развертывания. Расположение развертывания отделено от расположения развертываемых ресурсов. В расположении развертывания указывается место хранения данных развертывания. При развертывании подписок и групп управления также требуется расположение. При развертывании группы ресурсов для хранения данных развертывания используется расположение группы ресурсов.
Можно указать имя развертывания или использовать имя развертывания по умолчанию. Имя по умолчанию — это имя файла шаблона. Например, развернув шаблон с именем azuredeploy.json создается имя развертывания по умолчанию azuredeploy.
Для каждого имени развертывания расположение остается неизменным. Нельзя создать развертывание в одном расположении, если в другом уже есть развертывание с таким же именем. Например, если вы создаете развертывание арендатора с именем deployment1 в centralus, вы не сможете позже создать другое развертывание с именем deployment1, но уже в расположении westus. Если появится код ошибки InvalidDeploymentLocation
, используйте другое имя или то же расположение, что и для предыдущего развертывания с этим именем.
Области развертывания
При развертывании в арендаторе ресурсы можно развернуть в:
- арендаторе;
- группе управления в арендаторе;
- подписки;
- группы ресурсов
Только запрещенные область переходы из группы ресурсов в группу управления или из подписки на группу управления.
Ресурс расширения можно ограничить целевым объектом, который отличается от целевого объекта развертывания.
Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.
В этом разделе показано, как указать различные области. Такие различные области можно объединить в один шаблон.
Область для клиента
Ресурсы, определенные в разделе ресурсов шаблона, применяются к арендатору.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
tenant-resources
],
"outputs": {}
}
Область для группы управления
Чтобы выбрать в качестве области группу управления в арендаторе, добавьте вложенное развертывание и укажите свойство scope
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string"
}
},
"variables": {
"mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "nestedMG",
"scope": "[variables('mgId')]",
"location": "eastus",
"properties": {
"mode": "Incremental",
"template": {
management-group-resources
}
}
}
],
"outputs": {}
}
Область действия для подписки
Вы также можете выбирать в качестве области подписки в арендаторе. Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.
Чтобы выбрать в качестве области подписку в арендаторе, используйте вложенное развертывание и свойство subscriptionId
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedSub",
"location": "westus2",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
subscription-resources
}
]
}
}
}
]
}
Область для группы ресурсов
Вы также можете выбирать в качестве области группы ресурсов в арендаторе. Пользователь, развертывающий шаблон, должен иметь доступ к указанной области.
Чтобы выбрать в качестве области группу ресурсов в арендаторе, используйте вложенное развертывание. Укажите свойства subscriptionId
и resourceGroup
. Задавать расположение для вложенного развертывания не нужно, так как оно развертывается в расположении группы ресурсов.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedRGDeploy",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
resource-group-resources
}
]
}
}
}
]
}
Создание группы управления
В следующем примере создается группа управления.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2020-02-01",
"name": "[parameters('mgName')]",
"properties": {
}
}
]
}
Если у вашей учетной записи нет разрешения на развертывание в арендаторе, вы все равно можете создавать группы управления, развернув их в другой области. Дополнительные сведения находятся в Обзоре группы управления.
Назначение роли
В следующем шаблоне присваивается роль в области арендатора.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "17107802581699825924"
}
},
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "principalId if the user that will be given contributor access to the tenant"
}
},
"roleDefinitionId": {
"type": "string",
"defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
"metadata": {
"description": "roleDefinition for the assignment - default is owner"
}
}
},
"variables": {
"roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-03-01-preview",
"name": "[variables('roleAssignmentName')]",
"properties": {
"roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Следующие шаги
- Дополнительные сведения о назначении ролей Azure см. в статье Назначение ролей Azure с помощью шаблонов Azure Resource Manager.
- Кроме того, можно развертывать шаблоны на уровне подписки или группы управления.