Задание — Развертывание ресурсов в группе управления

Завершено

Проект 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-файла для развертывания в группе управления

  1. Откройте Visual Studio Code.

  2. Удалите файл main.bicep, а затем создайте пустой файл с тем же именем.

  3. Сохраните пустой файл.

  4. Добавьте в файл следующее содержимое.

    targetScope = 'managementGroup'
    

    Обратите внимание, что эта строка кода сообщает Bicep, что ваш шаблон будет развернут в контексте группы управления.

Добавление определения политики

Как и ранее, создайте определение политики в файле Bicep.

  1. Под только что добавленной строкой добавьте следующее определение переменной:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. В нижней части файла добавьте следующее определение политики 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'
          }
        }
      }
    }
    

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

Добавьте назначение политики

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

  1. Под определением переменной policyDefinitionName добавьте следующую переменную:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. В нижней части файла в ресурсе определения политики добавьте следующее назначение политики:

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    
  3. Сохраните изменения в файле.

Проверка шаблона

Шаблон должен выглядеть следующим образом:

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.

  1. Перейдите на портал Azure.

  2. На левой панели выберите Все службы.

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

    снимок экрана интерфейса портала Azure, показывающий список служб, где выделен элемент

  4. Выберите группу по управлению проектами Secret R&D.

    снимок экрана интерфейса портала Azure, в списке групп управления выделяется

  5. На левой панели в поле поиска введите развертывания, а затем выберите развертывания в разделе Управление.

    снимок экрана интерфейса портала Azure с подробными сведениями о группе управления.

  6. Выберите развертывание, начиная с mg-scope, чтобы узнать, какие ресурсы были развернуты.

    снимок экрана панели развертываний портала Azure, где выделено развертывание mg-scope-* в списке развертываний.

  7. На панели Обзор для выбранного развертывания выберите Сведения о развертывании, чтобы развернуть содержимое. Перечислены два ресурса политики Azure.

    снимок экрана: панель

Очистка ресурсов

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

az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND