Поделиться через


Краткое руководство. Создание топологии сети сетки с помощью Диспетчера виртуальная сеть Azure с помощью Bicep

Начало работы с диспетчером виртуальная сеть Azure с помощью Bicep для управления подключением ко всем виртуальным сетям.

В этом кратком руководстве описано, как развернуть три виртуальные сети и использовать Диспетчер виртуальная сеть Azure для создания топологии сети сетки. Затем убедитесь, что была применена конфигурация подключения.

Схема ресурсов, развернутых для топологии виртуальной сети сетки с помощью диспетчера виртуальных сетей Azure.

Модули файлов Bicep

Решение Bicep для этого примера разбито на модули, чтобы включить развертывания как в группе ресурсов, так и в области подписки. Перечисленные ниже разделы файлов являются уникальными компонентами для диспетчера виртуальных сетей. Помимо разделов, описанных ниже, решение развертывает виртуальная сеть, удостоверение, назначенное пользователем удостоверение и назначение ролей.

виртуальная сеть Manager, сетевые группы и конфигурации подключения

Диспетчер виртуальных сетей

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

Сетевые группы

Решение поддерживает создание статических групп сети членства или динамических групп членства. Статическую группу членства указывает ее члены по идентификатору виртуальная сеть

Статическое членство в группе

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

Группа сети динамического членства

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

Конфигурация подключения

Конфигурация подключения связывает группу сети с указанной топологией сети.

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

Скрипт развертывания

Чтобы развернуть конфигурацию в целевой сетевой группе, скрипт развертывания используется для вызова Deploy-AzNetworkManagerCommit команды PowerShell. Скрипт развертывания должен иметь удостоверение с достаточными разрешениями для выполнения скрипта PowerShell в менеджере виртуальной сети, поэтому файл Bicep создает управляемое удостоверение пользователя и предоставляет ему роль "Участник" в целевой группе ресурсов. Дополнительные сведения о сценариях развертывания и связанных удостоверениях см. в статье "Использование сценариев развертывания" в шаблонах 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: $_"
    }
    '''
    }
}

Политика членства в динамических группах сети

Если развертывание настроено для использования dynamic членства в группах сети, решение также развертывает Политика Azure определение и назначение. Ниже показано определение политики.

@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

Необходимые условия для развертывания

  • Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
  • Разрешения на создание определения политики и назначения политик в целевой области подписки (это необходимо при использовании параметра networkGroupMembershipType=Dynamic развертывания для развертывания необходимых ресурсов политики для членства в группах сети. Значением по умолчанию является static, который не развертывает политику.

Скачивание решения Bicep

  1. Скачивание ZIP-архива репозитория MSPNP по этой ссылке
  2. Извлеките скачанный ZIP-файл и в терминале перейдите в solutions/avnm-mesh-connected-group/bicep каталог.

Кроме того, можно использовать git для клонирования репозитория с помощью git clone https://github.com/mspnp/samples.git

Подключение к Azure

Войдите в учетную запись Azure и выберите подписку.

Чтобы начать настройку, войдите в учетную запись Azure:

Connect-AzAccount

Затем подключитесь к подписке:

Set-AzContext -Subscription <subscription name or id>
Установка модуля Azure PowerShell

Установите последний модуль Az.Network Azure PowerShell с помощью следующей команды:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Параметры развертывания

  • resourceGroupName: [обязательно] Этот параметр указывает имя группы ресурсов, в которой будет развернут диспетчер виртуальных сетей и примеры виртуальных сетей.
  • location: [обязательный] Этот параметр указывает расположение ресурсов для развертывания.
  • networkGroupMembershipType: [необязательно] Этот параметр указывает тип членства в группе сети для развертывания. По умолчанию staticиспользуется динамическое членство в группах, указывая dynamic.

Примечание.

Выбор динамического членства в группах развертывает Политика Azure для управления членством, требуя дополнительных разрешений.

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

Проверка развертывания конфигурации

Используйте раздел Network Manager для каждой виртуальной сети, чтобы убедиться, что вы развернули конфигурацию:

  1. Перейдите к виртуальной сети vnet-learn-prod-{location}-spoke001 .

  2. В разделе "Параметры" выберите Network Manager.

  3. На вкладке "Конфигурации подключения" убедитесь, что в списке появится cc-learn-prod-{location}-mesh001 .

    Снимок экрана: конфигурация подключения, указанная для виртуальной сети.

  4. Повторите предыдущие шаги в vnet-learn-prod-{location}-spoke004-вы увидите, что виртуальная сеть-learn-prod-{location}-spoke004 исключена из конфигурации подключения.

Очистка ресурсов

Если вам больше не нужен диспетчер виртуальная сеть Azure и связанные виртуальные сети, ее можно удалить, удалив группу ресурсов и ее ресурсы.

  1. В портал Azure перейдите к группе ресурсов — группе ресурсов.
  2. Выберите группу ресурсов и выберите " Удалить группу ресурсов".
  3. В окне "Удалить группу ресурсов" убедитесь, что вы хотите удалить, введя группу ресурсов в текстовом поле, а затем нажмите кнопку "Удалить".
  4. Если вы использовали членство в динамических группах сети, удалите развернутые Политика Azure определение и назначение, перейдя к подписке на портале и выбрав политики. В политиках найдите и удалите его, а затем выполните то же самое для именованного AVNM quickstart dynamic group membership Policy.

Следующие шаги

Теперь, когда вы создали экземпляр Azure виртуальная сеть Manager, узнайте, как заблокировать сетевой трафик с помощью конфигурации администратора безопасности: