Задание — Развертывание ресурсов в группе управления
Проект Teddybear был успехом, и теперь секретная R&D разработки в вашей игрушке компании готова исследовать еще больше новых игрушек. Команда начала запрашивать новые подписки на почти ежедневной основе, и она должна применять свои политики во всех этих случаях.
Вместо того чтобы дублировать определения и назначения политики в каждой подписке, вы решили поместить все подписки вашей команды в группу управления. Затем политику можно применить ко всей группе управления, а не к каждой подписке по отдельности.
В этом упражнении вы создадите новый шаблон Bicep для применения определений политик и назначений к группе управления.
Во время процесса вы выполните следующие действия.
- Создайте новую группу управления.
- Создайте файл Bicep с областью действия группы управления.
- Добавьте ресурсы политики Azure в файл.
- Связывание назначения политики с определением политики путем создания идентификатора ресурса вручную.
- Разверните шаблон и проверьте результат.
Для этого упражнения требуются следующие предварительные требования:
- группы управления должны быть включены в клиенте Azure.
- Вам нужны разрешения для создания новой группы управления в иерархии.
- Необходимы разрешения для развертывания ресурсов политики Azure в группе управления.
Если вы не можете соответствовать этим требованиям с текущей учетной записью Azure, вы можете получить бесплатную пробную версию и создать новую подписку Azure и клиент. Кроме того, можно пропустить шаги развертывания в этом упражнении.
Создание группы управления
В этом упражнении вы создадите новую группу управления, чтобы случайно не влиять на ресурсы в другой части среды Azure.
В терминале Visual Studio Code выполните следующие команды Azure CLI:
az account management-group create \
--name SecretRND \
--display-name "Secret R&D Projects"
По умолчанию новая группа управления создается как прямой дочерний элемент корневой группы управления клиента. Если необходимо поместить группу управления в определенное место в существующей иерархии групп управления, используйте параметр --parent-id
и укажите имя группы управления, используемой в качестве родительского элемента.
В терминале Visual Studio Code выполните следующие команды Azure PowerShell:
New-AzManagementGroup `
-GroupId 'SecretRND' `
-DisplayName 'Secret R&D Projects'
По умолчанию новая группа управления создается как дочерний элемент корневой группы управления клиента. Если необходимо поместить группу управления в определенное место в существующей иерархии групп управления, используйте параметр -ParentId
и укажите имя группы управления, используемой в качестве родительского элемента.
В случае реального развертывания вы переместили бы подписки команды R&D в управляющую группу. В этом упражнении вы развернете политики, даже если группа управления не содержит подписок. Тот же процесс развертывания применяется вне зависимости от того, является ли группа управления пустой или содержит подписки.
Создание Bicep-файла для развертывания в группе управления
Откройте Visual Studio Code.
Удалите файл main.bicep, а затем создайте пустой файл с тем же именем.
Сохраните пустой файл.
Добавьте в файл следующее содержимое.
targetScope = 'managementGroup'
Обратите внимание, что эта строка кода сообщает Bicep, что ваш шаблон будет развернут в контексте группы управления.
Добавление определения политики
Как и ранее, создайте определение политики в файле Bicep.
Под только что добавленной строкой добавьте следующее определение переменной:
var policyDefinitionName = 'DenyFandGSeriesVMs'
В нижней части файла добавьте следующее определение политики Azure:
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = { name: policyDefinitionName properties: { policyType: 'Custom' mode: 'All' parameters: {} policyRule: { if: { allOf: [ { field: 'type' equals: 'Microsoft.Compute/virtualMachines' } { anyOf: [ { field: 'Microsoft.Compute/virtualMachines/sku.name' like: 'Standard_F*' } { field: 'Microsoft.Compute/virtualMachines/sku.name' like: 'Standard_G*' } ] } ] } then: { effect: 'deny' } } } }
Определение политики совпадает с тем, который вы ранее применили к подписке. На этот раз, однако, вы развертываете его в управляющей группе.
Добавьте назначение политики
Теперь вы примените политику к группе управления. Это означает, что политика будет применяться ко всем подпискам, которые являются дочерними элементами этой группы управления.
Под определением переменной
policyDefinitionName
добавьте следующую переменную:var policyAssignmentName = 'DenyFandGSeriesVMs'
В нижней части файла в ресурсе определения политики добавьте следующее назначение политики:
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id } }
Сохраните изменения в файле.
Проверка шаблона
Шаблон должен выглядеть следующим образом:
targetScope = 'managementGroup'
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
allOf: [
{
field: 'type'
equals: 'Microsoft.Compute/virtualMachines'
}
{
anyOf: [
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_F*'
}
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_G*'
}
]
}
]
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
Если это не так, скопируйте пример или измените шаблон в соответствии с примером.
Развертывание шаблона в Azure
В терминале Visual Studio Code разверните шаблон с помощью следующих команд Azure CLI:
managementGroupId="SecretRND"
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="mg-scope-"$today
az deployment mg create \
--management-group-id $managementGroupId \
--name $deploymentName \
--location westus \
--template-file $templateFile
Разверните шаблон с помощью команд Azure PowerShell в терминале.
$managementGroupId = 'SecretRND'
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "mg-scope-$today"
New-AzManagementGroupDeployment `
-ManagementGroupId $managementGroupId `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile
Обратите внимание, что, как и в случае развертывания подписок, вы явно указываете имя и местоположение метаданных развертывания. И вы используете дату сегодня, чтобы снизить риск использования существующего названия развертывания.
Развертывание может занять минуту или два, а затем вы увидите успешное развертывание.
Проверка развертывания
Как и в случае с развертываниями с областью действия подписки, вы можете просматривать развертывания с областью действия группы управления на портале Azure.
Перейдите на портал Azure.
На левой панели выберите Все службы.
В поле поиска введите группу управления, а затем выберите группы управления в списке результатов.
Выберите группу по управлению проектами Secret R&D.
На левой панели в поле поиска введите развертывания, а затем выберите развертывания в разделе Управление.
Выберите развертывание, начиная с mg-scope, чтобы узнать, какие ресурсы были развернуты.
На панели Обзор для выбранного развертывания выберите Сведения о развертывании, чтобы развернуть содержимое. Перечислены два ресурса политики Azure.
Очистка ресурсов
Вы успешно развернули ресурсы группы управления. Вы можете удалить созданные ресурсы политики и группу управления.
az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND