Guida di avvio rapido: Creare una topologia di rete mesh con Gestione rete virtuale di Azure usando Bicep

Attività iniziali con Gestione rete virtuale di Azure tramite Bicep per la gestione della connettività di tutte le reti virtuali.

In questa guida di avvio rapido, si distribuiscono tre reti virtuali e si usa Gestione rete virtuale di Azure per creare una topologia di rete mesh. Si verifica quindi che la configurazione della connettività sia stata applicata.

Diagramma delle risorse distribuite per una topologia di rete virtuale mesh con Gestione rete virtuale di Azure.

Moduli di file Bicep

La soluzione Bicep per questo esempio è suddivisa in moduli per abilitare le distribuzioni in un gruppo di risorse e in un ambito di sottoscrizione. Le sezioni di file descritte nell'elenco seguente sono i componenti univoci per programma di traduzione. Oltre alle sezioni descritte nell'elenco seguente, la soluzione distribuisce reti virtuali, un'identità assegnata dall'utente e un'assegnazione di ruolo.

Rete virtuale Manager, gruppi di rete e configurazioni di connettività

Gestione reti virtuali

@description('This is the Azure Virtual Network Manager which will be used to implement the connected group for inter-vnet connectivity.')
resource networkManager 'Microsoft.Network/networkManagers@2022-09-01' = {
  name: 'vnm-learn-prod-${location}-001'
  location: location
  properties: {
    networkManagerScopeAccesses: [
      'Connectivity'
    ]
    networkManagerScopes: {
      subscriptions: [
        '/subscriptions/${subscription().subscriptionId}'
      ]
      managementGroups: []
    }
  }
}

Gruppi di rete

Questa soluzione supporta la creazione di gruppi di rete di appartenenza statici o gruppi di rete di appartenenza dinamica. Il gruppo di rete di appartenenza statica specifica i relativi membri in base Rete virtuale ID.

Gruppo di rete di appartenenza statica

@description('This is the static network group for the all VNETs.')
resource networkGroupSpokesStatic 'Microsoft.Network/networkManagers/networkGroups@2022-09-01' = if (networkGroupMembershipType == 'static') {
  name: 'ng-learn-prod-${location}-static001'
  parent: networkManager
  properties: {
    description: 'Network Group - Static'
  }

  // add spoke vnets A, B, and C to the static network group
  resource staticMemberSpoke 'staticMembers@2022-09-01' = [for spokeMember in spokeNetworkGroupMembers: if (contains(groupedVNETs,last(split(spokeMember,'/')))) {
    name: 'sm-${(last(split(spokeMember, '/')))}'
    properties: {
      resourceId: spokeMember
    }
  }]

  resource staticMemberHub 'staticMembers@2022-09-01' = {
    name: 'sm-${(toLower(last(split(hubVnetId, '/'))))}'
    properties: {
      resourceId: hubVnetId
    }
  }
}

Gruppo di rete appartenenza dinamica

@description('This is the dynamic group for all VNETs.')
resource networkGroupSpokesDynamic 'Microsoft.Network/networkManagers/networkGroups@2022-09-01' = if (networkGroupMembershipType == 'dynamic') {
  name: 'ng-learn-prod-${location}-dynamic001'
  parent: networkManager
  properties: {
    description: 'Network Group - Dynamic'
  }
}

Configurazione di connettività

La configurazione della connettività associa il gruppo di rete alla topologia di rete specificata.

@description('This connectivity configuration defines the connectivity between VNETs using Direct Connection. The hub will be part of the mesh, but gateway routes from the hub will not propagate to spokes.')
resource connectivityConfigurationMesh 'Microsoft.Network/networkManagers/connectivityConfigurations@2022-09-01' = {
  name: 'cc-learn-prod-${location}-mesh001'
  parent: networkManager
  properties: {
    description: 'Mesh connectivity configuration'
    appliesToGroups: [
      {
        networkGroupId: (networkGroupMembershipType == 'static') ? networkGroupSpokesStatic.id : networkGroupSpokesDynamic.id
        isGlobal: 'False'
        useHubGateway: 'False'
        groupConnectivity: 'DirectlyConnected'
      }
    ]
    connectivityTopology: 'Mesh'
    deleteExistingPeering: 'True'
    hubs: []
    isGlobal: 'False'
  }
}

Script di distribuzione

Per distribuire la configurazione al gruppo di rete di destinazione, utilizzare uno script di distribuzione che richiama il comando PowerShell Deploy-AzNetworkManagerCommit. Lo script di distribuzione richiede un'identità con autorizzazioni sufficienti per eseguire lo script di PowerShell sul programma di traduzione. Il file Bicep crea un'identità gestita dall'utente e le assegna il ruolo Contributor nel gruppo di risorse di destinazione. Per ulteriori informazioni sugli script di distribuzione e sulle identità associate, vedere Usare gli script di distribuzione nei modelli ARM.

@description('Create a Deployment Script resource to perform the commit/deployment of the Network Manager connectivity configuration.')
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: deploymentScriptName
  location: location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentityId}': {}
    }
  }
  properties: {
    azPowerShellVersion: '8.3'
    retentionInterval: 'PT1H'
    timeout: 'PT1H'
    arguments: '-networkManagerName "${networkManagerName}" -targetLocations ${location} -configIds ${configurationId} -subscriptionId ${subscription().subscriptionId} -configType ${configType} -resourceGroupName ${resourceGroup().name}'
    scriptContent: '''
    param (
      # AVNM subscription id
      [parameter(mandatory=$true)][string]$subscriptionId,

      # AVNM resource name
      [parameter(mandatory=$true)][string]$networkManagerName,

      # string with comma-separated list of config ids to deploy. ids must be of the same config type
      [parameter(mandatory=$true)][string[]]$configIds,

      # string with comma-separated list of deployment target regions
      [parameter(mandatory=$true)][string[]]$targetLocations,

      # configuration type to deploy. must be either connectivity or securityadmin
      [parameter(mandatory=$true)][ValidateSet('Connectivity','SecurityAdmin')][string]$configType,

      # AVNM resource group name
      [parameter(mandatory=$true)][string]$resourceGroupName
    )
  
    $null = Login-AzAccount -Identity -Subscription $subscriptionId
  
    [System.Collections.Generic.List[string]]$configIdList = @()  
    $configIdList.addRange($configIds) 
    [System.Collections.Generic.List[string]]$targetLocationList = @() # target locations for deployment
    $targetLocationList.addRange($targetLocations)     
    
    $deployment = @{
        Name = $networkManagerName
        ResourceGroupName = $resourceGroupName
        ConfigurationId = $configIdList
        TargetLocation = $targetLocationList
        CommitType = $configType
    }
  
    try {
      Deploy-AzNetworkManagerCommit @deployment -ErrorAction Stop
    }
    catch {
      Write-Error "Deployment failed with error: $_"
      throw "Deployment failed with error: $_"
    }
    '''
    }
}

Criteri di appartenenza ai gruppi di rete dinamici

Quando si configura la distribuzione in modo da utilizzare l'appartenenza al gruppo di rete dynamic, la soluzione distribuisce anche una definizione di Criteri di Azure e un'assegnazione. Nell'esempio seguente viene illustrata la definizione dei criteri.

@description('This is a Policy definition for dynamic group membership')
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: uniqueString(networkGroupId)
  properties: {
    description: 'AVNM quickstart dynamic group membership Policy'
    displayName: 'AVNM quickstart dynamic group membership Policy'
    mode: 'Microsoft.Network.Data'
    policyRule: {
      if: {
        allof: [
          {
            field: 'type'
            equals: 'Microsoft.Network/virtualNetworks'
          }
          {
            // virtual networks must have a tag where the key is '_avnm_quickstart_deployment'
            field: 'tags[_avnm_quickstart_deployment]'
            exists: true
          }
          {
            // virtual network ids must include this sample's resource group ID - limiting the chance that dynamic membership impacts other vnets in your subscriptions
            field: 'id'
            like: '${subscription().id}/resourcegroups/${resourceGroupName}/*'
          }
        ]
      }
      then: {
        // 'addToNetworkGroup' is a special effect used by AVNM network groups
        effect: 'addToNetworkGroup'
        details: {
          networkGroupId: networkGroupId
        }
      }
    }
  }
}

Distribuire la soluzione Bicep

Prerequisiti di distribuzione

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
  • Autorizzazioni necessarie per creare una definizione di criteri e un'assegnazione di criteri nell'ambito della sottoscrizione di destinazione. Queste autorizzazioni sono necessarie quando si usa il parametro networkGroupMembershipType=Dynamic di distribuzione per distribuire le risorse dei criteri necessarie per l'appartenenza al gruppo di rete. Il valore predefinito è static, che non distribuisce alcuna Policy.
  • Tutte le risorse in questa soluzione sono disponibili nel repository GitHub Azure Samples. È possibile scaricare la soluzione Bicep dal repository o clonare il repository nel computer locale.

Scaricare la soluzione Bicep

  1. Scaricare un archivio ZIP del repository di esempio in questo collegamento.
  2. Estrarre il file ZIP scaricato. Nel terminale, vai nella directory estratta avnm-mesh-connected-group. I file Bicep per questa soluzione si trovano nella bicep sottodirectory .

In alternativa, è possibile usare git per clonare il repository:

git clone https://github.com/Azure-Samples/avnm-mesh-connected-group
cd avnm-mesh-connected-group

Connettersi ad Azure

Accedere al proprio account Azure e selezionare la sottoscrizione

Per iniziare la configurazione, accedere al proprio account Azure:

Connect-AzAccount

Connettersi quindi alla sottoscrizione:

Set-AzContext -Subscription <subscription name or id>
Installare il modulo Azure PowerShell

Installare il modulo Az.Network di Azure PowerShell più recente usando questo comando:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Parametri di distribuzione

  • resourceGroupName: [obbligatorio] Nome del gruppo di risorse in cui si vuole distribuire gestione rete virtuale e reti virtuali di esempio.
  • location: [obbligatorio] Percorso delle risorse da distribuire.
  • networkGroupMembershipType: [facoltativo] Tipo di appartenenza al gruppo di rete da distribuire. Il valore predefinito è static, ma è possibile usare per l'appartenenza dynamic dinamica ai gruppi.

Note

La scelta dell'appartenenza dinamica ai gruppi distribuisce un Criteri di Azure per gestire l'appartenenza, che richiede più autorizzazioni.

Distribuzione predefinita con appartenenza al gruppo di rete statico

New-AzSubscriptionDeployment -Name avnm-mesh-connected-group -Location <deploymentLocation> -TemplateFile ./bicep/main.bicep -resourceGroupName <newOrExistingResourceGroup>

Distribuzione con appartenenza dinamica al gruppo di rete

Per usare Criteri di Azure per gestire in modo dinamico l'appartenenza al gruppo di rete, includere il parametro networkGroupMembershipType di distribuzione con il valore dynamic.

New-AzSubscriptionDeployment -Name avnm-mesh-connected-group -Location <deploymentLocation> -TemplateFile ./bicep/main.bicep -resourceGroupName <newOrExistingResourceGroup> -networkGroupMembershipType dynamic

Verificare la distribuzione della configurazione

Usare la sezione Gestione rete per ogni rete virtuale per verificare che la configurazione sia stata distribuita:

  1. Passare alla rete virtuale vnet-learn-prod-{location}-spoke001.

  2. In Impostazioni, selezionare Gestione rete.

  3. Nella scheda Configurazioni di connettività, verificare che cc-learn-prod-{location}-mesh001 venga visualizzato nell'elenco.

    Screenshot di una configurazione di connettività elencata per una rete virtuale.

  4. Ripetere i passaggi precedenti in vnet-learn-prod-{location}-spoke004--si noterà che vnet-learn-prod -{location}-spoke004 è escluso dalla configurazione della connettività.

Pulire le risorse

Se non sono più necessari gestione rete virtuale di Azure e le reti virtuali associate, rimuoverle eliminando il gruppo di risorse e le relative risorse.

  1. Nel portale di Azure passare al gruppo di risorse - resource-group.
  2. Selezionare resource-group e selezionare Elimina gruppo di risorse.
  3. In Elimina un gruppo di risorse verificare di voler eliminare immettendo il gruppo di risorse nella casella di testo e quindi selezionare Elimina.
  4. Se è stata usata l'appartenenza dinamica al gruppo di rete, eliminare la definizione e l'assegnazione di Criteri di Azure distribuite passando alla sottoscrizione nel portale e selezionando i criteri. In Criteri trovare l'assegnazione denominata AVNM quickstart dynamic group membership Policy ed eliminarla, quindi eseguire la stessa operazione per la definizione denominata AVNM quickstart dynamic group membership Policy.

Passaggi successivi

Dopo aver creato un'istanza di gestione rete virtuale di Azure, informazioni su come bloccare il traffico di rete usando una configurazione di amministratore della sicurezza: