Início Rápido: Criar uma atribuição de política para identificar recursos incompatíveis com 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 deste processo, irá identificar com êxito as máquinas virtuais que não estão a utilizar discos geridos em toda a subscrição. Estão em não conformidade com a atribuição de política.
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 configurada no seu ambiente. Para obter instruções, veja Configurar o Terraform com o Azure Cloud Shell.
- Este início rápido requer que execute a versão 2.13.0 ou posterior da CLI do Azure. Para localizar a versão, execute
az --version
. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Criar o ficheiro de configuração, variável e saída do Terraform
Neste início rápido, vai criar uma atribuição de política e atribuir a definição Auditar VMs que não utilizam discos geridos (06a78e20-9358-41c9-923c-fb736d382a4d
). 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.
Em primeiro lugar, configure os ficheiros de configuração, variável e saída do Terraform. Os recursos do Terraform para Azure Policy utilizar o Fornecedor do Azure.
Crie uma nova pasta com o nome
policy-assignment
e altere os diretórios para a mesma.Crie
main.tf
com o seguinte código:Nota
Para criar uma Atribuição de Política num Grupo de Gestão, utilize o recurso azurerm_management_group_policy_assignment , para um Grupo de Recursos, utilize o azurerm_resource_group_policy_assignment e, para uma Subscrição, utilize 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 de um grupo de gestão a um recurso individual. Certifique-se de que substitui
{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 o Terraform e criar um plano
Em seguida, inicialize o Terraform para transferir os fornecedores necessários e, em seguida, crie um plano.
Execute o comando terraform init . Este comando transfere os módulos do Azure necessários para criar os recursos do Azure na configuração do Terraform.
terraform init
Autenticar com a CLI do Azure para Terraform. Para obter mais informações, veja Fornecedor do Azure: Autenticar com 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 os planos de execução persistentes e a segurança, consulte Terraform Plan: Security Warning (Plano do Terraform: Aviso de Segurança).
Aplicar o plano de execução do Terraform
Por último, aplique o plano de execução.
Execute o comando terraform apply e especifique o assignment.tfplan
já criado.
terraform apply assignment.tfplan
Com "Aplicar concluído! Recursos: 1 adicionado, 0 alterado, 0 destruído." mensagem, a atribuição de política é agora criada. Uma vez que definimos o outputs.tf
ficheiro, o assignment_id também é devolvido.
Identificar recursos que não estão em conformidade
Para ver os recursos que não estão em conformidade nesta nova atribuição, utilize o assignment_id devolvido por terraform apply
. Com ele, execute o seguinte comando para obter os IDs de recursos dos recursos não conformes que são exportados para um ficheiro 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.
Limpar os recursos
Para remover a atribuição criada, utilize 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
Passos seguintes
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 a atribuição de políticas para validar que os novos recursos estão em conformidade, avance para o tutorial para: