Mulai cepat: Membuat topologi jaringan jala dengan Azure Virtual Network Manager dengan menggunakan Bicep

Mulai menggunakan Azure Virtual Network Manager dengan menggunakan Bicep untuk mengelola konektivitas untuk semua jaringan virtual Anda.

Dalam mulai cepat ini, Anda menyebarkan tiga jaringan virtual dan menggunakan Azure Virtual Network Manager untuk membuat topologi jaringan jala. Kemudian Anda memverifikasi bahwa konfigurasi konektivitas diterapkan.

Diagram sumber daya yang disebarkan untuk topologi jaringan virtual jala dengan manajer jaringan virtual Azure.

Modul Berkas Bicep

Solusi Bicep untuk sampel ini dipecah menjadi modul untuk mengaktifkan penyebaran di grup sumber daya dan cakupan langganan. Bagian file yang dirinci di bawah ini adalah komponen unik untuk Virtual Network Manager. Selain bagian yang dirinci di bawah ini, solusi menyebarkan Virtual Networks, Identitas yang Ditetapkan Pengguna, dan Penetapan Peran.

Virtual Network Manager, Grup Jaringan, dan Konfigurasi Konektivitas

Pengelola Virtual Network

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

Grup Jaringan

Solusi ini mendukung pembuatan Grup Jaringan keanggotaan statis atau Grup Jaringan keanggotaan dinamis. Grup jaringan keanggotaan statis menentukan anggotanya berdasarkan ID Virtual Network

Grup Jaringan Keanggotaan Statis

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

Grup Jaringan Keanggotaan Dinamis

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

Konfigurasi Konektivitas

Konfigurasi Konektivitas mengaitkan Grup Jaringan dengan topologi jaringan yang ditentukan.

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

Skrip Penyebaran

Untuk menyebarkan konfigurasi ke grup jaringan target, Skrip Penyebaran digunakan untuk memanggil Deploy-AzNetworkManagerCommit perintah PowerShell. Skrip Penyebaran memerlukan identitas dengan izin yang memadai untuk menjalankan skrip PowerShell terhadap Virtual Network Manager, sehingga file Bicep membuat Identitas Terkelola Pengguna dan memberinya peran 'Kontributor' pada grup sumber daya target. Untuk informasi selengkapnya tentang Skrip Penyebaran dan identitas terkait, lihat Menggunakan skrip penyebaran di templat 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: $_"
    }
    '''
    }
}

Kebijakan Keanggotaan Grup Jaringan Dinamis

Saat penyebaran dikonfigurasi untuk menggunakan dynamic keanggotaan grup jaringan, solusi juga menyebarkan Definisi dan Penugasan Azure Policy. Definisi Kebijakan ditunjukkan di bawah ini.

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

Menyebarkan Solusi Bicep

Prasyarat Penyebaran

  • Akun Azure dengan langganan aktif. Buat akun secara gratis.
  • Izin untuk membuat Definisi Kebijakan dan Penetapan Kebijakan pada cakupan langganan target (ini diperlukan saat menggunakan parameter networkGroupMembershipType=Dynamic penyebaran untuk menyebarkan sumber daya Kebijakan yang diperlukan untuk keanggotaan Grup Jaringan. Defaultnya adalah static, yang tidak menyebarkan Kebijakan.

Unduh Solusi Bicep

  1. Unduh arsip Zip dari repositori MSPNP di tautan ini
  2. Ekstrak file Zip yang diunduh dan di terminal Anda, navigasikan ke solutions/avnm-mesh-connected-group/bicep direktori.

Atau, Anda dapat menggunakan git untuk mengkloning repositori dengan git clone https://github.com/mspnp/samples.git

Hubungkan ke Azure

Masuk ke akun Azure Anda dan pilih langganan Anda

Untuk memulai konfigurasi Anda, masuk ke akun Azure Anda:

Connect-AzAccount

Kemudian, sambungkan ke langganan Anda:

Set-AzContext -Subscription <subscription name or id>
Menginstal modul Azure PowerShell

Instal modul Az.Network Azure PowerShell terbaru dengan menggunakan perintah ini:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Parameter Penyebaran

  • resourceGroupName: [required] Parameter ini menentukan nama grup sumber daya tempat manajer jaringan virtual dan jaringan virtual sampel akan disebarkan.
  • location: [required] Parameter ini menentukan lokasi sumber daya yang akan disebarkan.
  • networkGroupMembershipType: [opsional] Parameter ini menentukan jenis keanggotaan Grup Jaringan yang akan disebarkan. Defaultnya adalah static, tetapi keanggotaan grup dinamis dapat digunakan dengan menentukan dynamic.

Catatan

Memilih keanggotaan grup dinamis menyebarkan Azure Policy untuk mengelola keanggotaan, membutuhkan lebih banyak izin.

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

Memverifikasi penyebaran konfigurasi

Gunakan bagian Pengelola Jaringan untuk setiap jaringan virtual untuk memverifikasi bahwa Anda menyebarkan konfigurasi:

  1. Buka jaringan virtual vnet-learn-prod-{location}-spoke001.

  2. Di bawah Pengaturan, pilih Pengelola Jaringan.

  3. Pada tab Konfigurasi Konektivitas, verifikasi bahwa cc-learn-prod-{location}-mesh001 muncul dalam daftar.

    Cuplikan layar konfigurasi konektivitas yang tercantum untuk jaringan virtual.

  4. Ulangi langkah-langkah sebelumnya pada vnet-learn-prod-{location}-spoke004--Anda akan melihat vnet-learn-prod-{location}-spoke004 dikecualikan dari konfigurasi konektivitas.

Membersihkan sumber daya

Jika Anda tidak lagi memerlukan Azure Virtual Network Manager dan jaringan virtual terkait, Anda dapat menghapusnya dengan menghapus grup sumber daya dan sumber dayanya.

  1. Di portal Azure, telusuri ke grup sumber daya Anda - grup sumber daya.
  2. Pilih grup sumber daya dan pilih Hapus grup sumber daya.
  3. Di jendela Hapus grup sumber daya, konfirmasikan bahwa Anda ingin menghapus dengan memasukkan grup sumber daya di kotak teks, lalu pilih Hapus.
  4. Jika Anda menggunakan Keanggotaan Grup Jaringan Dinamis, hapus Definisi dan Penugasan Azure Policy yang disebarkan dengan menavigasi ke Langganan di Portal dan memilih Kebijakan. Di Kebijakan, temukan Penugasan bernama AVNM quickstart dynamic group membership Policy dan hapus, lalu lakukan hal yang sama untuk Definisi bernama AVNM quickstart dynamic group membership Policy.

Langkah berikutnya

Sekarang setelah Anda membuat instans Azure Virtual Network Manager, pelajari cara memblokir lalu lintas jaringan dengan menggunakan konfigurasi admin keamanan: