Exercício – Implantar um recurso com escopo de assinatura

Concluído

Importante

É preciso ter uma assinatura do Azure para fazer esse exercício, e isso pode gerar encargos. Caso ainda não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.

O Projeto Teddybear está a pleno vapor, e a equipe de P e D está aguardando você fornecer a ela acesso à nova assinatura do Azure. Você já criou a assinatura, mas antes de fornecer acesso à equipe, precisará garantir que ela implante apenas máquinas virtuais que estão em conformidade com as políticas da equipe. A equipe informou que não deseja implantar máquinas virtuais das séries F ou G.

Neste exercício, você criará um modelo Bicep que configura a assinatura de acordo com as políticas da equipe.

Durante o processo, você vai:

  • Criar um modelo Bicep a ser implantado em um escopo de assinatura.
  • Adicionar uma definição e uma atribuição do Azure Policy.
  • Implantar o modelo e verificar o resultado.

Para este exercício, você precisa ter permissão para implantar recursos no escopo da assinatura. Se você não puder atender a esse requisito com 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.

Este exercício usa a extensão Bicep para Visual Studio Code. É necessário que você instale essa extensão no Visual Studio Code.

Criar um modelo com escopo de assinatura

  1. Abra o Visual Studio Code.

  2. Crie um arquivo chamado main.bicep.

  3. Salve o arquivo vazio para que Visual Studio Code carregue as ferramentas Bicep.

    Você pode selecionar Arquivo>Salvar Como ou Ctrl+S no Windows (⌘+S no macOS). Lembre-se de onde você salvou o arquivo. Por exemplo, você pode criar uma pasta scripts para salvá-lo.

  4. Adicione o conteúdo a seguir ao arquivo main.bicep. Você implantará o modelo em breve. É uma boa ideia digitar isto manualmente em vez de copiar e colar, para que você possa ver como as ferramentas ajudam você a escrever arquivos Bicep.

    targetScope = 'subscription'
    

    Esta linha de código informa o Bicep de que o seu modelo será implantado em um escopo de assinatura.

Adicionar uma definição de política

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

    Observe que a definição de política só se aplica aos recursos em que:

    • O tipo de recurso é igual a Microsoft.Compute/virtualMachines.
    • A propriedade sku.namecomeça com Standard_F ou Standard_G.

    Quando você tentar criar um recurso que corresponde a essas condições, o Azure negará a criação do recurso.

    Aviso

    Tenha cuidado ao usar o efeito da política negar para suas definições de política, especialmente em escopos amplos, como assinaturas e grupos de gerenciamento. Se a definição não for criada corretamente, ela poderá ter efeitos inesperados que podem levar a interrupções. É melhor começar com o efeito da política de auditoria e só alternar para o efeito de negação depois de vê-lo funcionar bem ao longo de um período.

    Você está criando a definição de política no escopo da assinatura. Isso significa que, depois que a definição for implantada, ela estará disponível em todos os grupos de recursos na assinatura.

Atribuir a política

Uma definição de política não terá efeito até que ela seja aplicada. Nesta etapa, você implantará um segundo recurso com escopo de assinatura que aplica a definição de política à assinatura.

  1. Abaixo da definição da variável policyDefinitionName, adicione a seguinte definição de 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
      }
    }
    

    Observe que a atribuição de política a ser aplicada a toda a assinatura não é configurada explicitamente. O Bicep entende isso, pois o modelo será implantado no escopo da assinatura.

  3. Salve as alterações no arquivo.

Verificar o modelo

Seu modelo será parecido com este:

targetScope = 'subscription'

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

Para implantar esse modelo no Azure, será necessário entrar em sua conta do Azure do terminal do Visual Studio Code. Verifique se você instalou as ferramentas da CLI do Azure.

  1. No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for o bash, o shell correto será aberto e você poderá passar para a próxima seção.

    Captura de tela da janela do terminal do Visual Studio Code com a opção bash mostrada.

  3. Se um shell diferente de bash for exibido, selecione a seta suspensa do shell e selecione Azure Cloud Shell (Bash).

    Captura de tela da janela do terminal do Visual Studio Code, com o menu suspenso do shell do terminal mostrado e o Padrão Git Bash selecionado.

  4. Na lista de shells de terminal, selecione bash.

    Captura de tela da janela do terminal do Visual Studio Code com o terminal do bash selecionado.

  5. No terminal, vá até o diretório no qual você salvou o modelo. Por exemplo, se você salvou o modelo na pasta modelos, use este comando:

    cd templates
    

Instalar o Bicep

Veja se você tem a versão mais recente do Bicep executando o seguinte comando:

az bicep install && az bicep upgrade

Entrar no Azure usando a CLI do Azure

  1. No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:

    az login
    
  2. No navegador que é aberto, entre em sua conta do Azure.

    O terminal do Visual Studio Code exibe uma lista das assinaturas associadas a essa conta.

  3. Na lista, encontre a assinatura que deseja usar para este exercício.

    Caso você tenha perdido a lista da inscrição, use o snippet a seguir para listar suas assinaturas novamente.

    az account list --output table
    
  4. Defina a assinatura padrão para todos os comandos da CLI do Azure que você executar nesta sessão.

    az account set --subscription "Your Subscription Name or ID"
    

Para implantar esse modelo no Azure, entre na sua conta do Azure por meio do terminal do Visual Studio Code. Verifique se você instalou o Azure PowerShell.

  1. No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for o powershell ou o pwsh, o shell correto será aberto e você poderá passar para a próxima seção.

    Captura de tela da janela do terminal do Visual Studio Code, com a opção pwsh exibida na lista suspensa do shell.

  3. Se aparecer um shell diferente do powershell ou pwsh, selecione a seta da lista de seleção do shell e escolha PowerShell.

    Captura de tela da janela do terminal do Visual Studio Code, com a lista suspensa do shell do terminal exibida e o PowerShell selecionado.

  4. Na lista de shells de terminal, selecione powershell ou pwsh.

    Captura de tela da janela do terminal do Visual Studio Code com o terminal do PowerShell selecionado.

  5. No terminal, vá até o diretório no qual você salvou o modelo. Por exemplo, se você salvou o modelo na pasta modelos, use este comando:

    Set-Location -Path templates
    

Instalar a CLI do Bicep

Para usar o Bicep no Azure PowerShell, instale a CLI do Bicep.

Entrar no Azure usando o Azure PowerShell

  1. No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:

    Connect-AzAccount
    
  2. No navegador que é aberto, entre em sua conta do Azure.

  3. Obtenha a ID da assinatura que deseja usar para este exercício executando o seguinte comando:

    Get-AzSubscription
    

    A ID da assinatura será a segunda coluna. Copie a segunda coluna. É semelhante a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

  4. Defina a assinatura padrão para todos os comandos do Azure PowerShell que você executar nesta sessão.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Implantar o modelo no Azure

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

templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today

az deployment sub create \
    --name $deploymentName \
    --location westus \
    --template-file $templateFile

Observe que você está criando uma implantação com escopo de assinatura usando o comando az deployment sub create, em vez do comando az deployment group create, com o qual você pode estar acostumado.

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

$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"

New-AzSubscriptionDeployment `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

Observe que você está criando uma implantação com escopo de assinatura usando o cmdlet New-AzSubscriptionDeployment, em vez do cmdlet New-AzResourceGroupDeployment, com o qual você pode estar acostumado.

Observe também que você está especificando explicitamente um nome e uma localização para a implantação. O Azure usa essas informações para armazenar os metadados da implantação.

Dica

O nome da implantação inclui a data de hoje. Isso torna menos provável que você acidentalmente use o mesmo nome de outra implantação.

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

Observação

Se você recebe uma mensagem de erro com o código AuthorizationFailed, provavelmente não tem permissão para implantar recursos no escopo da assinatura. Peça ao administrador do Azure que lhe conceda as permissões. Como alternativa, se você não puder atender a esse requisito com sua conta atual do Azure, obtenha uma avaliação gratuita e crie uma assinatura e um locatário do Azure.

Verificar a implantação

Veja as implantações com escopo de assinatura no portal do Azure. Isso pode ser útil para verificar se a implantação foi concluída com êxito e para inspecionar os resultados.

  1. Acesse o portal do Azure.

  2. No painel esquerdo, selecione Assinaturas.

  3. Selecione sua assinatura.

  4. Na caixa Pesquisar, insira Implantações e selecione o item de menu Implantações.

    Captura de tela da caixa Pesquisar do portal do Azure e do item de menu Implantações.

  5. Na coluna Nome da implantação, selecione a implantação que começa com subescopo para ver quais recursos foram implantados.

    Captura de tela da interface do portal do Azure mostrando a lista de implantações.

  6. Selecione Detalhes da implantação para expandi-lo. Nesse caso, os dois recursos do Azure Policy são listados.

    Captura de tela do painel de visão geral do portal do Azure da implantação selecionada.

Limpar os recursos

Você implantou com êxito os recursos com escopo de assinatura. Remova os recursos de política criados executando os seguintes comandos:

subscriptionId=$(az account show --query 'id' --output tsv)

az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
$subscriptionId = (Get-AzContext).Subscription.Id

Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId

Na próxima unidade de exercício, você implantará novamente os mesmos recursos de política. Eles serão recriados, mas você poderá limpá-los novamente depois.