Exercício - Implantar um recurso com escopo de assinatura
Importante
Você precisa de sua própria assinatura do Azure para concluir este exercício e pode incorrer em cobranças. Se você ainda não tiver uma assinatura 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 queiras criar uma pasta de scripts para a salvar.
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 negar para as suas definições de política, especialmente em escopos amplos, como assinaturas e grupos de gestão. 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 Novo Terminal. A janela do terminal geralmente abre na metade inferior da tela.
Se a janela do terminal exibir bash no lado direito, isso significa que o shell correto já está aberto. Como alternativa, se você vir um ícone de shell bash à direita, você pode selecioná-lo para iniciar o shell.
Se um shell diferente de bash aparecer, selecione a seta suspensa do shell e, em seguida, selecione Git 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 Novo Terminal. A janela do terminal geralmente abre na metade inferior da tela.
Se a janela do terminal exibir pwsh ou powershell no lado direito, isso significa que o shell correto já está aberto. Como alternativa, se você vir um ícone de shell do PowerShell à direita, poderá selecioná-lo para iniciar o shell.
Se um shell diferente de pwsh ou powershell for exibido, selecione a seta suspensa do shell e selecione PowerShell.
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.
Vá para o 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 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.