Hızlı Başlangıç: Bicep kullanarak Azure Sanal Ağ Yöneticisi ile örgü ağ topolojisi oluşturun

Tüm sanal ağlarınızın bağlantısını yönetmek için Bicep'i kullanarak Azure Sanal Ağ Manager'ı kullanmaya başlayın.

Bu hızlı başlangıçta üç sanal ağ dağıtacak ve ağ topolojisi oluşturmak için Azure Sanal Ağ Manager'ı kullanacaksınız. Ardından bağlantı yapılandırmasının uygulandığını doğrularsınız.

Azure Virtual Network Manager ile bir örgü sanal ağ topolojisi için dağıtılan kaynakların diyagramı.

Bu örneğin Bicep çözümü, hem kaynak grubu hem de abonelik kapsamında dağıtımları etkinleştirmek için modüllere ayrılmıştır. Aşağıdaki bölümler, Azure Sanal Ağ Yöneticisi'a özgü bileşenleri tanımlar. Bu bileşenlere ek olarak, çözüm sanal ağlar, kullanıcı tarafından atanan bir kimlik ve bir rol ataması da sunar.

Sanal ağ yöneticisi kaynağını tanımlayın

Bu kaynak, sanal ağlar arası bağlantı için bağlantılı grubu uygulayan Microsoft.Network/networkManagers örneğini 2022-09-01 API sürümünde oluşturur. networkManagerScopes öğesini örneğin yönettiği aboneliklere veya yönetim gruplarına ayarlayın ve örneğin bağlantı yapılandırmalarını dağıtabilmesi için Connectivity öğesini networkManagerScopeAccesses içinde tutun.

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

Statik ve dinamik ağ gruplarını tanımlayın

Çözüm ya statik bir üyelik ağı grubunu ya da dinamik bir üyelik ağı grubunu destekler. networkGroupMembershipType parametresi, ikisinden hangisinin dağıtılacağını seçer; iki kaynaktan yalnızca biri oluşturulur.

Statik üyelik ağı grubu

Statik ağ grubu kaynağı, Microsoft.Network/networkManagers/networkGroups API sürümünde 2022-09-01üyelerini açıkça adlandırır. İç içe geçmiş staticMembers kaynaklar, A, B ve C uç sanal ağlarını ve merkez sanal ağını kaynak kimliklerine göre ekler. Kendi sanal ağlarınızı hedeflemek için spokeNetworkGroupMembers ve hubVnetId parametrelerini değiştirin.

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

Dinamik üyelik ağı grubu

Dinamik ağ grubu kaynağı, hiçbir üyesi olmadığını belirtir. Üyelik, Define the dynamic membership policy'de tanımlanan Azure İlkesi tanımıyla doldurulur.

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

Mesh bağlantı yapılandırmasını tanımlayın

API sürümünde Microsoft.Network/networkManagers/connectivityConfigurationsbağlantı yapılandırma kaynağı2022-09-01, ağ grubunu mesh ağ topolojisiyle ilişkilendirir. appliesToGroups özelliği, dağıttığınız ağ grubunu referans alır ve connectivityTopology değerini Mesh olarak ayarladınız.

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

Yapılandırmayı bir dağıtım betiği kullanarak kaydedin

Konfigürasyonu hedef ağ grubuna dağıtmak için, PowerShell komutunu Deploy-AzNetworkManagerCommit çağıran bir dağıtım betiği kullanın. Dağıtım betikleri, PowerShell betikini sanal ağ yöneticisine karşı çalıştırmak için yeterli izinlere sahip bir kimlik gerektirir. Bicep dosyası kullanıcı tarafından yönetilen bir kimlik oluşturur ve hedef kaynak grubunda Katkıda Bulunan rolü verir. Dağıtım betikleri ve ilgili kimlikler hakkında daha fazla bilgi için ARM şablonlarında dağıtım betiklerini kullan bölümüne bakınız.

Aşağıdaki kaynak, API sürümü Microsoft.Resources/deploymentScripts olan bir 2020-10-01 kaynağıdır. Kullanıcı tarafından atanan kimlikle oturum açan ve Deploy-AzNetworkManagerCommit çağıran satır içi bir PowerShell betiği çalıştırır. Kendi dağıtımınız için , azPowerShellVersion, ve retentionInterval özelliklerini timeoutdeğiştirin. Geçilen argumentsdeğerleri değiştirin: ağ yöneticisi adı, hedef konumlar, yapılandırma kimlikleri, abonelik kimliği, yapılandırma türü ve kaynak grubu adı.

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

Dinamik üyelik politikasını tanımlayın

Dağıtımı ağ grup üyeliği kullanacak dynamic şekilde yapılandırdığınızda, çözüm ayrıca Azure İlkesi tanımı ve atamasını da dağıtır.

Aşağıdaki kaynak, API sürümü Microsoft.Authorization/policyDefinitions olan bir 2021-06-01 kaynağıdır. Microsoft.Network.Data ilke modunu ve addToNetworkGroup etkisini kullanır; bu etki, networkGroupId tarafından tanımlanan ağ grubuna eşleşen sanal ağları ekler. Politika kuralı, etiketi _avnm_quickstart_deployment taşıyan ve bu örneklemin kaynak grubunda yaşayan sanal ağlarla eşleşiyor. Etiket adını ve kaynak grubu filtresini koşulda like kendi ortamınıza uyacak şekilde değiştirin.

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

Bicep çözümünü dağıtın

Dağıtım önkoşulları

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
  • Hedef abonelik kapsamında İlke Tanımı ve İlke Ataması oluşturma izinleri. Ağ Grubu üyeliği için gerekli İlke kaynaklarını dağıtmak için dağıtım parametresini networkGroupMembershipType=Dynamic kullanırken bu izinlere ihtiyacınız vardır. Varsayılan değer static’dir; bu, bir İlke dağıtmaz.
  • Bu çözümdeki tüm kaynaklar Azure Örnekleri GitHub deposunda kullanılabilir. Bicep çözümünü depodan indirebilir veya depoyu yerel makinenize kopyalayabilirsiniz.

Bicep çözümünü indirin

  1. Bu bağlantıdan örnek deponun ZIP arşivini indirin.
  2. İndirilen ZIP dosyasını ayıklayın. Terminalinizde ayıklanan avnm-mesh-connected-group dizine gidin. Bu çözümün Bicep dosyaları, bicep alt dizininde bulunur.

Alternatif olarak, depoyu kopyalamak için kullanabilirsiniz git :

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

Azure'a bağlanma

Azure hesabınızda oturum açın ve aboneliğinizi seçin

Yapılandırmanıza başlamak için Azure hesabınızda oturum açın:

Connect-AzAccount

Ardından aboneliğinize bağlanın:

Set-AzContext -Subscription <subscription name or id>
Azure PowerShell modülünü yükleme

Şu komutu kullanarak en son Az.Network Azure PowerShell modülünü yükleyin:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Dağıtım parametreleri

  • resourceGroupName: [required] Sanal ağ yöneticisini ve örnek sanal ağları dağıtmak istediğiniz kaynak grubunun adı.
  • location: [required] Dağıtılacak kaynakların konumu.
  • networkGroupMembershipType: [isteğe bağlı] Dağıtılacak Ağ Grubu üyeliğinin türü. Varsayılan değerdir static, ancak dinamik grup üyeliği için kullanabilirsiniz dynamic .

Not

Dinamik grup üyeliği seçildiğinde, üyeliği yönetmek için daha fazla izin gerektiren bir Azure İlkesi dağıtılır.

Statik ağ grubu üyeliğiyle varsayılan dağıtım

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

Dinamik ağ grubu üyeliği ile dağıtım

Ağ grubunun üyeliğini dinamik olarak yönetmek için Azure İlkesi kullanmak için dağıtım parametresini networkGroupMembershipType değeriyle dynamicekleyin.

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

Yapılandırma dağıtımlarını doğrulama

Yapılandırmanızı dağıttığınız doğrulamak için her sanal ağın Ağ Yöneticisi bölümünü kullanın:

  1. vnet-learn-prod-{location}-spoke001 sanal ağına gidin.

  2. Ayarlar'ın altında Ağ Yöneticisi'ne tıklayın.

  3. Bağlantı Yapılandırmaları sekmesinde, listede cc-learn-prod-{location}-mesh001 görüntülendiğini doğrulayın.

    Sanal ağ için listelenen bağlantı yapılandırmasının ekran görüntüsü.

  4. Önceki adımları vnet-learn-prod-{location}-spoke004 üzerinde yineleyin — vnet-learn-prod-{location}-spoke004 öğesinin bağlantı yapılandırmasına dahil edilmediğini görmelisiniz.

Kaynakları temizleme

artık Azure Sanal Ağ Yöneticisi ve ilişkili sanal ağlara ihtiyacınız yoksa, kaynak grubunu ve kaynaklarını silerek bunları kaldırın.

  1. Azure portalında kaynak grubunuz olan kaynak grubuna göz atın.
  2. resource-group'i seçin ve Kaynak grubunu sil'i seçin.
  3. Kaynak grubunu sil bölümünde, metin kutusuna resource-group yazarak silmek istediğinizi onaylayın ve sil'i seçin.
  4. Dinamik Ağ Grubu Üyeliği'ni kullandıysanız, portaldaki Abonelik bölümüne gidip İlkeler'i seçerek dağıtılmış Azure İlkesi Tanımı ve Atamasını silin. İlkeler'de, adlı AVNM quickstart dynamic group membership Policy'yı bulun ve silin, ardından adlı AVNM quickstart dynamic group membership Policy için de aynısını yapın.

Sonraki adımlar

Artık bir Azure Sanal Ağ Yöneticisi örneği oluşturduğunuza göre, bir güvenlik yöneticisi yapılandırması kullanarak ağ trafiğini engellemeyi öğrenin: