Démarrage rapide : créez une topologie de réseau maillé avec Azure Virtual Network Manager à l’aide de Bicep

Démarrez avec Azure Virtual Network Manager en utilisant Bicep pour gérer la connectivité de tous vos réseaux virtuels.

Dans ce guide de démarrage rapide, vous déployez trois réseaux virtuels et utiliser le gestionnaire de réseau virtuel Azure pour créer une topologie de réseau maillé. Vous vérifiez ensuite que la configuration de la connectivité a été appliquée.

Diagramme des ressources déployées pour une topologie de réseau virtuel maillage avec le gestionnaire de réseau virtuel Azure.

La solution Bicep pour cet échantillon est divisée en modules pour activer les déploiements à la fois au niveau d’un groupe de ressources et à l’échelle d’un abonnement. Les sections suivantes décrivent les composants propres à Azure Virtual Network Manager. En plus de ces composants, la solution déploie des réseaux virtuels, une identité attribuée par l’utilisateur et une attribution de rôle.

Définir la ressource du gestionnaire de réseau virtuel

Cette ressource crée l’instance Microsoft.Network/networkManagers, à la version d’API 2022-09-01, qui implémente le groupe connecté pour la connectivité entre réseaux virtuels. Affectez networkManagerScopes aux abonnements ou groupes de gestion que l’instance gère, et conservez Connectivity dans networkManagerScopeAccesses afin que l’instance puisse déployer des configurations de connectivité.

@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: []
    }
  }
}

Définir les groupes de réseau statiques et dynamiques

La solution prend en charge soit un groupe de réseau d’adhésion statique, soit un groupe de réseau d’adhésion dynamique. Le networkGroupMembershipType paramètre sélectionne lequel est déployé ; une seule des deux ressources est créée.

Groupe de réseau d’adhésion statique

La ressource du groupe réseau statique, Microsoft.Network/networkManagers/networkGroups à la version 2022-09-01API, nomme explicitement ses membres. Les ressources imbriquées staticMembers ajoutent les réseaux virtuels en branches A, B et C, ainsi que le réseau virtuel du hub, par identifiant de ressource. Pour cibler vos propres réseaux virtuels, modifiez les spokeNetworkGroupMembers paramètres et hubVnetId .

@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
    }
  }
}

Groupe réseau à appartenance dynamique

La ressource du groupe réseau dynamique ne déclare aucun membre. L’appartenance au groupe est définie par la définition de stratégie Azure Policy décrite dans Définir la stratégie d’appartenance dynamique.

@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'
  }
}

Définir la configuration de connectivité maillée

La ressource de configuration de connectivité, Microsoft.Network/networkManagers/connectivityConfigurations à la version 2022-09-01API , associe le groupe réseau à la topologie réseau maillée. La appliesToGroups propriété fait référence au groupe réseau que vous avez déployé, et vous définissez connectivityTopology sur Mesh.

@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'
  }
}

Validez la configuration avec un script de déploiement

Pour déployer la configuration dans le groupe réseau cible, utilisez un script de déploiement qui appelle la Deploy-AzNetworkManagerCommit commande PowerShell. Le script de déploiement nécessite une identité avec suffisamment d’autorisations pour exécuter le script PowerShell sur le gestionnaire réseau virtuel. Le fichier Bicep crée une identité managée par l’utilisateur et lui accorde le rôle Contributeur sur le groupe de ressources cible. Pour plus d’informations sur les scripts de déploiement et les identités associées, voir Utiliser les scripts de déploiement dans les modèles ARM.

La ressource suivante est une ressource Microsoft.Resources/deploymentScripts dans la version d’API 2020-10-01. Il exécute un script PowerShell en ligne qui se connecte avec l’identité attribuée par l’utilisateur et appelle Deploy-AzNetworkManagerCommit. Changez les propriétés azPowerShellVersion, retentionInterval, et timeout pour votre propre déploiement. Modifiez les valeurs passées via arguments : le nom du gestionnaire de réseau, les emplacements cibles, les ID de configuration, l’ID d’abonnement, le type de configuration et le nom du groupe de ressources.

@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: $_"
    }
    '''
    }
}

Définir la politique d’adhésion dynamique

Lorsque vous configurez le déploiement pour utiliser l’appartenance à un groupe de réseau dynamic, la solution déploie également une définition et une affectation Azure Policy.

La ressource suivante est une ressource Microsoft.Authorization/policyDefinitions dans la version d’API 2021-06-01. Il utilise le Microsoft.Network.Data mode politique et l’effet addToNetworkGroup , qui ajoute des réseaux virtuels correspondants au groupe réseau identifié par networkGroupId. La règle de politique correspond aux réseaux virtuels qui portent le _avnm_quickstart_deployment tag et qui font partie du groupe de ressources de cet échantillon. Changez le nom de la balise et le filtre du groupe de ressources dans la like condition pour qu’ils correspondent à votre environnement.

@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
        }
      }
    }
  }
}

Déployer la solution Bicep

Conditions préalables au déploiement

  • Compte Azure avec un abonnement actif. Créez un compte gratuitement.
  • Autorisations pour créer une définition de stratégie et une attribution de stratégie dans l’étendue de l’abonnement cible. Vous avez besoin de ces autorisations lors de l’utilisation du paramètre networkGroupMembershipType=Dynamic de déploiement pour déployer les ressources de stratégie requises pour l’appartenance au groupe réseau. La valeur par défaut est static, qui ne déploie pas de stratégie.
  • Toutes les ressources de cette solution sont disponibles dans le référentiel Azure Samples GitHub. Vous pouvez télécharger la solution Bicep à partir du dépôt ou cloner le dépôt sur votre ordinateur local.

Télécharger la solution Bicep

  1. Téléchargez une archive ZIP de l’exemple de dépôt sur ce lien.
  2. Extrayez le fichier ZIP téléchargé. Dans votre terminal, accédez au répertoire extrait avnm-mesh-connected-group . Les fichiers Bicep de cette solution se trouvent dans le bicep sous-répertoire.

Vous pouvez également utiliser git pour cloner le dépôt :

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

Connexion à Azure

Vous connecter à votre compte Azure et sélectionner votre abonnement

Pour commencer votre configuration, connectez-vous à votre compte Azure :

Connect-AzAccount

Puis, connectez-vous à votre abonnement :

Set-AzContext -Subscription <subscription name or id>
Installer le module Azure PowerShell

Installez la version la plus récente du module Azure PowerShell Az.Network à l’aide de cette commande :

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Paramètres de déploiement

  • resourceGroupName : [obligatoire] Nom du groupe de ressources dans lequel vous souhaitez déployer le gestionnaire de réseau virtuel et des exemples de réseaux virtuels.
  • emplacement : [obligatoire] Emplacement des ressources à déployer.
  • networkGroupMembershipType : [facultatif] Type d’appartenance au groupe réseau à déployer. La valeur par défaut est static, mais vous pouvez l’utiliser dynamic pour l’appartenance à un groupe dynamique.

Remarque

Le choix de l’appartenance à un groupe dynamique déploie une Azure Policy pour gérer l’appartenance, ce qui nécessite plus d’autorisations.

Déploiement par défaut avec appartenance au groupe réseau statique

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

Déploiement avec appartenance à un groupe de réseau dynamique

Pour utiliser Azure Policy pour gérer dynamiquement l’appartenance au groupe réseau, incluez le paramètre networkGroupMembershipType de déploiement avec la valeur dynamic.

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

Vérifier le déploiement de la configuration

Utilisez la section Gestionnaire de réseau de chaque réseau virtuel pour vérifier que vous avez déployé votre configuration :

  1. Accédez au réseau virtuel vnet-learn-prod-{location}-spoke001.

  2. Sous Paramètres, sélectionnez Gestionnaire de réseau.

  3. Sous l’onglet Configurations de connectivité, vérifiez que cc-learn-prod-{location}-mesh001 apparaît dans la liste.

    Capture d’écran d’une configuration de connectivité répertoriée pour un réseau virtuel.

  4. Répétez les étapes précédentes sur vnet-learn-prod-{location}-spoke004. Vous devriez voir que vnet-learn-prod-{location}-spoke004 est exclu de la configuration de connectivité.

Nettoyer les ressources

Si vous n’avez plus besoin de Azure Virtual Network Manager et des réseaux virtuels associés, supprimez-les en supprimant le groupe de ressources et ses ressources.

  1. Dans le portail Azure, accédez à votre groupe de ressources – groupe-ressources.
  2. Sélectionnez groupe-ressources, puis Supprimer un groupe de ressources.
  3. Dans Supprimer un groupe de ressources, vérifiez que vous souhaitez supprimer en entrant le groupe de ressources dans la zone de texte, puis sélectionnez Supprimer.
  4. Si vous avez utilisé l’appartenance à un groupe de réseaux dynamiques, supprimez la définition et l’affectation de Azure Policy déployées en accédant à l’abonnement dans le portail et en sélectionnant les stratégies. Dans Stratégies, recherchez l’affectation nommée AVNM quickstart dynamic group membership Policy et supprimez-la, puis effectuez la même opération pour la définition nommée AVNM quickstart dynamic group membership Policy.

Étapes suivantes

Maintenant que vous avez créé une instance Azure Virtual Network Manager, découvrez comment bloquer le trafic réseau à l’aide d’une configuration d’administrateur de sécurité :