Guia de início rápido: crie uma atribuição de política para identificar recursos não compatíveis usando o Terraform
O primeiro passo para compreender a conformidade no Azure consiste em identificar o estado dos seus recursos. Este início rápido acompanha-o ao longo do processo de criação de uma atribuição de política para identificar máquinas virtuais que não estão a utilizar discos geridos.
No final desse processo, você identifica máquinas virtuais que não estão usando discos gerenciados na assinatura. Estão em não conformidade com a atribuição de política.
Ao atribuir uma definição interna de política ou iniciativa, é opcional fazer referência a uma versão. As atribuições de política de definições internas usam como padrão a versão mais recente e herdam automaticamente alterações de versão secundárias, a menos que especificado de outra forma.
Pré-requisitos
- Se não tiver uma subscrição 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, consulte Configurar o Terraform usando o Azure Cloud Shell.
- Este início rápido requer que você execute a CLI do Azure versão 2.13.0 ou posterior. Para localizar a versão, execute
az --version
. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Criar a configuração, variável e arquivo de saída do Terraform
Neste início rápido, vai criar uma atribuição de política e atribuir a definição VMs de Auditoria que não utilizam discos geridos. Esta definição de política identifica recursos que não estão em conformidade com as condições definidas na definição de política.
Configure os arquivos de configuração, variável e saída do Terraform. Os recursos do Terraform para o Azure Policy usam o Provedor do Azure.
Crie uma nova pasta com o nome
policy-assignment
e altere os diretórios para ela.Crie
main.tf
com o seguinte código:Nota
Para criar uma Atribuição de Política em um Grupo de Gerenciamento, use o recurso azurerm_management_group_policy_assignment , para um Grupo de Recursos use o azurerm_resource_group_policy_assignment e para 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 âmbito determina quais os recursos ou agrupamento de recursos em que a atribuição de política será imposta. Pode ir desde um grupo de gestão até um recurso individual. Certifique-se de substituir
{scope}
por um dos seguintes padrões com base no recurso declarado:- Subscrição:
/subscriptions/{subscriptionId}
- Grupo de recursos:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- Recurso:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Subscrição:
Crie
output.tf
com o seguinte código:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Inicializar Terraform e criar plano
Inicialize o Terraform para baixar os provedores necessários e, em seguida, crie um plano.
Execute o comando terraform init . Este comando baixa os módulos do Azure necessários para criar os recursos do Azure na configuração do Terraform.
terraform init
Autentique-se com a CLI do Azure para Terraform. Para obter mais informações, consulte Provedor do Azure: Autenticando 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
Nota
Para obter informações sobre planos de execução persistentes e segurança, consulte Plano Terraform: Aviso de segurança.
Aplicar o plano de execução do 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 Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
mensagem, a atribuição de política é criada. Desde que definimos o outputs.tf
arquivo, o assignment_id também é retornado.
Identificar recursos que não estão em conformidade
Para exibir os recursos que não estão em conformidade com essa nova atribuição, use o assignment_id retornado pelo terraform apply
. Com ele, execute o seguinte comando para obter as IDs de recursos dos recursos não compatíveis que são enviados para 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>
Os resultados assemelham-se ao seguinte exemplo:
{
"@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 normalmente vê listados em recursos que não estão em conformidade na vista do portal do Azure.
Clean up resources (Limpar recursos)
Para remover a atribuição criada, use a CLI do Azure ou reverta 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óximos passos
Neste guia de introdução, atribuiu uma definição de política para identificar recursos incompatíveis no seu ambiente do Azure.
Para saber mais sobre como atribuir políticas para validar se os novos recursos estão em conformidade, continue no tutorial para: