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

По мере развития организации может потребоваться определить и назначить политики или управление доступом на основе ролей Azure (Azure RBAC) в клиенте Microsoft Entra. С помощью шаблонов уровня клиента можно декларативно применять политики и назначать роли на глобальном уровне.

Обучающие материалы

Дополнительные сведения об областях развертывания, а также практические инструкции вы найдете в модуле Развертывание ресурсов в подписках, группах управления и арендаторах с помощью Bicep

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

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

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

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

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

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

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

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

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

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

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

targetScope = 'tenant'

Требуемый доступ

У субъекта, развертывающего шаблон, должны быть разрешения на создание ресурсов в области клиента. У субъекта должно быть разрешение на действия развертывания (Microsoft.Resources/deployments/*) и создание ресурсов, определенных в шаблоне. Например, чтобы создать группу управления, у субъекта должно быть разрешение "Участник" в области клиента. Чтобы создавать назначения ролей, у участника должно быть разрешение "Владелец".

Глобальный Администратор istrator для идентификатора Microsoft Entra id не имеет разрешения на назначение ролей. Чтобы включить развертывания шаблонов в области клиента, глобальному администратору следует выполнить такие действия:

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

  2. Назначьте роль "Владелец" или "Участник" субъекту, который будет развертывать шаблоны.

    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-file main.bicep

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

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

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

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

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

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

При развертывании в арендаторе ресурсы можно развернуть в:

  • арендаторе;
  • группе управления в арендаторе;
  • подписки;
  • группы ресурсов

Ресурс расширения можно ограничить целевым объектом, который отличается от целевого объекта развертывания.

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

В этом разделе показано, как указать различные области. Такие различные области можно объединить в один шаблон.

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

Ресурсы, определенные в файле Bicep, применяются к арендатору.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

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

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

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

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

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

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

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

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

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Создание группы управления

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

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

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: mgName
  properties: {}
}

Если у вашей учетной записи нет разрешения на развертывание в арендаторе, вы все равно можете создавать группы управления, развернув их в другой области. Дополнительные сведения находятся в Обзоре группы управления.

Назначение роли

В следующем шаблоне присваивается роль в области арендатора.

targetScope = 'tenant'

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

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

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