Exercício - Implantar um recurso com escopo de assinatura

Concluído

Importante

Precisa da sua própria subscrição do Azure para executar este exercício e poderá incorrer em custos. Se ainda não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

O Project Teddybear está a todo vapor, e a equipe de P&D está esperando que você dê acesso à nova assinatura do Azure. Você já criou a assinatura, mas antes de conceder acesso à equipe, você precisa garantir que ela implante apenas máquinas virtuais que estejam em conformidade com as políticas da equipe. A equipe disse 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 com base nas políticas da equipe.

Durante o processo, você:

  • Crie um modelo Bicep para ser implantado em um escopo de assinatura.
  • Adicione uma definição e atribuição de Política do Azure.
  • Implante o modelo e verifique o resultado.

Este exercício requer que você tenha permissão para implantar recursos com escopo de assinatura. Se não conseguir cumprir este requisito com a sua conta atual do Azure, pode obter uma avaliação gratuita e criar uma nova subscrição e inquilino 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. Certifique-se de que instala esta extensão no Visual Studio Code.

Criar um modelo com escopo de assinatura

  1. Abra o Visual Studio Code.

  2. Crie um novo arquivo chamado main.bicep.

  3. Salve o arquivo vazio para que o Visual Studio Code carregue as ferramentas do Bíceps.

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

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

    targetScope = 'subscription'
    

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

Adicionar uma definição de política

  1. Abaixo da linha que você acabou de adicionar, adicione a seguinte definição de variável:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. Na parte inferior do arquivo, adicione a seguinte definição de Política do 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'
          }
        }
      }
    }
    

    Observe que a definição de política se aplica apenas a recursos onde:

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

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

    Aviso

    Tenha cuidado ao usar o efeito de política de negação 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 pode ter efeitos inesperados que podem levar a interrupções. É melhor começar com o efeito da política de auditoria e, em seguida, mudar para o efeito de negação somente depois de vê-lo funcionar bem durante um período de tempo.

    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 tem efeito até ser 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 policyDefinitionName variável, 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 você não configura explicitamente a atribuição de política para ser aplicada a toda a assinatura. O Bicep entende isso, porque o modelo será implantado no escopo da assinatura.

  3. Guarde as alterações ao ficheiro.

Verificar o modelo

Seu modelo deve ter a seguinte aparência:

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 corresponder ao exemplo.

Implementar o modelo

Para implementar este modelo no Azure, tem de iniciar sessão na sua conta do Azure a partir do terminal do Visual Studio Code. Certifique-se de ter instalado as ferramentas da CLI do Azure.

  1. No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for bash, o shell correto estará aberto e você poderá pular 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 a lista suspensa do shell do terminal mostrada e Git Bash Default selecionado.

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

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

  5. No terminal, vá para o diretório onde você salvou seu modelo. Por exemplo, se você salvou seu modelo na pasta de modelos , poderá usar este comando:

    cd templates
    

Instalar o Bicep

Execute o seguinte comando para garantir que você tenha a versão mais recente do Bicep:

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 browser que se abre, inicie sessão na sua conta do Azure.

    O terminal de código do Visual Studio exibe uma lista das assinaturas associadas a essa conta.

  3. Na lista, localize a subscrição que pretende utilizar para este exercício.

    Se você perdeu a lista do login, você pode usar o trecho 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ê executa nesta sessão.

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

Para implantar esse modelo no Azure, entre em sua conta do Azure a partir do terminal do Visual Studio Code. Certifique-se de ter instalado o Azure PowerShell.

  1. No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for powershell ou pwsh, o shell correto estará aberto e você poderá pular 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 um shell diferente de powershell ou pwsh for exibido, selecione a seta suspensa do shell e selecione PowerShell.

    Captura de tela da janela do terminal do Visual Studio Code, com a lista suspensa do shell do terminal mostrada 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á para o diretório onde você salvou seu modelo. Por exemplo, se você salvou seu modelo na pasta de modelos , poderá usar este comando:

    Set-Location -Path templates
    

Instalar a CLI do Bíceps

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

Iniciar sessão no Azure com o Azure PowerShell

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

    Connect-AzAccount
    
  2. No browser que se abre, inicie sessão na sua conta do Azure.

  3. Obtenha o ID da subscrição que pretende utilizar para este exercício executando o seguinte comando:

    Get-AzSubscription
    

    O ID de subscrição é a segunda coluna. Copie a segunda coluna. Parece algo como aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

  4. Defina a assinatura padrão para todos os comandos do Azure PowerShell executados nesta sessão.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Implementar 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 az deployment sub create comando, em vez do az deployment group create comando ao 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 New-AzSubscriptionDeployment cmdlet, em vez do New-AzResourceGroupDeployment cmdlet ao qual você pode estar acostumado.

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

Gorjeta

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

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

Nota

Se você receber uma mensagem de erro com o código AuthorizationFailed, provavelmente não terá permissão para implantar recursos com escopo de assinatura. Peça ao administrador do Azure para lhe conceder permissões. Como alternativa, se você não puder atender a esse requisito com sua conta atual do Azure, poderá obter uma avaliação gratuita e criar uma nova assinatura e locatário do Azure.

Verificar a implementação

Você pode exibir 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. Aceda ao portal do Azure.

  2. No painel esquerdo, selecione Assinaturas.

  3. Selecione a sua subscrição.

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

    Captura de ecrã da caixa Pesquisa do portal do Azure e do item de menu Implementações.

  5. Na coluna Nome da implantação , selecione a implantação começando com o 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-la. Nesse caso, os dois recursos do Azure Policy são listados.

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

Limpar os recursos

Você implantou com êxito recursos com escopo de assinatura. Você pode remover 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ícios, você reimplantará os mesmos recursos de política. Eles serão recriados, mas você pode limpá-los novamente depois.