Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Comience a utilizar Azure Virtual Network Manager con Bicep para administrar la conectividad de todas sus redes virtuales.
En este artículo de inicio rápido, implementará tres redes virtuales y usará Azure Virtual Network Manager para crear una topología de red de malla. Después, compruebe si se ha aplicado la configuración de conectividad.
Módulos de archivo de Bicep
La solución Bicep para este ejemplo se divide en módulos para permitir implementaciones tanto a nivel de grupo de recursos como de suscripción. Las secciones del archivo que se detallan a continuación son los componentes únicos de Virtual Network Manager. Además de las secciones detalladas a continuación, la solución implementa redes virtuales, una identidad asignada al usuario y una asignación de funciones.
Administrador de redes virtuales, grupos de redes y configuraciones de conectividad
Administrador de redes virtuales
@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 red
La solución permite crear grupos de red de miembros estáticos o grupos de red de miembros dinámicos. El grupo de red de pertenencia estática especifica sus miembros por ID de red virtual
Grupo de red de miembros 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 de red de pertenencia dinámica
@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'
}
}
Configuración de conectividad
La Configuración de conectividad asocia el grupo de redes con la topología de red 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 implementación
Para implementar la configuración en el grupo de redes de destino, se usa un script de implementación para llamar al comando Deploy-AzNetworkManagerCommit Comando de PowerShell. El script de implementación necesita una identidad con permisos suficientes para ejecutar el script de PowerShell en Virtual Network Manager, por lo que el archivo bicep crea una identidad administrada de usuario y le concede el rol "Colaborador" en el grupo de recursos de destino. Para obtener más información sobre los scripts de implementación y las identidades asociadas, consulte Uso de scripts de implementación en plantillas de 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: $_"
}
'''
}
}
Directiva de pertenencia a grupos de red dinámicos
Cuando la implementación se configura para utilizar la pertenencia a grupos de red dynamic, la solución también implementa una definición y asignación de directiva de Azure. La definición de directiva se muestra a continuación.
@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
}
}
}
}
}
Implementación de la solución Bicep
Requisitos previos de implementación
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Permisos para crear una definición de directiva y una asignación de directiva en el ámbito de suscripción de destino (esto es necesario cuando se utiliza el parámetro de implementación
networkGroupMembershipType=Dynamicpara implementar los recursos de directiva necesarios para la pertenencia a un grupo de redes. El valor predeterminado esstatic, que no implementa ninguna política.
Descargar la solución Bicep
- Descargue un archivo Zip del repositorio MSPNP en este enlace
- Extraiga el archivo Zip descargado y, en su terminal, vaya al directorio
solutions/avnm-mesh-connected-group/bicep.
Como alternativa, puede utilizar git para clonar el repositorio con git clone https://github.com/mspnp/samples.git.
Conexión con Azure
Iniciar sesión en la cuenta de Azure y seleccione la suscripción
Para empezar la configuración, inicie sesión en la cuenta de Azure:
Connect-AzAccount
Luego, conéctela a la suscripción:
Set-AzContext -Subscription <subscription name or id>
Instalación del módulo de Azure PowerShell
Instale el módulo Az.Network de Azure PowerShell más reciente mediante este comando:
Install-Module -Name Az.Network -RequiredVersion 5.3.0
Parámetros de implementación
- resourceGroupName: [obligatorio] este parámetro especifica el nombre del grupo de recursos donde se desplegarán el gestor de red virtual y las redes virtuales de muestra.
- location: [obligatorio] Este parámetro especifica la ubicación de los recursos a implementar.
-
networkGroupMembershipType: [opcional] este parámetro especifica el tipo de pertenencia a grupo de red que se va a implementar. El valor predeterminado es
static, pero se puede utilizar la pertenencia dinámica a grupos especificandodynamic.
Nota:
La elección de la pertenencia dinámica a grupos implementa una directiva de Azure para administrar la pertenencia, lo que requiere más permisos.
$templateParameterObject = @{
'location' = '<resourceLocation>'
'resourceGroupName' = '<newOrExistingResourceGroup>'
}
New-AzSubscriptionDeployment -TemplateFile ./main.bicep -Location <deploymentLocation> -TemplateParameterObject $templateParameterObject
Comprobación de la implementación de la configuración
Use la sección Network Manager para cada red virtual para comprobar que ha implementado la configuración:
Vaya a la red virtual vnet-learn-prod-{location}-spoke001.
En Configuración, seleccione Network Manager.
En la pestaña Configuraciones de Conectividad, compruebe que cc-learn-prod-{location}-mesh001 aparece en la lista.
Repita los pasos anteriores en vnet-learn-prod-{location}-spoke004; debería ver que vnet-learn-prod-{location}-spoke004 está excluida de la configuración de conectividad.
Limpieza de recursos
Si ya no necesita Azure Virtual Network Manager y las redes virtuales asociadas, puede quitarla eliminando el grupo de recursos y sus recursos.
- En el Azure Portal, vaya a su grupo de recursos - grupo de recursos.
- Seleccione el grupo de recursos y elija Eliminar grupo de recursos.
- En la ventana Eliminar un grupo de recursos, confirme que desea eliminar escribiendo grupo de recursos en el cuadro de texto y seleccione Eliminar.
- Si utilizó Membresía dinámica de grupo de red, elimine la definición y asignación de directivas de Azure implementada en el Portal y vaya a la Suscripción y seleccione Directivas. En Directivas, busque la Asignación denominada
AVNM quickstart dynamic group membership Policyy elimínela; a continuación, haga lo mismo con la Definición denominadaAVNM quickstart dynamic group membership Policy.
Pasos siguientes
Ahora que ha creado una instancia de Azure Virtual Network Manager, aprenda a bloquear el tráfico mediante la configuración de un administrador de seguridad: