Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I log di flusso della rete virtuale registrano informazioni sul traffico IP che scorre attraverso una rete virtuale. In questo articolo, usi Terraform per creare un log del flusso di rete virtuale e un account di archiviazione dedicato per una rete virtuale esistente. Per altre informazioni, vedere Panoramica dei log dei flussi di rete virtuale.
La configurazione di Terraform utilizza l'istanza regionale Network Watcher che Azure crea automaticamente quando Network Watcher è abilitato. Crei il registro del flusso e l'account di archiviazione nel gruppo risorse Network Watcher.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
- Installare e configurare Terraform.
- Una rete virtuale esistente. Per crearne una, vedi Creare una rete virtuale.
- Network Watcher abilitato nella regione della rete virtuale. Network Watcher è abilitato di default a meno che tu non lo disabiliti esplicitamente.
- Il provider di risorse
Microsoft.Insightsregistrato nella sottoscrizione. Per maggiori informazioni, consulta Registra il fornitore Insights. - Permessi per creare un flow log e un account di archiviazione nel gruppo di risorse che contiene l'istanza regionale di Network Watcher.
Rivedi la configurazione di Terraform
Puoi trovare la configurazione di esempio per questo articolo nel repository GitHub di Azure Terraform.
La configurazione crea le seguenti risorse:
- Un account di archiviazione Azure che memorizza i dati del log del flusso.
- Un log di flusso di Azure Network Watcher che registra il traffico per la rete virtuale esistente.
La configurazione utilizza anche la sorgente dati Network Watcher per fare riferimento all'istanza regionale esistente di Network Watcher.
Crea una directory per testare la configurazione di esempio di Terraform e rendila la directory attuale.
Creare un file denominato
providers.tfe inserire il codice seguente:terraform { required_version = ">= 1.5.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 5.0" } random = { source = "hashicorp/random" version = "~> 3.7" } } } provider "azurerm" { features {} }Creare un file denominato
main.tfe inserire il codice seguente:data "azurerm_network_watcher" "network_watcher" { name = var.network_watcher_name resource_group_name = var.network_watcher_resource_group_name } resource "random_string" "storage_account_suffix" { length = 8 lower = true numeric = true special = false upper = false } resource "azurerm_storage_account" "flow_logs" { name = "flowlogs${random_string.storage_account_suffix.result}" resource_group_name = data.azurerm_network_watcher.network_watcher.resource_group_name location = data.azurerm_network_watcher.network_watcher.location account_tier = "Standard" account_kind = "StorageV2" account_replication_type = var.storage_account_replication_type } resource "azurerm_network_watcher_flow_log" "vnet_flow_log" { name = var.flow_log_name network_watcher_name = data.azurerm_network_watcher.network_watcher.name resource_group_name = data.azurerm_network_watcher.network_watcher.resource_group_name location = data.azurerm_network_watcher.network_watcher.location target_resource_id = var.virtual_network_id storage_account_id = azurerm_storage_account.flow_logs.id enabled = true version = var.flow_log_version retention_policy { enabled = var.retention_days > 0 days = var.retention_days } }Creare un file denominato
variables.tfe inserire il codice seguente:variable "network_watcher_name" { type = string default = "NetworkWatcher_eastus" description = "Name of the existing regional Network Watcher instance." } variable "network_watcher_resource_group_name" { type = string default = "NetworkWatcherRG" description = "Name of the resource group that contains the Network Watcher instance." } variable "virtual_network_id" { type = string description = "Resource ID of the existing virtual network to monitor." validation { condition = can(regex("(?i)^/subscriptions/[^/]+/resourceGroups/[^/]+/providers/Microsoft.Network/virtualNetworks/[^/]+$", var.virtual_network_id)) error_message = "The virtual_network_id value must be a full Azure virtual network resource ID." } } variable "flow_log_name" { type = string default = "vnet-flow-log" description = "Name of the virtual network flow log." } variable "flow_log_version" { type = number default = 2 description = "Flow log format version. Valid values are 1 and 2." validation { condition = contains([1, 2], var.flow_log_version) error_message = "The flow_log_version value must be 1 or 2." } } variable "retention_days" { type = number default = 0 description = "Number of days to retain flow log data. Use 0 to retain data indefinitely." validation { condition = var.retention_days >= 0 && var.retention_days <= 365 error_message = "The retention_days value must be between 0 and 365." } } variable "storage_account_replication_type" { type = string default = "LRS" description = "Replication type for the flow log storage account." validation { condition = contains(["LRS", "GRS", "ZRS"], var.storage_account_replication_type) error_message = "The storage_account_replication_type value must be LRS, GRS, or ZRS." } }Creare un file denominato
outputs.tfe inserire il codice seguente:output "flow_log_id" { description = "Resource ID of the virtual network flow log." value = azurerm_network_watcher_flow_log.vnet_flow_log.id } output "flow_log_name" { description = "Name of the virtual network flow log." value = azurerm_network_watcher_flow_log.vnet_flow_log.name } output "storage_account_name" { description = "Name of the storage account that contains the flow log data." value = azurerm_storage_account.flow_logs.name }
Imposta i valori delle risorse esistenti
Creare un file denominato terraform.tfvars. Sostituisci i segnaposto con valori per la tua rete virtuale esistente e per l'istanza regionale di Network Watcher.
network_watcher_name = "NetworkWatcher_eastus"
network_watcher_resource_group_name = "NetworkWatcherRG"
virtual_network_id = "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>"
La rete virtuale e l'istanza di Network Watcher devono trovarsi nella stessa regione Azure. Se la tua istanza di Network Watcher utilizza un nome o un gruppo di risorse personalizzato, aggiorna entrambi i valori di Network Watcher.
Inizializza Terraform
Per inizializzare la distribuzione di Terraform, eseguire terraform init. Questo comando scarica il provider di Azure necessario per gestire le risorse Azure.
terraform init -upgrade
Punti principali:
- Il parametro
-upgradeaggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.
Crea un piano di esecuzione di Terraform
Eseguire terraform plan per creare un piano di esecuzione.
terraform plan -out main.tfplan
Punti principali:
- Il comando
terraform plancrea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro facoltativo
-outconsente di specificare un file di output per il piano. L'uso del-outparametro garantisce che il piano esaminato sia esattamente quello applicato.
Applicare il piano di esecuzione di Terraform
Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.
terraform apply main.tfplan
Punti principali:
- Il comando
terraform applydi esempio presuppone che in precedenza sia stato eseguitoterraform plan -out main.tfplan. - Se è stato specificato un nome file diverso per il parametro
-out, usare lo stesso nome file nella chiamata aterraform apply. - Se non è stato usato il parametro
-out, chiamareterraform applysenza parametri.
Verifica il registro del flusso
Accedi al portale di Azure.
Cercare e selezionare Network Watcher.
In Log selezionare Log dei flussi.
Conferma che il log del flusso sia abilitato e che la sua risorsa target sia la tua rete virtuale.
Puoi anche visualizzare i nomi del log del flusso e degli account di storage dagli output di Terraform:
terraform output flow_log_name
terraform output storage_account_name
Pulire le risorse
Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:
Esegui terraform plan e specifica il flag
destroy.terraform plan -destroy -out main.destroy.tfplanPunti principali:
- Il comando
terraform plancrea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro facoltativo
-outconsente di specificare un file di output per il piano. L'uso del-outparametro garantisce che il piano esaminato sia esattamente quello applicato.
- Il comando
Eseguire terraform apply per applicare il piano di esecuzione.
terraform apply main.destroy.tfplan
L'operazione di distruzione elimina il log del flusso e l'account di archiviazione creati da questa configurazione. Non elimina la rete virtuale esistente né l'istanza di Network Watcher.
Risolvere i problemi di Terraform in Azure
Risolvere i problemi comuni relativi all'uso di Terraform in Azure