Início Rápido: Criar uma atribuição de política para identificar um recurso que não está em conformidade usando o Terraform
A primeira etapa para compreender a conformidade no Azure é identificar o status de seus recursos. Este guia de início rápido orienta você no processo de criação de uma atribuição de política para identificar máquinas virtuais que não estão usando discos gerenciados.
No final deste processo, você identificará quais máquinas virtuais não estão usando discos gerenciados na assinatura. Eles não estão em conformidade com a atribuição da política.
Ao atribuir uma política interna ou uma definição de iniciativa, é opcional referenciar uma versão. As atribuições de política de definições internas são padrão para a última versão e herdam automaticamente as alterações de versão secundária, a menos que esteja especificado de outra forma.
Pré-requisitos
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Terraform versão 0.12.0 ou superior configurado em seu ambiente. Para obter instruções, confira Configurar o Terraform usando o Azure Cloud Shell.
- Este guia de início rápido exige que você execute a CLI do Azure versão 2.13.0 ou posterior. Para saber qual é a versão, execute
az --version
. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
Criar a configuração, a variável e o arquivo de saída do Terraform
Neste guia de início rápido, crie uma atribuição de política e atribua a definição Auditar VMs que não usam discos gerenciados. Esta definição de política identifica recursos que não estão em conformidade com as condições configuradas na definição de política.
Configure a configuração, a variável e os arquivos de saída do Terraform. Os recursos do Terraform para Azure Policy usam o Provedor do Azure.
Crie uma pasta chamada
policy-assignment
e altere os diretórios nela.Crie
main.tf
com o seguinte código:Observação
Para criar uma Atribuição de Política em um Grupo de Gerenciamento, use o recurso azurerm_management_group_policy_assignment, em um Grupo de Recursos, use o azurerm_resource_group_policy_assignment e, em uma Assinatura, use o recurso azurerm_subscription_policy_assignment.
provider "azurerm" { features {} } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.96.0" } } } resource "azurerm_subscription_policy_assignment" "auditvms" { name = "audit-vm-manageddisks" subscription_id = var.cust_scope policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" description = "Shows all virtual machines not using managed disks" display_name = "Audit VMs without managed disks assignment" }
Crie
variables.tf
com o seguinte código:variable "cust_scope" { default = "{scope}" }
Um escopo determina em quais recursos ou agrupamento de recursos a atribuição de política é imposta. Ele pode variar de um grupo de gerenciamento a um recurso individual. Substitua
{scope}
por um dos seguintes padrões com base no recurso declarado:- Assinatura:
/subscriptions/{subscriptionId}
- Grupo de recursos:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- Recurso:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Assinatura:
Crie
output.tf
com o seguinte código:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Inicializar o Terraform e criar o plano
Inicialize o Terraform para baixar os provedores necessários e, em seguida, crie um plano.
Executar o comando terraform init. Esse comando baixa os módulos do Azure necessários para criar os recursos do Azure na configuração do Terraform.
terraform init
Faça a autenticação com CLI do Azure para o Terraform. Para obter mais informações, confira o Provedor do Azure: fazer a autenticação usando a CLI do Azure.
az login
Crie o plano de execução com o comando terraform plan e o parâmetro out.
terraform plan -out assignment.tfplan
Observação
Para obter informações sobre como persistir planos de execução e segurança, confira Plano do Terraform: Aviso de Segurança.
Aplicar o plano de execução Terraform
Aplique o plano de execução.
Execute o comando terraform apply e especifique o assignment.tfplan
já criado.
terraform apply assignment.tfplan
Com a mensagem Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
a atribuição de política agora é criada. Como o arquivo outputs.tf
foi definido, a assignment_id também é retornada.
Identificar recursos fora de conformidade
Para exibir os recursos que não estão em conformidade nessa nova atribuição, use a assignment_id retornada por terraform apply
. Com ela, execute o seguinte comando para obter as IDs de recurso dos recursos que não estão em conformidade produzidos em um arquivo JSON:
armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>
Seus resultados devem se parecer com o exemplo a seguir:
{
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 3,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
},
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
},
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
}
]
}
Os resultados são comparáveis aos que você geralmente vê listados em Recursos não compatível na exibição do Portal do Azure.
Limpar os recursos
Para remover a atribuição criada, use a CLI do Azure ou inverta o plano de execução do Terraform com terraform destroy
.
CLI do Azure
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
Próximas etapas
Neste guia de início rápido, você atribuiu uma definição de política para identificar recursos sem conformidade em seu ambiente do Azure.
Para saber mais sobre a atribuição de políticas para validar que novos recursos estejam em conformidade, continue com o tutorial para: