Freigeben über


Schnellstart: Erstellen einer Cloudnetzwerktopologie mit Azure Virtual Network Manager mithilfe von Bicep

Erste Schritte mit Azure Virtual Network Manager mithilfe von Bicep zum Verwalten der Konnektivität für alle virtuellen Netzwerke.

In diesem Schnellstart stellen Sie drei virtuelle Netzwerke bereit und erstellen mit Azure Virtual Network Manager eine Cloudnetzwerktopologie. Anschließend überprüfen Sie, ob die Konnektivitätskonfiguration angewandt wurde.

Diagramm der Ressourcen, die für eine virtuelle Cloudnetzwerktopologie mit Azure Virtual Network Manager bereitgestellt werden.

Bicep-Dateimodule

Die Bicep-Lösung für dieses Beispiel ist in Module unterteilt, um Bereitstellungen sowohl im Ressourcengruppen- als auch im Abonnementbereich zu ermöglichen. Die unten beschriebenen Dateiabschnitte sind die eindeutigen Komponenten für Virtual Network Manager. Zusätzlich zu den unten aufgeführten Abschnitten stellt die Lösung virtuelle Netzwerke, eine vom Benutzer zugewiesene Identität und eine Rollenzuweisung bereit.

Virtual Network-Manager, Netzwerkgruppen und Konnektivitätskonfigurationen

Virtueller Netzwerkmanager

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

Netzwerkgruppen

Die Lösung unterstützt das Erstellen statischer Mitgliedschaftsnetzwerkgruppen oder dynamischer Mitgliedschaftsnetzwerkgruppen. Die Netzwerkgruppe der statischen Mitgliedschaft gibt ihre Mitglieder nach Virtual Network-ID an.

Netzwerkgruppe für statische Mitgliedschaft

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

Netzwerkgruppe für dynamische Mitgliedschaft

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

Konfiguration der Konnektivität

Die Konnektivitätskonfiguration ordnet die Netzwerkgruppe der angegebenen Netzwerktopologie zu.

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

Bereitstellungsskript

Um die Konfiguration für die Zielnetzwerkgruppe bereitzustellen, wird ein Bereitstellungsskript verwendet, um den PowerShell-Befehl Deploy-AzNetworkManagerCommit aufzurufen. Das Bereitstellungsskript benötigt eine Identität mit ausreichenden Berechtigungen zum Ausführen des PowerShell-Skripts für den Virtuellen Netzwerk-Manager, sodass die Bicep-Datei eine vom Benutzer verwaltete Identität erstellt und ihm die Rolle "Mitwirkender" für die Zielressourcengruppe gewährt. Weitere Informationen zu Bereitstellungsskripts und zugehörigen Identitäten finden Sie unter Verwenden von Bereitstellungsskripts in ARM-Vorlagen.

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

Richtlinie für dynamische Netzwerkgruppenmitglied

Wenn die Bereitstellung für die Verwendung der dynamic-Netzwerkgruppenmitgliedschaft konfiguriert ist, stellt die Lösung auch eine Azure Policy-Definition und Zuweisung bereit. Die Richtliniendefinition wird unten gezeigt.

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

Bereitstellen der Bicep-Datei

Bereitstellungsvoraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Berechtigungen zum Erstellen einer Richtliniendefinition und Richtlinienzuweisung im Zielabonnementbereich (dies ist erforderlich, wenn der Bereitstellungsparameter networkGroupMembershipType=Dynamic zum Bereitstellen der erforderlichen Richtlinienressourcen für die Netzwerkgruppenmitgliedschaft verwendet wird. Der Standardwert ist static, wodurch keine Richtlinie bereitgestellt wird.

Herunterladen der Bicep-Lösung

  1. Laden Sie unter diesem Link ein Zip-Archiv des MSPNP-Repositorys herunter.
  2. Extrahieren Sie die heruntergeladene ZIP-Datei, und navigieren Sie in Ihrem Terminal zum Verzeichnis solutions/avnm-mesh-connected-group/bicep.

Alternativ können Sie git verwenden, um das Repository mit git clone https://github.com/mspnp/samples.git zu klonen.

Herstellen einer Verbindung mit Azure

Melden Sie sich bei Ihrem Azure-Konto an, und wählen Sie Ihr Abonnement aus.

Um mit der Konfiguration zu beginnen, melden Sie sich bei Ihrem Azure-Konto an:

Connect-AzAccount

Stellen Sie dann eine Verbindung mit Ihrem Abonnement her:

Set-AzContext -Subscription <subscription name or id>
Installieren des Azure PowerShell-Moduls

Installieren Sie das aktuelle Azure PowerShell-Modul Az.Network mithilfe des folgenden Befehls:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Bereitstellungsparameter

  • resourceGroupName: [erforderlich] Dieser Parameter gibt den Namen der Ressourcengruppe an, in der der Virtuelle Netzwerk-Manager und die virtuellen Beispielnetzwerke bereitgestellt werden.
  • location: [erforderlich] Dieser Parameter gibt den Speicherort der bereitzustellenden Ressourcen an.
  • networkGroupMembershipType: [optional] Dieser Parameter gibt den Typ der Netzwerkgruppenmitgliedschaft an, die bereitgestellt werden soll. Der Standardwert ist static, aber die dynamische Gruppenmitgliedschaft kann verwendet werden, indem dynamic angegeben wird.

Hinweis

Wenn Sie die dynamische Gruppenmitgliedschaft auswählen, wird Azure Policy zum Verwalten der Mitgliedschaft bereitgestellt, sodass weitere Berechtigungen erforderlich sind.

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

Bestätigen der Konfigurationsbereitstellung

Überprüfen Sie für jedes virtuelle Netzwerk im Bereich Network Manager, ob Sie Ihre Konfiguration implementiert haben:

  1. Wechseln Sie zum virtuellen Netzwerk vnet-learn-prod-{location}-spoke001.

  2. Wählen Sie unter EinstellungenNetwork Manager aus.

  3. Überprüfen Sie auf der Registerkarte Konnektivitätskonfigurationen, ob cc-learn-prod-{location}-mesh001 in der Liste angezeigt wird.

    Screenshot einer Konnektivitätskonfiguration, die für ein virtuelles Netzwerk aufgelistet ist.

  4. Wiederholen Sie die vorherigen Schritte unter vnet-learn-prod-{location}-spoke004. Sie sollten sehen, dass vnet-learn-prod-{location}-spoke004 von der Konnektivitätskonfiguration ausgeschlossen ist.

Bereinigen von Ressourcen

Wenn Sie Azure Virtual Network Manager und die zugehörigen virtuellen Netzwerke nicht mehr benötigen, können Sie sie entfernen, indem Sie die Ressourcengruppe und die zugehörigen Ressourcen löschen.

  1. Navigieren Sie im Azure-Portal zu Ihrer Ressourcengruppe resource-Group.
  2. Wählen Sie resource-group und dann Ressourcengruppe löschen aus.
  3. Bestätigen Sie im Fenster Ressourcengruppe löschen, dass Sie die Gruppe löschen möchten, indem Sie die in das Textfeld eingeben resource-group eingeben und dann Löschen auswählen.
  4. Wenn Sie die Dynamische Netzwerkgruppenmitgliedschaft verwendet haben, löschen Sie die bereitgestellten Azure Policy-Definition und Zuweisung, indem Sie im Portal zum Abonnement navigieren und die Richtlinien auswählen. Suchen Sie unter Richtlinien nach der ZuweisungAVNM quickstart dynamic group membership Policy und löschen Sie sie, und führen Sie denselben Vorgang für die Definition namens AVNM quickstart dynamic group membership Policy aus.

Nächste Schritte

Nachdem Sie die Azure Virtual Network Manager-Instanz erstellt haben, informieren Sie sich, wie Sie den Netzwerkdatenverkehr mithilfe einer Sicherheitsadministratorkonfiguration blockieren: