Exercício - Implantar um recurso com escopo de assinatura
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
Abra o Visual Studio Code.
Crie um novo arquivo chamado main.bicep.
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.
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
Abaixo da linha que você acabou de adicionar, adicione a seguinte definição de variável:
var policyDefinitionName = 'DenyFandGSeriesVMs'
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 comStandard_F
ouStandard_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.
- O tipo de recurso é igual a
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.
Abaixo da definição da
policyDefinitionName
variável, adicione a seguinte definição de variável:var policyAssignmentName = 'DenyFandGSeriesVMs'
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.
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.
No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.
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.
Se um shell diferente de bash for exibido, selecione a seta suspensa do shell e selecione Azure Cloud Shell (Bash).
Na lista de shells de terminal, selecione bash.
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
No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:
az login
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.
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
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.
No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.
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.
Se um shell diferente de powershell ou pwsh for exibido, selecione a seta suspensa do shell e selecione PowerShell.
Na lista de shells de terminal, selecione powershell ou pwsh.
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
No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:
Connect-AzAccount
No browser que se abre, inicie sessão na sua conta do Azure.
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.
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.
Aceda ao portal do Azure.
No painel esquerdo, selecione Assinaturas.
Selecione a sua subscrição.
Na caixa Pesquisar, digite Implantações e selecione o item de menu Implantações.
Na coluna Nome da implantação , selecione a implantação começando com o subescopo para ver quais recursos foram implantados.
Selecione Detalhes da implantação para expandi-la. Nesse caso, os dois recursos do Azure Policy são listados.
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.