Condividi tramite


Guida introduttiva: Creare una topologia di rete mesh con Azure Rete virtuale Manager usando Bicep

Introduzione ad Azure Rete virtuale Manager usando Bicep per gestire la connettività per 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 di seguito sono i componenti univoci per Virtual Network Manager. Oltre alle sezioni descritte di seguito, la soluzione distribuisce Rete virtuale, un'identità assegnata dall'utente e un'assegnazione di ruolo.

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

Gestione rete virtuale

@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

La 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 di 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 della 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 nel gruppo di rete di destinazione, viene usato uno script di distribuzione per chiamare il Deploy-AzNetworkManagerCommit comando di PowerShell. Lo script di distribuzione richiede un'identità con autorizzazioni sufficienti per eseguire lo script di PowerShell in Virtual Network Manager, quindi il file Bicep crea un'identità gestita dall'utente e concede il ruolo "Collaboratore" nel gruppo di risorse di destinazione. Per altre informazioni sugli script di distribuzione e sulle identità associate, vedere Usare gli script di distribuzione nei modelli di Resource Manager.

@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 la distribuzione è configurata per l'uso dell'appartenenza dynamic al gruppo di rete, la soluzione distribuisce anche una definizione e un'assegnazione Criteri di Azure. La definizione dei criteri è illustrata di seguito.

@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 per creare una definizione di criteri e un'assegnazione di criteri nell'ambito della sottoscrizione di destinazione. Questa operazione è necessaria 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 un criterio.

Scaricare la soluzione Bicep

  1. Scaricare un archivio ZIP del repository MSPNP in questo collegamento
  2. Estrarre il file ZIP scaricato e nel terminale passare alla solutions/avnm-mesh-connected-group/bicep directory.

In alternativa, è possibile usare git per clonare il repository con git clone https://github.com/mspnp/samples.git

Connettersi ad Azure

Accedere al proprio account Azure e selezionare la sottoscrizione

Per iniziare la configurazione, accedere all'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] Questo parametro specifica il nome del gruppo di risorse in cui verrà distribuito il gestore di rete virtuale e le reti virtuali di esempio.
  • location: [obbligatorio] Questo parametro specifica il percorso delle risorse da distribuire.
  • networkGroupMembershipType: [facoltativo] Questo parametro specifica il tipo di appartenenza al gruppo di rete da distribuire. Il valore predefinito è static, ma l'appartenenza dinamica al gruppo può essere usata specificando dynamic.

Nota

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

    $templateParameterObject = @{
        'location' = '<resourceLocation>'
        'resourceGroupName' = '<newOrExistingResourceGroup>'
    }
    New-AzSubscriptionDeployment -TemplateFile ./main.bicep -Location <deploymentLocation> -TemplateParameterObject $templateParameterObject

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 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 Azure Rete virtuale Manager e le reti virtuali associate non sono più necessari, è possibile rimuoverlo eliminando il gruppo di risorse e le relative risorse.

  1. Nella portale di Azure passare al gruppo di risorse - gruppo di risorse.
  2. Selezionare gruppo di risorse e selezionare Elimina gruppo di risorse.
  3. Nella finestra 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 Azure Rete virtuale Manager, vedere come bloccare il traffico di rete usando una configurazione di amministratore della sicurezza: