Partager via


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.

Modules de fichier Bicep

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 de fichier détaillées ci-dessous sont les composants uniques du Gestionnaire de réseau virtuel. En plus des sections détaillées ci-dessous, la solution déploie les Réseaux virtuels (VN), une Identité Attribuée à l’Utilisateur (UAI) et une Attribution de Rôle.

Virtual Network Manager, groupes réseau et configuration de la connectivité

Gestionnaire de réseau virtuel

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

Groupes réseau

La solution prend en charge la création de groupes réseau permanents ou de groupes réseau dynamiques. Le groupe réseau permanent spécifie ses membres par ID de réseau virtuel

Appartenance à un groupe réseau permanent

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

Appartenance à un groupe réseau 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'
  }
}

Configuration de la connectivité

La configuration de connectivité associe le groupe réseau à la topologie de réseau spécifiée.

@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 de déploiement

Pour déployer la configuration sur le groupe réseau cible, un script de déploiement est utilisé pour appeler la commande PowerShell Deploy-AzNetworkManagerCommit. Le script de déploiement a besoin d’une identité disposant d’autorisations suffisantes pour exécuter le script PowerShell sur le Gestionnaire de réseaux virtuels. Par conséquent, 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, consultez Utiliser des scripts de déploiement dans des modèles 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: $_"
    }
    '''
    }
}

Stratégie d’appartenance à un groupe réseau dynamique

Lorsque le déploiement est configuré pour utiliser dynamic l’appartenance au groupe réseau, la solution déploie également une définition et une affectation Azure Policy. La définition de Azure Policy est illustrée ci-dessous.

@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

Prérequis pour le déploiement

  • Compte Azure avec un abonnement actif. Créez un compte gratuitement.
  • Autorisations de créer une définition de stratégie et une attribution de stratégie ciblant l’abonnement (obligatoire avec l’utilisation du paramètre networkGroupMembershipType=Dynamic de déploiement des ressources de stratégie requises pour l’appartenance au groupe réseau. La valeur par défaut est static, elle ne déploie aucune stratégie.

Télécharger la solution Bicep

  1. Téléchargez une archive Zip du référentiel MSPNP à partir de ce lien
  2. Extrayez le fichier Zip téléchargé et, dans votre terminal, accédez au répertoire solutions/avnm-mesh-connected-group/bicep.

Vous pouvez également utiliser git pour cloner le répertoire avec git clone https://github.com/mspnp/samples.git

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] ce paramètre spécifie le nom du groupe de ressources dans lequel le gestionnaire de réseau virtuel et les exemples de réseaux virtuels seront déployés.
  • location : [obligatoire] ce paramètre spécifie l’emplacement des ressources à déployer.
  • networkGroupMembershipType : [facultatif] ce paramètre spécifie le type d’appartenance au groupe réseau à déployer. La valeur par défaut est static, mais l’appartenance dynamique au groupe peut être utilisée en spécifiant dynamic.

Remarque

Si vous choisissez l’appartenance dynamique à un groupe, cela déploie une stratégie Azure Policy de gestion de l’appartenance, qui nécessite davantage d’autorisations.

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

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 d’Azure Virtual Network Manager et des réseaux virtuels associés, vous pouvez les enlever 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 la fenêtre Supprimer un groupe de ressources, confirmez que vous souhaitez supprimer en entrant groupe-ressources dans la zone de texte, puis sélectionnez Supprimer.
  4. Si vous avez utilisé Appartenance au groupe de réseau dynamique, supprimez la définition et l’affectation de la stratégie Azure déployées en accédant à l’Abonnement dans le portail et en sélectionnant Stratégies. Dans Stratégies, recherchez l’Affectation nommée AVNM quickstart dynamic group membership Policy et supprimez-la, puis faites de même 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é :