Delen via


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.

Bicep-bestandsmodules

De Bicep-oplossing voor dit voorbeeld is onderverdeeld in modules om implementaties mogelijk te maken voor zowel een resourcegroep als een abonnementsbereik. De onderstaande bestandssecties zijn de unieke onderdelen voor Virtual Network Manager. Naast de onderstaande secties implementeert de oplossing virtuele netwerken, een door de gebruiker toegewezen identiteit en een roltoewijzing.

Configuraties voor Virtual Network Manager, netwerkgroepen en connectiviteit

Virtuele Netwerkbeheerder

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

Netwerkgroepen

De oplossing ondersteunt het maken van statische lidmaatschapsnetwerkgroepen of dynamische lidmaatschapsnetwerkgroepen. De groep statisch lidmaatschapsnetwerk specificeert de leden op basis van de id van het virtuele netwerk

Groep statisch lidmaatschapsnetwerk

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

Netwerkgroep dynamisch lidmaatschap

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

Connectiviteitsconfiguratie

De connectiviteitsconfiguratie koppelt de netwerkgroep aan de opgegeven netwerktopologie.

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

Implementatiescript

Als u de configuratie wilt implementeren in de doelnetwerkgroep, wordt een implementatiescript gebruikt om de Deploy-AzNetworkManagerCommit PowerShell-opdracht aan te roepen. Het implementatiescript heeft een identiteit met voldoende machtigingen nodig om het PowerShell-script uit te voeren voor Virtual Network Manager, dus het Bicep-bestand maakt een door de gebruiker beheerde identiteit en verleent het de rol Inzender voor de doelresourcegroep. Zie Implementatiescripts gebruiken in ARM-sjablonen voor meer informatie over implementatiescripts en bijbehorende identiteiten.

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

Dynamisch groepslidmaatschapsbeleid voor netwerken

Wanneer de implementatie is geconfigureerd voor het gebruik van dynamic netwerkgroepslidmaatschap, implementeert de oplossing ook een Azure Policy-definitie en -toewijzing. De beleidsdefinitie wordt hieronder weergegeven.

@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

Vereisten voor implementatie

  • Een Azure-account met een actief abonnement. Gratis een account maken
  • Machtigingen voor het maken van een beleidsdefinitie en beleidstoewijzing op het bereik van het doelabonnement (dit is vereist 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.

De Bicep-oplossing downloaden

  1. Download een Zip-archief van de MSPNP-opslagplaats via deze koppeling
  2. Pak het gedownloade Zip-bestand uit en navigeer in uw terminal naar de solutions/avnm-mesh-connected-group/bicep map.

U kunt ook de git opslagplaats klonen met git clone https://github.com/mspnp/samples.git

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

Implementatieparameters

  • resourceGroupName: [vereist] Met deze parameter geeft u de naam op van de resourcegroep waarin de virtuele netwerkbeheerder en voorbeeld van virtuele netwerken worden geïmplementeerd.
  • locatie: [vereist] Met deze parameter geeft u de locatie op van de resources die moeten worden geïmplementeerd.
  • networkGroupMembershipType: [optioneel] Met deze parameter geeft u het type lidmaatschap van de netwerkgroep op dat moet worden geïmplementeerd. De standaardwaarde is static, maar dynamisch groepslidmaatschap kan worden gebruikt door op te dynamicgeven.

Notitie

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

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

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, kunt u deze verwijderen 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 het venster 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 Exemplaar van Azure Virtual Network Manager hebt gemaakt, leert u hoe u netwerkverkeer blokkeert met behulp van een configuratie van een beveiligingsbeheerder: