Quickstart: Een mesh-netwerktopologie maken met Azure Virtual Network Manager met behulp van Bicep

Ga aan de slag met Azure Virtual Network Manager door Bicep te gebruiken om connectiviteit voor al uw virtuele netwerken te beheren.

In deze quickstart implementeert u drie virtuele netwerken en gebruikt u Azure Virtual Network Manager om een mesh-netwerktopologie te maken. Vervolgens controleert u of de connectiviteitsconfiguratie is toegepast.

Diagram van resources die zijn geïmplementeerd voor een mesh virtuele netwerktopologie met Azure Virtual Network Manager.

De Bicep-oplossing voor dit voorbeeld is onderverdeeld in modules om implementaties mogelijk te maken voor zowel een resourcegroep als een abonnementsbereik. De volgende secties beschrijven de componenten die uniek zijn voor Azure Virtual Network Manager. Naast deze componenten implementeert de oplossing virtuele netwerken, een door de gebruiker toegewezen identiteit en een roltoewijzing.

Definieer de virtuele netwerkbeheerder resource

Deze bron creëert de Microsoft.Network/networkManagers instantie, bij API-versie 2022-09-01, die de verbonden groep implementeert voor inter-virtuele netwerkconnectiviteit. Stel networkManagerScopes in voor de abonnementen of beheergroepen die de instantie beheert, en houd Connectivity in networkManagerScopeAccesses zodat de instantie connectiviteitsconfiguraties kan implementeren.

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

Definieer statische en dynamische netwerkgroepen

De oplossing ondersteunt ofwel een statische ledennetwerkgroep of een dynamische ledennetwerkgroep. De networkGroupMembershipType parameter kiest welke wordt geïmplementeerd; slechts één van de twee bronnen wordt aangemaakt.

Statische ledennetwerkgroep

De statische netwerkgroepresource, Microsoft.Network/networkManagers/networkGroups bij API-versie 2022-09-01, noemt zijn leden expliciet. De geneste staticMembers resources voegen de spoke-virtuele netwerken A, B en C en het hub-virtuele netwerk toe aan de hand van de resource-ID. Om je eigen virtuele netwerken te targeten, verander je de parameters van spokeNetworkGroupMembers en hubVnetId aan.

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

Dynamische ledennetwerkgroep

De resource voor de dynamische netwerkgroep heeft geen leden. Lidmaatschap wordt ingevuld door de Azure Policy-definitie beschreven in Define the dynamic membership policy.

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

Definieer de mesh-connectiviteitsconfiguratie

De connectiviteitsconfiguratieresource, Microsoft.Network/networkManagers/connectivityConfigurations bij API-versie 2022-09-01, koppelt de netwerkgroep aan de mesh-netwerktopologie. De appliesToGroups eigenschap verwijst naar de netwerkgroep die je hebt geïmplementeerd, en je zet connectivityTopology op 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'
  }
}

Leg de configuratie vast met een implementatiescript

Om de configuratie op de doelgroep te deployen, gebruikt u een deployment-script dat het Deploy-AzNetworkManagerCommit PowerShell-commando aanroept. Het deploymentscript heeft een identiteit nodig met voldoende rechten om het PowerShell-script uit te voeren tegen de virtuele netwerkbeheerder. Het Bicep-bestand maakt een door de gebruiker beheerde identiteit en kent hieraan de rol Contributor toe op de doelresourcegroep. Voor meer informatie over deployment-scripts en bijbehorende identiteiten, zie Gebruik deployment-scripts in ARM-sjablonen.

De volgende bron is een Microsoft.Resources/deploymentScripts bron in API-versie 2020-10-01. Het draait een inline PowerShell-script dat inlogt met de door de gebruiker toegewezen identiteit en roept Deploy-AzNetworkManagerCommit. Verander de eigenschappen azPowerShellVersion, retentionInterval, en timeout voor je eigen inzet. Verander de doorgegeven argumentswaarden: de naam van de netwerkmanager, doellocaties, configuratie-ID's, abonnements-ID, configuratietype en naam van de resourcegroep.

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

Definieer het dynamisch lidmaatschapsbeleid

Wanneer je de deployment configureert om netwerkgroeplidmaatschap te gebruikendynamic, implementeert de oplossing ook een Azure Policy-definitie en -toewijzing.

De volgende bron is een Microsoft.Authorization/policyDefinitions bron in API-versie 2021-06-01. Het gebruikt de Microsoft.Network.Data beleidsmodus en het addToNetworkGroup effect, die overeenkomende virtuele netwerken toevoegt aan de netwerkgroep die door networkGroupIdis geïdentificeerd. De beleidsregel is van toepassing op virtuele netwerken die de tag _avnm_quickstart_deployment hebben en zich in de resourcegroep van dit voorbeeld bevinden. Verander de tagnaam en het resource group-filter in de like conditie zodat het overeenkomt met je eigen omgeving.

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

De Bicep-oplossing implementeren

Implementatievereisten

  • Een Azure-account met een actief abonnement. Gratis een account maken
  • Machtigingen om een beleidsdefinitie en een beleidstoewijzing te maken op het bereik van het doelabonnement. U hebt deze machtigingen nodig wanneer u de implementatieparameter networkGroupMembershipType=Dynamic gebruikt om de vereiste beleidsresources voor het lidmaatschap van de netwerkgroep te implementeren. De standaardwaarde is static, waarmee geen beleid wordt geïmplementeerd.
  • Alle bronnen in deze oplossing zijn beschikbaar in de GitHub-repository met Azure-voorbeelden. U kunt de Bicep-oplossing downloaden uit de opslagplaats of de opslagplaats klonen naar uw lokale computer.

De Bicep-oplossing downloaden

  1. Download een ZIP-archief van de voorbeeldopslagplaats via deze koppeling.
  2. Pak het gedownloade ZIP-bestand uit. Ga in je terminal naar de uitgepakte avnm-mesh-connected-group map. De Bicep-bestanden voor deze oplossing bevinden zich in de bicep submap.

U kunt ook git gebruiken om de repo te klonen:

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

Verbinding maken met Azure

Aanmelden bij uw Azure-account en uw abonnement selecteren

Meld u aan bij uw Azure-account om uw configuratie te starten:

Connect-AzAccount

Maak vervolgens verbinding met uw abonnement:

Set-AzContext -Subscription <subscription name or id>
De Azure PowerShell-module installeren

Installeer de nieuwste Az.Network Azure PowerShell-module met behulp van deze opdracht:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Inzetparameters

  • resourceGroupName: [vereist] De naam van de resourcegroep waar u de virtuele netwerkbeheerder en voorbeeld van virtuele netwerken wilt implementeren.
  • locatie: [vereist] De locatie voor de resources die moeten worden geïmplementeerd.
  • networkGroupMembershipType: [optioneel] Het type lidmaatschap van de netwerkgroep die moet worden geïmplementeerd. De standaardwaarde is static, maar u kunt dit gebruiken dynamic voor dynamisch groepslidmaatschap.

Notitie

Als u dynamisch groepslidmaatschap kiest, wordt een Azure Policy geïmplementeerd om het lidmaatschap te beheren. Hiervoor zijn meer machtigingen vereist.

Standaardimplementatie met lidmaatschap van statische netwerkgroep

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

Implementatie met dynamisch lidmaatschap van netwerkgroep

Als u Azure Policy wilt gebruiken om het lidmaatschap van de netwerkgroep dynamisch te beheren, neemt u de implementatieparameter networkGroupMembershipType op met de waarde .dynamic

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

Configuratie-implementatie controleren

Gebruik de sectie Netwerkbeheer voor elk virtueel netwerk om te controleren of u uw configuratie hebt geïmplementeerd:

  1. Ga naar het virtuele netwerk vnet-learn-prod-{location}-spoke001 .

  2. Selecteer Netwerkbeheer onder Instellingen.

  3. Controleer op het tabblad Connectiviteitsconfiguraties of cc-learn-prod-{location}-mesh001 wordt weergegeven in de lijst.

    Schermopname van een connectiviteitsconfiguratie die wordt vermeld voor een virtueel netwerk.

  4. Herhaal de vorige stappen op vnet-learn-prod-{location}-spoke004--u ziet dat de vnet-learn-prod-{location}-spoke004 is uitgesloten van de connectiviteitsconfiguratie.

Resources opschonen

Als u Azure Virtual Network Manager en de bijbehorende virtuele netwerken niet meer nodig hebt, verwijdert u deze door de resourcegroep en de bijbehorende resources te verwijderen.

  1. Blader in Azure Portal naar uw resourcegroep - resourcegroep.
  2. Selecteer de resourcegroep en selecteer Resourcegroep verwijderen.
  3. Bevestig in Een resourcegroep verwijderen dat u wilt verwijderen door de resourcegroep in het tekstvak in te voeren en selecteer Vervolgens Verwijderen.
  4. Als u dynamisch netwerkgroepslidmaatschap hebt gebruikt, verwijdert u de geïmplementeerde Azure Policy definitie en toewijzing door naar het abonnement in de portal te navigeren en het beleid te selecteren. Zoek in Beleid de toewijzing met de naam AVNM quickstart dynamic group membership Policy en verwijder deze en doe hetzelfde voor de definitie met de naamAVNM quickstart dynamic group membership Policy.

Volgende stappen

Nu u een Azure Virtual Network Manager-exemplaar hebt gemaakt, leert u hoe u netwerkverkeer blokkeert met behulp van een configuratie van een beveiligingsbeheerder: