Exercício – Implantar recursos em um grupo de gerenciamento

Concluído

O Projeto Teddybear foi um sucesso, e agora o desenvolvimento de P e D secreto na sua empresa de brinquedos está pronto para pesquisar ainda mais novos brinquedos. A equipe começou a pedir para você novas assinaturas diariamente e precisa aplicar as políticas a todas elas.

Em vez de duplicar as definições e atribuições de política em cada assinatura, você decidiu colocar todas as assinaturas da equipe em um grupo de gerenciamento. Em seguida, você poderá aplicar a política a todo o grupo de gerenciamento, em vez de a cada assinatura individualmente.

Neste exercício, você criará um modelo Bicep para aplicar as definições e as atribuições de política a um grupo de gerenciamento.

Durante o processo, você vai:

  • Criar um grupo de gerenciamento.
  • Criar um arquivo Bicep com escopo de grupo de gerenciamento.
  • Adicionar os recursos do Azure Policy ao arquivo.
  • Vincular a atribuição de política à definição de política construindo manualmente a ID do recurso.
  • Implantar o modelo e verificar o resultado.

Esta etapa exige os seguintes pré-requisitos:

  • Os grupos de gerenciamento precisam ser habilitados no seu locatário do Azure.
  • Você precisa ter permissões para criar um grupo de gerenciamento dentro da hierarquia.
  • Você precisa ter permissões para implantar recursos do Azure Policy no grupo de gerenciamento.

Se você não puder atender a esses requisitos com a sua conta atual do Azure, obtenha uma avaliação gratuita e crie uma assinatura e um locatário do Azure. Como alternativa, você pode ignorar as etapas de implantação neste exercício.

Crie um grupo de gerenciamento

Neste exercício, você criará um grupo de gerenciamento para que não afete acidentalmente nenhum recurso em outra parte do ambiente do Azure.

No terminal do Visual Studio Code, execute os seguintes comandos da CLI do Azure:

az account management-group create \
  --name SecretRND \
  --display-name "Secret R&D Projects"

Por padrão, o novo grupo de gerenciamento é criado como um filho direto do grupo de gerenciamento raiz do locatário. Caso precise colocar o grupo de gerenciamento em um local específico na hierarquia de grupos de gerenciamento existente, use o parâmetro --parent-id e especifique o nome do grupo de gerenciamento a ser usado como o pai.

No terminal do Visual Studio Code, execute os seguintes comandos do Azure PowerShell:

New-AzManagementGroup `
  -GroupId 'SecretRND' `
  -DisplayName 'Secret R&D Projects'

Por padrão, o grupo de gerenciamento é criado como um filho do grupo de gerenciamento raiz do locatário. Caso precise colocar o grupo de gerenciamento em um local específico na hierarquia de grupos de gerenciamento existente, use o parâmetro -ParentId e especifique o nome do grupo de gerenciamento a ser usado como o pai.

Em uma implantação real, você moveria as assinaturas da equipe de P e D para o grupo de gerenciamento. Para este exercício, você implantará as políticas, embora o grupo de gerenciamento não contenha nenhuma assinatura. O mesmo processo de implantação se aplica se o grupo de gerenciamento está vazio ou contém assinaturas.

Criar um arquivo Bicep para implantação em um grupo de gerenciamento

  1. Abra o Visual Studio Code.

  2. Exclua o arquivo main.bicep e crie um arquivo vazio com o mesmo nome.

  3. Salve o arquivo vazio.

  4. Adicione o seguinte conteúdo ao arquivo.

    targetScope = 'managementGroup'
    

    Observe que essa linha de código informa o Bicep de que o seu modelo será implantado no escopo do grupo de gerenciamento.

Adicionar uma definição de política

Como você fez anteriormente, crie uma definição de política no arquivo Bicep.

  1. Abaixo da linha recém-adicionada, adicione a seguinte definição de variável:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. Na parte inferior do arquivo, adicione a seguinte definição do Azure Policy:

    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'
          }
        }
      }
    }
    

    A definição de política é a mesma aplicada anteriormente à sua assinatura. No momento, no entanto, você a está implantando em um grupo de gerenciamento.

Adicionar uma atribuição de política

Agora você aplicará a política ao grupo de gerenciamento. Isso significa que a política será aplicada a todas as assinaturas que são filhos desse grupo de gerenciamento.

  1. Abaixo da definição da variável policyDefinitionName, adicione a seguinte variável:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. Na parte inferior do arquivo, no recurso de definição de política, adicione a seguinte atribuição de política:

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    
  3. Salve as alterações no arquivo.

Verificar o modelo

Seu modelo será parecido com este:

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
  }
}

Caso contrário, copie o exemplo ou ajuste o modelo para que ele corresponda ao exemplo.

Implantar o modelo no Azure

No terminal do Visual Studio Code, implante o modelo usando os seguintes comandos da CLI do Azure:

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

Implante o modelo usando os comandos do Azure PowerShell no terminal.

$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

Observe que, assim como nas implantações de assinatura, você está especificando explicitamente um nome e uma localização para os metadados da implantação. Além disso, você está usando a data de hoje para reduzir a possibilidade de usar o nome de uma implantação existente.

A implantação pode levar alguns minutos para ser concluída, e você verá uma implantação bem-sucedida.

Verificar a implantação

Assim como as implantações com escopo de assinatura, você pode ver as implantações com escopo de grupo de gerenciamento no portal do Azure.

  1. Acesse o portal do Azure.

  2. No painel esquerdo, selecione Todos os serviços.

  3. Na caixa de pesquisa, insira grupo de gerenciamento e selecione Grupos de gerenciamento na lista de resultados.

    Screenshot of the Azure portal interface showing the service list with 'Management groups' highlighted.

  4. Selecione o grupo de gerenciamento Projetos secretos de P e D.

    Screenshot of the Azure portal interface, highlighting 'Secret R&D Projects' in the list of management groups.

  5. No painel esquerdo, na caixa de pesquisa, insira Implantações e selecione Implantações em Governança.

    Screenshot of the Azure portal interface, showing the management group details.

  6. Selecione a implantação que começa com mg-scope para ver quais recursos foram implantados.

    Screenshot of the Azure portal Deployments pane, highlighting the 'mg-scope-*' deployment in the list of deployments.

  7. No painel Visão geral da implantação selecionada, selecione Detalhes da implantação para expandi-la. Os dois recursos do Azure Policy estão listados.

    Screenshot of the Azure portal 'Overview' pane for the selected deployment.

Limpar os recursos

Você implantou com êxito seus recursos com escopo de grupo de gerenciamento. Remova os recursos de política e o grupo de gerenciamento criados.

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