Szybki start: tworzenie topologii sieci siatki za pomocą usługi Azure Virtual Network Manager przy użyciu Bicep

Rozpocznij pracę z usługą Azure Virtual Network Manager przy użyciu rozwiązania Bicep, aby zarządzać łącznością dla wszystkich sieci wirtualnych.

W tym przewodniku Szybki start wdrożysz trzy sieci wirtualne i użyjesz usługi Azure Virtual Network Manager do utworzenia topologii sieci kratowej. Następnie sprawdź, czy konfiguracja łączności została zastosowana.

Diagram zasobów wdrożonych dla topologii sieci wirtualnej siatki za pomocą menedżera sieci wirtualnej platformy Azure.

Rozwiązanie Bicep dla tego przykładu jest podzielone na moduły, aby umożliwić wdrożenia zarówno w grupie zasobów, jak i w zakresie subskrypcji. Poniższe sekcje opisują komponenty unikalne dla Azure Virtual Network Manager. Oprócz tych komponentów, rozwiązanie wdraża sieci wirtualne, tożsamość przypisaną przez użytkownika oraz przypisanie ról.

Zdefiniuj zasób menedżera sieci wirtualnej

Ten zasób tworzy instancję Microsoft.Network/networkManagers, w wersji interfejsu API 2022-09-01, która implementuje grupę połączeń na potrzeby łączności między sieciami wirtualnymi. Ustaw networkManagerScopes na subskrypcje lub grupy zarządzania, którymi zarządza instancja, i pozostaw Connectivity w networkManagerScopeAccesses, aby instancja mogła wdrażać konfiguracje łączności.

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

Definiuj statyczne i dynamiczne grupy sieciowe

Rozwiązanie obsługuje zarówno statyczną grupę sieci członkowskich, jak i dynamiczną grupę sieci członkowskich. Parametr networkGroupMembershipType wybiera, który z nich zostanie wdrożony; tworzy się tylko jeden z tych dwóch zasobów.

Statyczna grupa sieci członkowskiej

Statyczny zasób grupy sieciowej, Microsoft.Network/networkManagers/networkGroups w wersji 2022-09-01API , wyraźnie wymienia swoich członków. Zagnieżdżone zasoby staticMembers dodają szprychowe sieci wirtualne A, B i C oraz sieć wirtualną typu hub przy użyciu identyfikatora zasobu. Aby wskazać własne sieci wirtualne, zmień parametry spokeNetworkGroupMembers i 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
    }
  }
}

Dynamiczna grupa sieciowa członków

Zasób dynamicznej grupy sieciowej nie zawiera żadnych członków. Członkostwo jest wypełniane definicją Azure Policy opisaną w sekcji Definiuj politykę członkostwa dynamicznego.

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

Zdefiniuj konfigurację łączności siatkowej

Zasób konfiguracji łączności, Microsoft.Network/networkManagers/connectivityConfigurations w wersji interfejsu API 2022-09-01, powiązuje grupę sieciową z topologią sieci mesh. Właściwość appliesToGroups odwołuje się do wdrożonej grupy sieciowej, a connectivityTopology ustawiono na 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'
  }
}

Zatwierdz konfigurację skryptem wdrożeniowym

Aby wdrożyć konfigurację do docelowej grupy sieciowej, użyj skryptu wdrożeniowego, który wywołuje polecenie Deploy-AzNetworkManagerCommit PowerShell. Skrypt wdrożeniowy potrzebuje tożsamości z odpowiednimi uprawnieniami do uruchomienia skryptu PowerShell na wirtualnym menedżerze sieci. Plik Bicep tworzy tożsamość zarządzaną przez użytkownika i przyznaje mu rolę Współautor w docelowej grupie zasobów. Więcej informacji o skryptach wdrożeniowych i powiązanych tożsamościach można znaleźć w artykule Użyj skryptów wdrożeniowych w szablonach ARM.

Poniższy zasób należy do zasobów Microsoft.Resources/deploymentScripts w wersji interfejsu API 2020-10-01. Uruchamia on skrypt PowerShell w linii, który loguje się za pomocą przypisanej przez użytkownika tożsamości i wywołuje Deploy-AzNetworkManagerCommit. Zmień właściwości azPowerShellVersion, retentionInterval, i timeout dla własnego wdrożenia. Zmień wartości przekazywane przez : argumentsnazwę menedżera sieci, lokalizacje docelowe, identyfikatory konfiguracji, ID subskrypcji, typ konfiguracji oraz nazwę grupy zasobów.

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

Zdefiniuj politykę dynamicznego członkostwa

Gdy skonfigurujesz wdrożenie tak, aby używało członkostwa w grupie sieciowej dynamic, rozwiązanie wdraża również definicję i przypisanie zasad Azure Policy.

Poniższy zasób należy do zasobów Microsoft.Authorization/policyDefinitions w wersji interfejsu API 2021-06-01. Wykorzystuje Microsoft.Network.Data tryb polityki oraz efekt, addToNetworkGroup który dodaje dopasowane sieci wirtualne do grupy sieciowej zidentyfikowanej przez networkGroupId. Reguła polityki odpowiada wirtualnym sieciom noszącym tag _avnm_quickstart_deployment i znajdującym się w grupie zasobów tej próbki. Zmień nazwę tagu i filtr grupy zasobów w warunku like , aby pasowały do twojego środowiska.

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

Wdrażanie rozwiązania Bicep

Wymagania wstępne dotyczące wdrożenia

  • Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
  • Uprawnienia do utworzenia definicji zasad i przypisania zasad w zakresie docelowej subskrypcji. Te uprawnienia są potrzebne podczas używania parametru networkGroupMembershipType=Dynamic do wdrożenia wymaganych zasobów zasad Policy na potrzeby członkostwa w grupie sieciowej. Wartość domyślna to static, która nie wdraża zasad.
  • Wszystkie zasoby w tym rozwiązaniu są dostępne w repozytorium GitHub Azure Samples. Rozwiązanie Bicep można pobrać z repozytorium lub sklonować repozytorium na komputer lokalny.

Pobierz rozwiązanie Bicep

  1. Pobierz archiwum ZIP przykładowego repozytorium pod tym linkiem.
  2. Wyodrębnij pobrany plik ZIP. W terminalu przejdź do wyodrębnionego avnm-mesh-connected-group katalogu. Pliki Bicep dla tego rozwiązania znajdują się w podkatalogu bicep.

Alternatywnie, możesz użyć polecenia git, aby sklonować repozytorium:

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

Łączenie się z platformą Azure

Zaloguj się do konta platformy Azure i wybierz swoją subskrypcję

Aby rozpocząć konfigurację, zaloguj się do konta platformy Azure:

Connect-AzAccount

Następnie połącz się z subskrypcją:

Set-AzContext -Subscription <subscription name or id>
Instalowanie modułu Azure PowerShell

Zainstaluj najnowszy moduł Az.Network programu Azure PowerShell przy użyciu tego polecenia:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Parametry wdrożenia

  • resourceGroupName: [required] Nazwa grupy zasobów, w której chcesz wdrożyć menedżera sieci wirtualnej i przykładowe sieci wirtualne.
  • location: [required] Lokalizacja zasobów do wdrożenia.
  • networkGroupMembershipType: [opcjonalnie] Typ członkostwa w grupie sieciowej do wdrożenia. Wartość domyślna to static, ale można jej użyć dynamic do dynamicznego członkostwa w grupach.

Uwaga

Wybranie członkostwa w grupie dynamicznej powoduje wdrożenie Azure Policy w celu zarządzania członkostwem, co wymaga większej liczby uprawnień.

Domyślne wdrożenie z członkostwem w statycznej grupie sieci

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

Wdrażanie z dynamicznym członkostwem w grupie sieci

Aby używać zasad Azure Policy do dynamicznego zarządzania członkostwem grupy sieci, uwzględnij parametr wdrożenia networkGroupMembershipType o wartości dynamic.

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

Weryfikowanie wdrożenia konfiguracji

Użyj sekcji Menedżer sieci dla każdej sieci wirtualnej, aby sprawdzić, czy wdrożono konfigurację:

  1. Przejdź do sieci wirtualnej vnet-learn-prod-{location}-spoke001 .

  2. W obszarze Ustawienia wybierz pozycję Menedżer sieci.

  3. Na karcie Konfiguracje łączności sprawdź, czy na liście jest wyświetlana opcja cc-learn-prod-{location}-mesh001.

    Zrzut ekranu przedstawiający konfigurację łączności wymienioną dla sieci wirtualnej.

  4. Powtórz poprzednie kroki dla vnet-learn-prod-{location}-spoke004 — powinno być widoczne, że vnet-learn-prod-{location}-spoke004 jest wykluczona z konfiguracji łączności.

Czyszczenie zasobów

Jeśli nie potrzebujesz już Azure Virtual Network Manager i skojarzonych sieci wirtualnych, usuń je, usuwając grupę zasobów i jej zasoby.

  1. W portalu Azure przejdź do grupy zasobów - resource-group.
  2. Wybierz pozycję Grupa zasobów i wybierz pozycję Usuń grupę zasobów.
  3. W obszarze Usuń grupę zasobów upewnij się, że chcesz usunąć, wprowadzając grupę zasobów w polu tekstowym, a następnie wybierz pozycję Usuń.
  4. Jeśli użyto funkcji Dynamic Network Group Membership, usuń wdrożoną definicję i przypisanie usługi Azure Policy, przechodząc w portalu do subskrypcji i wybierając opcję Zasady. W obszarze Zasady znajdź przypisanie o nazwie AVNM quickstart dynamic group membership Policy i usuń je, a następnie wykonaj to samo dla definicji o nazwie AVNM quickstart dynamic group membership Policy.

Następne kroki

Po utworzeniu wystąpienia Azure Virtual Network Manager dowiedz się, jak blokować ruch sieciowy przy użyciu konfiguracji administratora zabezpieczeń: