Rychlý start: Vytvoření topologie sítě typu mesh pomocí Azure Virtual Network Manager a jazyka Bicep

Začněte používat Azure Virtual Network Manager pomocí Bicep ke správě připojení pro všechny virtuální sítě.

V tomto rychlém startu nasadíte tři virtuální sítě a použijete Azure Virtual Network Manager k vytvoření síťové topologie sítě. Pak ověříte, že se použila konfigurace připojení.

Diagram prostředků nasazených pro síťovou topologii virtuální sítě pomocí Azure Virtual Network Manageru

Řešení Bicep pro tuto ukázku je rozdělené do modulů, které umožňují nasazení v rozsahu skupiny prostředků i předplatného. Následující sekce popisují komponenty, které jsou jedinečné pro Azure Virtual Network Manager. Kromě těchto komponent řešení nasazuje virtuální sítě, uživatelem přiřazenou identitu a přiřazení rolí.

Definujte prostředek správce virtuální sítě

Tento zdroj vytváří instanci Microsoft.Network/networkManagers ve verzi 2022-09-01API , která implementuje propojenou skupinu pro propojení mezi virtuálními sítěmi. Nastavte networkManagerScopes na předplatná nebo skupiny pro správu, které instance spravuje, a ponechte Connectivity v networkManagerScopeAccesses, aby instance mohla nasazovat konfigurace konektivity.

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

Definujte statické a dynamické síťové skupiny

Řešení podporuje buď statickou skupinu členských sítí, nebo dynamickou skupinu členských sítí. Parametr networkGroupMembershipType vybírá, který se nasadí; vytvoří se pouze jeden ze dvou zdrojů.

Skupina sítě se statickým členstvím

Statický síťový skupinový zdroj, Microsoft.Network/networkManagers/networkGroups ve verzi 2022-09-01API , explicitně jmenuje své členy. Vnořené staticMembers prostředky přidávají paprskové virtuální sítě A, B a C a také centrální virtuální síť podle ID prostředku. Chcete-li cílit na vlastní virtuální sítě, změňte parametry spokeNetworkGroupMembers a 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
    }
  }
}

Skupina v síti s dynamickým členstvím

Dynamický síťový skupinový zdroj nedeklaruje žádné členy. Členství je vyplněno definicí Azure Policy popsanou v 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'
  }
}

Definujte konfiguraci mesh konektivity

Zdroj Microsoft.Network/networkManagers/connectivityConfigurations pro konfiguraci konektivity ve verzi 2022-09-01API , přiřazuje síťovou skupinu k topologii mesh sítě. Vlastnost appliesToGroups odkazuje na síťovou skupinu, kterou jste nasadili, a nastavíte connectivityTopology 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'
  }
}

Potvrďte konfiguraci pomocí skriptu pro nasazení

Ke konfigurace do cílové síťové skupiny použijte skript pro nasazení, který volá příkaz PowerShellu Deploy-AzNetworkManagerCommit. Skript pro nasazení potřebuje identitu s dostatečnými oprávněními pro spuštění PowerShell skriptu proti virtuálnímu síťovému manažerovi. Soubor Bicep vytvoří identitu spravovanou uživatelem a udělí jí roli Přispěvatel pro cílovou skupinu prostředků. Pro více informací o skriptech nasazení a souvisejících identitách viz Použít skripty nasazení v ARM šablonách.

Následující zdroj je zdroj typu Microsoft.Resources/deploymentScripts ve verzi rozhraní API 2020-10-01. Spouští vložený skript PowerShellu, který se přihlásí pomocí uživatelem přiřazené identity a volá Deploy-AzNetworkManagerCommit. Změňte vlastnosti azPowerShellVersion, retentionInterval, a timeout pro vlastní nasazení. Změňte hodnoty, které jsou předávány arguments: název správce sítě, cílová místa, konfigurační ID, ID předplatného, typ konfigurace a název skupiny zdrojů.

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

Definujte politiku dynamického členství

Když nakonfigurujete nasazení tak, aby využívalo členství ve skupině sítě dynamic, řešení také nasadí definici a přiřazení Azure Policy.

Následující zdroj je zdroj typu Microsoft.Authorization/policyDefinitions ve verzi rozhraní API 2021-06-01. Používá režim zásad Microsoft.Network.Data a efekt addToNetworkGroup, který přidává odpovídající virtuální sítě do skupiny sítí identifikované pomocí networkGroupId. Pravidlo politiky odpovídá virtuálním sítím, které tag _avnm_quickstart_deployment nesou a které se nacházejí ve skupině zdrojů tohoto vzorku. Změňte název tagu a filtr skupiny zdrojů v podmínkách like tak, aby odpovídal vašemu prostředí.

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

Nasazení řešení Bicep

Požadavky na nasazení

  • Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
  • Oprávnění k vytvoření definice zásady a přiřazení zásady v rámci oboru cílového předplatného Tato oprávnění potřebujete při použití parametru nasazení networkGroupMembershipType=Dynamic k nasazení požadovaných prostředků zásad Policy pro členství ve skupině Network Group. Výchozí hodnota je static, která nenasazuje zásadu.
  • Všechny prostředky v tomto řešení jsou k dispozici v úložišti Azure Samples GitHub. Řešení Bicep si můžete stáhnout z úložiště nebo naklonovat úložiště do místního počítače.

Stažení řešení Bicep

  1. Na tomto odkazu si stáhněte archiv ZIP ukázkového úložiště.
  2. Extrahujte stažený soubor ZIP. V terminálu přejděte do extrahovaného avnm-mesh-connected-group adresáře. Soubory Bicep pro toto řešení jsou v bicep podadresáři.

Alternativně můžete použít git ke klonování úložiště:

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

Připojení k Azure

Přihlaste se ke svému účtu Azure a vyberte své předplatné.

Pokud chcete zahájit konfiguraci, přihlaste se ke svému účtu Azure:

Connect-AzAccount

Pak se připojte k předplatnému:

Set-AzContext -Subscription <subscription name or id>
Instalace modulu Azure PowerShellu

Pomocí tohoto příkazu nainstalujte nejnovější modul Az.Network Azure PowerShellu:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Parametry nasazení

  • resourceGroupName: [required] Název skupiny prostředků, do které chcete nasadit správce virtuální sítě a ukázkové virtuální sítě.
  • umístění: [povinné] Umístění pro prostředky, které se mají nasadit.
  • networkGroupMembershipType: [volitelné] Typ členství ve skupině sítě, které chcete nasadit. Výchozí hodnota je static, ale můžete ji použít dynamic pro dynamické členství ve skupinách.

Poznámka:

Volba dynamického členství ve skupinách nasadí Azure Policy ke správě členství, což vyžaduje další oprávnění.

Výchozí nasazení se statickým členstvím ve skupině sítě

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

Nasazení s dynamickým členstvím ve skupině sítě

Chcete-li pomocí Azure Policy dynamicky spravovat členství v síťové skupině, zadejte parametr nasazení networkGroupMembershipType s hodnotou dynamic.

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

Ověřte nasazení konfigurace

Pomocí části Správce sítě pro každou virtuální síť ověřte, že jste nasadili konfiguraci:

  1. Přejděte do virtuální sítě vnet-learn-prod-{location}-spoke001 .

  2. V části Nastavení vyberte Správce sítě.

  3. Na kartě Konfigurace konektivity ověřte, že se v seznamu zobrazí cc-learn-prod-{location}-mesh001.

    Snímek obrazovky s konfigurací připojení uvedenou pro virtuální síť

  4. Opakujte předchozí kroky u vnet-learn-prod-{location}-spoke004 -- měli byste vidět, že vnet-learn-prod-{location}-spoke004 je vyloučená z konfigurace připojení.

Vyčištění prostředků

Pokud už nepotřebujete Azure Virtual Network Manager a přidružené virtuální sítě, odeberte je odstraněním skupiny prostředků a jejích prostředků.

  1. Na webu Azure Portal přejděte do skupiny prostředků – skupina prostředků.
  2. Vyberte skupinu prostředků a vyberte Odstranit skupinu prostředků.
  3. V části Odstranit skupinu prostředků potvrďte, že chcete odstranit zadáním skupiny prostředků do textového pole a pak vyberte Odstranit.
  4. Pokud jste použili členství v dynamické skupině sítě, odstraňte nasazenou definici a přiřazení Azure Policy tak, že přejdete na předplatné na portálu a vyberete zásady. V části Zásady vyhledejte přiřazení s názvem AVNM quickstart dynamic group membership Policy a odstraňte ho a pak totéž proveďte pro definici s názvem AVNM quickstart dynamic group membership Policy.

Další kroky

Teď, když jste vytvořili instanci Azure Virtual Network Manager, zjistěte, jak blokovat síťový provoz pomocí konfigurace správce zabezpečení: