Udostępnij przez


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, aby utworzyć topologię sieci siatki. 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.

Moduły plików Bicep

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. Sekcje plików opisane poniżej to unikatowe składniki menedżera sieci wirtualnej. Oprócz poniższych sekcji rozwiązanie wdraża sieci wirtualne, tożsamość przypisaną przez użytkownika i przypisanie roli.

Menedżer sieci wirtualnej, grupy sieci i konfiguracje łączności

Menedżer sieci wirtualnej

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

Grupy sieciowe

Rozwiązanie obsługuje tworzenie statycznych grup sieciowych członkostwa lub dynamicznych grup sieciowych członkostwa. Statyczna grupa sieci członkostwa określa jej elementy członkowskie według identyfikatora sieci wirtualnej

Grupa sieci członkostwa statycznego

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

Grupa sieci 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'
  }
}

Konfiguracja łączności

Konfiguracja łączności kojarzy grupę sieci z określoną topologią sieci.

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

Skrypt wdrażania

Aby wdrożyć konfigurację w docelowej grupie sieci, skrypt wdrożenia służy do wywoływania Deploy-AzNetworkManagerCommit polecenia programu PowerShell. Skrypt wdrażania wymaga tożsamości z wystarczającymi uprawnieniami do wykonania skryptu programu PowerShell względem menedżera sieci wirtualnej, więc plik Bicep tworzy tożsamość zarządzaną użytkownika i przyznaje mu rolę "Współautor" w docelowej grupie zasobów. Aby uzyskać więcej informacji na temat skryptów wdrażania i skojarzonych tożsamości, zobacz Używanie skryptów wdrażania w szablonach usługi 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: $_"
    }
    '''
    }
}

Dynamiczne zasady członkostwa w grupie sieci

Gdy wdrożenie jest skonfigurowane do korzystania z dynamic członkostwa w grupie sieci, rozwiązanie wdraża również definicję i przypisanie usługi Azure Policy. Poniżej przedstawiono definicję zasad.

@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 tworzenia definicji zasad i przypisania zasad w zakresie subskrypcji docelowej (jest to wymagane w przypadku użycia parametru networkGroupMembershipType=Dynamic wdrożenia w celu wdrożenia wymaganych zasobów zasad dla członkostwa w grupie sieciowej. Wartość domyślna to static, która nie wdraża zasad.

Pobieranie rozwiązania Bicep

  1. Pobierz archiwum zip repozytorium MSPNP pod tym linkiem
  2. Wyodrębnij pobrany plik Zip i w terminalu solutions/avnm-mesh-connected-group/bicep przejdź do katalogu.

Alternatywnie możesz użyć polecenia , aby sklonować repozytorium za pomocą polecenia gitgit clone https://github.com/mspnp/samples.git

Łą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: [wymagane] Ten parametr określa nazwę grupy zasobów, w której zostanie wdrożony menedżer sieci wirtualnej i przykładowe sieci wirtualne.
  • location: [required] Ten parametr określa lokalizację zasobów do wdrożenia.
  • networkGroupMembershipType: [opcjonalnie] Ten parametr określa typ członkostwa grupy sieciowej do wdrożenia. Wartość domyślna to static, ale dynamiczne członkostwo w grupie może być używane przez określenie .dynamic

Uwaga

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

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

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 w sieci wirtualnej vnet-learn-prod-{location}-spoke004-- powinna zostać wyświetlona sieć wirtualna-learn-prod-{location}-spoke004 została wykluczona z konfiguracji łączności.

Czyszczenie zasobów

Jeśli nie potrzebujesz już usługi Azure Virtual Network Manager i skojarzonych sieci wirtualnych, możesz usunąć ją, usuwając grupę zasobów i jej zasoby.

  1. W witrynie Azure Portal przejdź do grupy zasobów — grupa zasobów.
  2. Wybierz pozycję Grupa zasobów i wybierz pozycję Usuń grupę zasobów.
  3. W oknie Usuwanie grupy 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 dynamicznego członkostwa w grupie sieci, usuń wdrożone definicje i przypisanie usługi Azure Policy, przechodząc do subskrypcji w portalu i wybierając zasady. W obszarze Zasady znajdź przypisanieo 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 usługi Azure Virtual Network Manager dowiedz się, jak blokować ruch sieciowy przy użyciu konfiguracji administratora zabezpieczeń: