Partilhar via


Guia de início rápido: criar uma topologia de rede mesh com o Gerenciador de Rede Virtual do Azure usando o Bicep

Comece a usar o Gerenciador de Rede Virtual do Azure usando o Bicep para gerenciar a conectividade de todas as suas redes virtuais.

Neste início rápido, você implanta três redes virtuais e usa o Azure Virtual Network Manager para criar uma topologia de rede mesh. Em seguida, verifique se a configuração de conectividade foi aplicada.

Diagrama de recursos implantados para uma topologia de rede virtual de malha com o gerenciador de rede virtual do Azure.

Módulos de arquivo Bicep

A solução Bicep para este exemplo é dividida em módulos para permitir implantações em um grupo de recursos e escopo de assinatura. As seções de arquivo detalhadas abaixo são os componentes exclusivos para o Virtual Network Manager. Além das seções detalhadas abaixo, a solução implanta Redes Virtuais, uma Identidade Atribuída ao Usuário e uma Atribuição de Função.

Gerenciador de rede virtual, grupos de rede e configurações de conectividade

Gestor de Rede Virtual

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

Grupos de rede

A solução suporta a criação de grupos de rede de associação estática ou grupos de rede de associação dinâmica. O grupo de rede de associação estática especifica seus membros por ID de Rede Virtual

Grupo de Rede de Membros Estáticos

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

Grupo da Rede de Membros Dinâmicos

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

Configuração de conectividade

A Configuração de Conectividade associa o Grupo de Rede à topologia de rede especificada.

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

Script de implantação

Para implantar a configuração no grupo de rede de destino, um Script de Implantação é usado para chamar o Deploy-AzNetworkManagerCommit comando PowerShell. O Script de Implantação precisa de uma identidade com permissões suficientes para executar o script do PowerShell no Gerenciador de Rede Virtual, portanto, o arquivo Bicep cria uma Identidade Gerenciada pelo Usuário e concede a ele a função 'Colaborador' no grupo de recursos de destino. Para obter mais informações sobre scripts de implantação e identidades associadas, consulte Usar scripts de implantação em modelos 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: $_"
    }
    '''
    }
}

Política de Associação de Grupo de Rede Dinâmica

Quando a implantação é configurada para usar dynamic a associação a grupos de rede, a solução também implanta uma Definição e Atribuição de Política do Azure. A definição de política é mostrada abaixo.

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

Implantar a solução Bicep

Pré-requisitos de implantação

  • Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
  • Permissões para criar uma Definição de Política e Atribuição de Política no escopo da assinatura de destino (isso é necessário ao usar o parâmetro networkGroupMembershipType=Dynamic de implantação para implantar os recursos de Política necessários para associação ao Grupo de Rede. O padrão é static, que não implanta uma política.

Faça o download da Solução Bicep

  1. Faça o download de um arquivo Zip do repositório MSPNP neste link
  2. Extraia o arquivo Zip baixado e, no seu terminal, navegue até o solutions/avnm-mesh-connected-group/bicep diretório.

Como alternativa, você pode usar git para clonar o repositório com git clone https://github.com/mspnp/samples.git

Ligar ao Azure

Inicie sessão na sua conta do Azure e selecione a sua subscrição

Para iniciar a configuração, inicie sessão na sua conta do Azure:

Connect-AzAccount

Em seguida, conecte-se à sua assinatura:

Set-AzContext -Subscription <subscription name or id>
Instalar o módulo do Azure PowerShell

Instale o módulo Az.Network Azure PowerShell mais recente usando este comando:

 Install-Module -Name Az.Network -RequiredVersion 5.3.0

Parâmetros de implantação

  • resourceGroupName: [required] Este parâmetro especifica o nome do grupo de recursos onde o gerenciador de rede virtual e as redes virtuais de exemplo serão implantadas.
  • location: [required] Este parâmetro especifica o local dos recursos a serem implantados.
  • networkGroupMembershipType: [optional] Este parâmetro especifica o tipo de associação ao Grupo de Rede a ser implantado. O padrão é static, mas a associação ao grupo dinâmico pode ser usada especificando dynamic.

Nota

Escolher a associação de grupo dinâmico implanta uma Política do Azure para gerenciar a associação, exigindo mais permissões.

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

Verificar a implantação da configuração

Use a seção Network Manager para cada rede virtual para verificar se você implantou sua configuração:

  1. Vá para a rede virtual vnet-learn-prod-{location}-spoke001 .

  2. Em Definições, selecione Gestor de Rede.

  3. Na guia Configurações de Conectividade, verifique se cc-learn-prod-{location}-mesh001 aparece na lista.

    Captura de ecrã de uma configuração de conectividade listada para uma rede virtual.

  4. Repita as etapas anteriores em vnet-learn-prod-{location}-spoke004--você deve ver que o vnet-learn-prod-{location}-spoke004 está excluído da configuração de conectividade.

Clean up resources (Limpar recursos)

Se você não precisar mais do Gerenciador de Rede Virtual do Azure e das redes virtuais associadas, poderá removê-lo excluindo o grupo de recursos e seus recursos.

  1. No portal do Azure, navegue até seu grupo de recursos - grupo de recursos.
  2. Selecione grupo de recursos e selecione Excluir grupo de recursos.
  3. Na janela Excluir um grupo de recursos, confirme se deseja excluir inserindo grupo de recursos na caixa de texto e selecione Excluir.
  4. Se você usou a Associação de Grupo de Rede Dinâmica, exclua a Definição e Atribuição de Política do Azure implantada navegando até a Assinatura no Portal e selecionando as Políticas. Em Políticas, localize a Atribuição nomeada AVNM quickstart dynamic group membership Policy e exclua-a e, em seguida, faça o mesmo para a Definição nomeada AVNM quickstart dynamic group membership Policy.

Próximos passos

Agora que você criou uma instância do Gerenciador de Rede Virtual do Azure, saiba como bloquear o tráfego de rede usando uma configuração de administrador de segurança: