En este inicio rápido, aprenderá a crear una instancia de Azure Virtual Network (VNet) mediante Azure Portal, la CLI de Azure, Azure PowerShell, la plantilla de Resource Manager, la plantilla de Bicep y Terraform. Se implementan dos máquinas virtuales y un host de Azure Bastion para probar la conectividad entre las máquinas virtuales de la misma red virtual. El host de Azure Bastion facilita la conectividad RDP y SSH segura y sin problemas a las máquinas virtuales directamente en Azure Portal a través de SSL.
Una red virtual es el bloque de compilación fundamental para las redes privadas en Azure. Azure Virtual Network permite que los recursos de Azure, como las máquinas virtuales, se comuniquen de manera segura entre sí y con Internet.
Inicio de sesión en Azure
Inicie sesión en Azure Portal con su cuenta de Azure.
Crear una red virtual y un host de Azure Bastion
El procedimiento siguiente crea una red virtual con una subred de recursos, una subred de Azure Bastion y un host de Bastion:
En el portal, busque y seleccione Redes virtuales.
En la página Redes virtuales, seleccione y Crear.
En la pestaña Datos básicos de Crear red virtual, escriba o seleccione la siguiente información:
Configuración |
Importancia |
Detalles del proyecto |
|
Suscripción |
Seleccione su suscripción. |
Grupo de recursos |
Seleccione Crear nuevo.
Escriba test-rg para el nombre.
Seleccione OK. |
Detalles de la instancia |
|
Nombre |
Escriba vnet-1. |
Región |
Seleccione Este de EE. UU. 2. |
Seleccione Siguiente para ir a la pestaña Seguridad.
En la sección Azure Bastion, seleccione Habilitar Azure Bastion.
Bastion usa el explorador para conectarse a las máquinas virtuales de la red virtual a través del shell seguro (SSH) o el protocolo de escritorio remoto (RDP) mediante sus direcciones IP privadas. Las máquinas virtuales no necesitan direcciones IP públicas, software cliente ni configuración especial. Para más información, consulte ¿Qué es Azure Bastion?.
Nota:
Las tarifas por hora se aplican desde el momento en que se despliega Bastion, independientemente del uso de datos salientes. Para más información, consulte Precios y SKU. Si va a implementar Bastion como parte de un tutorial o prueba, se recomienda eliminar este recurso una vez que haya terminado de usarlo.
En Azure Bastion, escriba o seleccione la información siguiente:
Configuración |
Importancia |
Nombre de host de Azure Bastion |
Escriba bastión. |
Dirección IP pública de Azure Bastion |
Seleccione Crear una dirección IP pública.
Escriba public-ip-bastion en Nombre.
Seleccione OK. |
Seleccione Siguiente para continuar a la pestaña Direcciones IP.
En el cuadro espacio de direcciones de Subredes, seleccione la subred predeterminada.
En Editar subred, escriba o seleccione la información siguiente:
Configuración |
Importancia |
Propósito de la subred |
Deje el valor predeterminado de Default. |
Nombre |
Escriba subnet-1. |
IPv4 |
|
Intervalo de direcciones IPv4 |
Deje el valor predeterminado de 10.0.0.0/16. |
Dirección inicial |
Deje el valor predeterminado de 10.0.0.0. |
Tamaño |
Deje el valor predeterminado de /24 (256 direcciones). |
Haga clic en Guardar.
En la parte inferior de la ventana, seleccione Revisar y crear. Cuando se supera la validación, seleccione Crear.
Creación de máquinas virtuales
El procedimiento siguiente crea dos máquinas virtuales denominadas vm-1 y vm-2 en la red virtual:
En el portal, busque y seleccione Máquinas virtuales.
En la página Máquinas virtuales, seleccione + Crear y Máquina virtual de Azure.
En la pestaña Datos básicos de Crear una máquina virtual, escriba o seleccione la siguiente información:
Configuración |
Importancia |
Detalles del proyecto |
|
Suscripción |
Seleccione su suscripción. |
Grupo de recursos |
Seleccione test-rg. |
Detalles de la instancia |
|
Nombre de la máquina virtual |
Escriba vm-1. |
Región |
Seleccione Este de EE. UU. 2. |
Opciones de disponibilidad |
Seleccione No se requiere redundancia de la infraestructura. |
Tipo de seguridad |
Deje el valor predeterminado Estándar. |
Imagen |
Seleccione Ubuntu Server 22.04 LTS: x64 Gen2. |
Arquitectura VM |
Deje el valor predeterminado, x64. |
Tamaño |
Seleccione un tamaño. |
Cuenta de administrador |
|
Tipo de autenticación |
Seleccione Contraseña. |
Nombre de usuario |
escriba usuarioazure. |
Contraseña |
Escriba una contraseña. |
Confirmar contraseña |
Reescriba la contraseña. |
Reglas de puerto de entrada |
|
Puertos de entrada públicos |
Seleccione Ninguno. |
Seleccione la pestaña Redes. Escriba o seleccione la siguiente información:
Configuración |
Importancia |
Interfaz de red |
|
Red de área virtual |
Seleccione vnet-1. |
Subred |
Seleccione subnet-1 (10.0.0.0/24). |
Dirección IP pública |
Seleccione Ninguno. |
Grupo de seguridad de red de NIC |
Seleccione Advanced (Avanzadas). |
Configuración del grupo de seguridad de red |
Seleccione Crear nuevo.
Escriba nsg-1 como nombre.
Deje el resto de los valores predeterminados y seleccione Aceptar. |
Deje el resto de las opciones en sus valores predeterminados y luego seleccione Revisar + crear.
Revise la configuración y seleccione Crear.
Espere a que la primera máquina virtual se implemente y repita los pasos anteriores para crear una segunda máquina virtual con la siguiente configuración:
Configuración |
Importancia |
Nombre de la máquina virtual |
Escriba vm-2. |
Red de área virtual |
Seleccione vnet-1. |
Subred |
Seleccione subnet-1 (10.0.0.0/24). |
Dirección IP pública |
Seleccione Ninguno. |
Grupo de seguridad de red de NIC |
Seleccione Advanced (Avanzadas). |
Configuración del grupo de seguridad de red |
Selecciona nsg-1. |
Nota:
Las máquinas virtuales de una red virtual con un host de Azure Bastion no necesitarán direcciones IP públicas. Bastion proporcionará la dirección IP pública y las máquinas virtuales usarán direcciones IP privadas para comunicarse dentro de la red. Es posible quitar las direcciones IP públicas de cualquier máquina virtual en redes virtuales hospedadas por Bastion. Para obtener más información, consulte Desasociar una dirección IP pública de una máquina virtual de Azure.
Nota:
Azure proporciona una dirección IP de acceso de salida predeterminada para las máquinas virtuales que no tienen asignada una dirección IP pública o están en el grupo back-end de un equilibrador de carga de Azure básico interno. El mecanismo de dirección IP de acceso de salida predeterminado proporciona una dirección IP de salida que no se puede configurar.
La dirección IP de acceso de salida predeterminada está deshabilitada cuando se produce uno de los siguientes eventos:
- Se asigna una dirección IP pública a la máquina virtual.
- La máquina virtual se coloca en el grupo de back-end de un balanceador de carga estándar, con o sin reglas de salida.
- Se asigna un recurso de Azure NAT Gateway a la subred de la máquina virtual.
Las máquinas virtuales creadas mediante conjuntos de escalado de máquinas virtuales en modo de orquestación flexible no tienen acceso de salida predeterminado.
Para más información sobre las conexiones de salida en Azure, vea Acceso de salida predeterminado en Azure y Uso de traducción de direcciones de red (SNAT) de origen para conexiones de salida.
Creación de un grupo de recursos
Use New-AzResourceGroup para crear un grupo de recursos para hospedar la red virtual. Ejecute el código siguiente para crear un grupo de recursos denominado test-rg en la región de Azure eastus2:
$rg = @{
Name = 'test-rg'
Location = 'eastus2'
}
New-AzResourceGroup @rg
Creación de una red virtual
Use New-AzVirtualNetwork para crear una red virtual denominada vnet-1 con el prefijo de dirección IP 10.0.0.0/16 en el grupo de recursos test-rg y la ubicación eastus2:
$vnet = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
AddressPrefix = '10.0.0.0/16'
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Azure implementa recursos en una subred dentro de una red virtual. Use Add-AzVirtualNetworkSubnetConfig para crear una configuración de subred denominada subnet-1 con el prefijo de dirección 10.0.0.0/24:
$subnet = @{
Name = 'subnet-1'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.0.0/24'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
A continuación, asocie la configuración de subred a la red virtual con Set-AzVirtualNetwork:
$virtualNetwork | Set-AzVirtualNetwork
Implementación de Azure Bastion
Azure Bastion usa el explorador para conectarse a las máquinas virtuales de la red virtual a través del shell seguro (SSH) o el protocolo de escritorio remoto (RDP) mediante sus direcciones IP privadas. Las máquinas virtuales no necesitan direcciones IP públicas, software cliente ni configuración especial. Para más información sobre Bastion, consulte ¿Qué es Azure Bastion?
Las tarifas por hora se aplican desde el momento en que se despliega Bastion, independientemente del uso de datos salientes. Para más información, consulte Precios y SKU. Si va a implementar Bastion como parte de un tutorial o prueba, se recomienda eliminar este recurso una vez que haya terminado de usarlo.
Configure la subred de Azure Bastion en la red virtual. Esta subred se reservará exclusivamente para los recursos de Azure Bastion y debe denominarse AzureBastionSubnet.
$subnet = @{
Name = 'AzureBastionSubnet'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.1.0/26'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
Establezca la configuración:
$virtualNetwork | Set-AzVirtualNetwork
Cree una dirección IP pública para Bastion. El host de Bastion usa la dirección IP pública para acceder a SSH y RDP a través del puerto 443.
$ip = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip'
Location = 'eastus2'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip
Use el comando New-AzBastion para crear un nuevo host de Bastion de SKU estándar en AzureBastionSubnet:
$bastion = @{
Name = 'bastion'
ResourceGroupName = 'test-rg'
PublicIpAddressRgName = 'test-rg'
PublicIpAddressName = 'public-ip'
VirtualNetworkRgName = 'test-rg'
VirtualNetworkName = 'vnet-1'
Sku = 'Basic'
}
New-AzBastion @bastion
Los recursos de Bastion tardarán aproximadamente 10 minutos en implementarse. En la siguiente sección, podrá crear una máquina virtual mientras Bastion se implementa en la red virtual.
Creación de máquinas virtuales
Use New-AzVM para crear dos máquinas virtuales denominadas vm-1 y vm-2 en la subred subnet-1 de la red virtual. Cuando se le pidan las credenciales, escriba los nombres de usuario y las contraseñas de las máquinas virtuales.
Para crear la primera máquina virtual, use el código siguiente:
# Set the administrator and password for the VM. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
## Create a network interface for the VM. ##
$nic = @{
Name = "nic-1"
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration. ##
$vmsz = @{
VMName = "vm-1"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "vm-1"
Credential = $cred
}
$vmimage = @{
PublisherName = 'Canonical'
Offer = '0001-com-ubuntu-server-jammy'
Skus = '22_04-lts-gen2'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the VM. ##
$vm = @{
ResourceGroupName = 'test-rg'
Location = 'eastus2'
VM = $vmConfig
}
New-AzVM @vm
Para crear la segunda máquina virtual, use el código siguiente:
# Set the administrator and password for the VM. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
## Create a network interface for the VM. ##
$nic = @{
Name = "nic-2"
ResourceGroupName = 'test-rg'
Location = 'eastus2'
Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration. ##
$vmsz = @{
VMName = "vm-2"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "vm-2"
Credential = $cred
}
$vmimage = @{
PublisherName = 'Canonical'
Offer = '0001-com-ubuntu-server-jammy'
Skus = '22_04-lts-gen2'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the VM. ##
$vm = @{
ResourceGroupName = 'test-rg'
Location = 'eastus2'
VM = $vmConfig
}
New-AzVM @vm
Sugerencia
Puede usar la opción -AsJob
para crear una máquina virtual en segundo plano mientras continúa con otras tareas. Por ejemplo, ejecute New-AzVM @vm1 -AsJob
. Cuando Azure comience a crear la máquina virtual en segundo plano, obtendrá algo como el siguiente resultado:
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running... AzureLongRun... Running True localhost New-AzVM
Azure tardará unos minutos en crear las máquinas virtuales. Cuando Azure termine de crear las máquinas virtuales, devolverá la salida a PowerShell.
Nota:
Las máquinas virtuales de una red virtual con un host bastión no necesitarán direcciones IP públicas. Bastion proporcionará la dirección IP pública y las máquinas virtuales usarán direcciones IP privadas para comunicarse dentro de la red. Es posible quitar las direcciones IP públicas de cualquier máquina virtual en redes virtuales hospedadas por Bastion. Para obtener más información, consulte Desasociar una dirección IP pública de una máquina virtual de Azure.
Nota:
Azure proporciona una dirección IP de acceso de salida predeterminada para las máquinas virtuales que no tienen asignada una dirección IP pública o están en el grupo back-end de un equilibrador de carga de Azure básico interno. El mecanismo de dirección IP de acceso de salida predeterminado proporciona una dirección IP de salida que no se puede configurar.
La dirección IP de acceso de salida predeterminada está deshabilitada cuando se produce uno de los siguientes eventos:
- Se asigna una dirección IP pública a la máquina virtual.
- La máquina virtual se coloca en el grupo de back-end de un balanceador de carga estándar, con o sin reglas de salida.
- Se asigna un recurso de Azure NAT Gateway a la subred de la máquina virtual.
Las máquinas virtuales creadas mediante conjuntos de escalado de máquinas virtuales en modo de orquestación flexible no tienen acceso de salida predeterminado.
Para más información sobre las conexiones de salida en Azure, vea Acceso de salida predeterminado en Azure y Uso de traducción de direcciones de red (SNAT) de origen para conexiones de salida.
Creación de un grupo de recursos
Use az group create para crear un grupo de recursos para hospedar la red virtual. Use el código siguiente para crear un grupo de recursos denominado test-rg en la región de Azure eastus2:
az group create \
--name test-rg \
--location eastus2
Creación de una red virtual y una subred
Use az network vnet create para crear una red virtual denominada vnet-1 con una subred denominada subnet-1 en el grupo de recursos test-rg:
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefixes 10.0.0.0/24
Implementación de Azure Bastion
Azure Bastion usa el explorador para conectarse a las máquinas virtuales de la red virtual a través del shell seguro (SSH) o el protocolo de escritorio remoto (RDP) mediante sus direcciones IP privadas. Las máquinas virtuales no necesitan direcciones IP públicas, software cliente ni configuración especial.
Las tarifas por hora se aplican desde el momento en que se despliega Bastion, independientemente del uso de datos salientes. Para más información, consulte Precios y SKU. Si va a implementar Bastion como parte de un tutorial o prueba, se recomienda eliminar este recurso una vez que haya terminado de usarlo. Para más información sobre Bastion, consulte ¿Qué es Azure Bastion?
Use az network vnet subnet create para crear una subred de Bastion en la red virtual. Esta subred se reservará exclusivamente para los recursos de Azure Bastion y debe denominarse AzureBastionSubnet.
az network vnet subnet create \
--name AzureBastionSubnet \
--resource-group test-rg \
--vnet-name vnet-1 \
--address-prefix 10.0.1.0/26
Cree una dirección IP pública para Bastion. Esta dirección IP se usa para conectarse al host bastión desde Internet. Use az network public-ip create para crear una dirección IP pública denominada public-ip en el grupo de recursos test-rg:
az network public-ip create \
--resource-group test-rg \
--name public-ip \
--sku Standard \
--location eastus2 \
--zone 1 2 3
Use az network bastion create para crear un host de Bastion en la subred AzureBastionSubnet de la red virtual:
az network bastion create \
--name bastion \
--public-ip-address public-ip \
--resource-group test-rg \
--vnet-name vnet-1 \
--location eastus2
Los recursos de Bastion tardarán aproximadamente 10 minutos en implementarse. En la siguiente sección, podrá crear una máquina virtual mientras Bastion se implementa en la red virtual.
Creación de máquinas virtuales
Use az vm create para crear dos máquinas virtuales denominadas vm-1 y vm-2 en la subred subnet-1 de la red virtual. Cuando se le pidan credenciales, escriba los nombres de usuario y las contraseñas de las máquinas virtuales.
Para crear la primera máquina virtual, use el comando siguiente:
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-1 \
--image Ubuntu2204 \
--public-ip-address ""
Para crear la segunda máquina virtual, use el comando siguiente:
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-2 \
--image Ubuntu2204 \
--public-ip-address ""
Sugerencia
También puede usar la opción --no-wait
para crear una máquina virtual en segundo plano mientras continúa con otras tareas.
Las máquinas virtuales tardan unos minutos en crearse. Una vez que Azure cree cada máquina virtual, la CLI de Azure devuelve un resultado similar al siguiente mensaje:
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-2",
"location": "eastus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.5",
"publicIpAddress": "",
"resourceGroup": "test-rg"
"zones": ""
}
Nota:
Las máquinas virtuales de una red virtual con un host bastión no necesitarán direcciones IP públicas. Bastion proporcionará la dirección IP pública y las máquinas virtuales usarán direcciones IP privadas para comunicarse dentro de la red. Es posible quitar las direcciones IP públicas de cualquier máquina virtual en redes virtuales hospedadas por Bastion. Para obtener más información, consulte Desasociar una dirección IP pública de una máquina virtual de Azure.
Nota:
Azure proporciona una dirección IP de acceso de salida predeterminada para las máquinas virtuales que no tienen asignada una dirección IP pública o están en el grupo back-end de un equilibrador de carga de Azure básico interno. El mecanismo de dirección IP de acceso de salida predeterminado proporciona una dirección IP de salida que no se puede configurar.
La dirección IP de acceso de salida predeterminada está deshabilitada cuando se produce uno de los siguientes eventos:
- Se asigna una dirección IP pública a la máquina virtual.
- La máquina virtual se coloca en el grupo de back-end de un balanceador de carga estándar, con o sin reglas de salida.
- Se asigna un recurso de Azure NAT Gateway a la subred de la máquina virtual.
Las máquinas virtuales creadas mediante conjuntos de escalado de máquinas virtuales en modo de orquestación flexible no tienen acceso de salida predeterminado.
Para más información sobre las conexiones de salida en Azure, vea Acceso de salida predeterminado en Azure y Uso de traducción de direcciones de red (SNAT) de origen para conexiones de salida.
Revisión de la plantilla
La plantilla usada en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.6.18.56646",
"templateHash": "10806234693722113459"
}
},
"parameters": {
"vnetName": {
"type": "string",
"defaultValue": "VNet1",
"metadata": {
"description": "VNet name"
}
},
"vnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.0.0/16",
"metadata": {
"description": "Address prefix"
}
},
"subnet1Prefix": {
"type": "string",
"defaultValue": "10.0.0.0/24",
"metadata": {
"description": "Subnet 1 Prefix"
}
},
"subnet1Name": {
"type": "string",
"defaultValue": "Subnet1",
"metadata": {
"description": "Subnet 1 Name"
}
},
"subnet2Prefix": {
"type": "string",
"defaultValue": "10.0.1.0/24",
"metadata": {
"description": "Subnet 2 Prefix"
}
},
"subnet2Name": {
"type": "string",
"defaultValue": "Subnet2",
"metadata": {
"description": "Subnet 2 Name"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-08-01",
"name": "[parameters('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnet1Name')]",
"properties": {
"addressPrefix": "[parameters('subnet1Prefix')]"
}
},
{
"name": "[parameters('subnet2Name')]",
"properties": {
"addressPrefix": "[parameters('subnet2Prefix')]"
}
}
]
}
}
]
}
La plantilla define los siguientes recursos de Azure:
Implementación de la plantilla
Implemente la plantilla de Resource Manager en Azure:
Seleccione Implementar en Azure para iniciar sesión en Azure y abrir la plantilla. La plantilla crea una red virtual con dos subredes.
En el portal, en la página Crear una red virtual con dos subredes, escriba o seleccione los valores siguientes:
-
Grupo de recursos: seleccione Crear nuevo, introduzca CreateVNetQS-rg como nombre del grupo de recursos y seleccione Aceptar.
-
Nombre de la red virtual: introduzca un nombre para la red virtual nueva.
Seleccione Revisar y crear y, luego, Crear.
Cuando se complete la implementación, seleccione el botón Ir al recurso para revisar los recursos implementados.
Revisión de los recursos implementados
Explore los recursos que creó con la red virtual examinando los paneles de configuración de VNet1:
La pestaña Información general muestra el espacio de direcciones definido de 10.0.0.0/16.
En la pestaña Subredes, verá las subredes implementadas de Subnet1 y Subnet2 con los valores adecuados de la plantilla.
Para obtener información sobre la sintaxis y las propiedades de JSON de una red virtual en una plantilla, consulte Microsoft.Network/virtualNetworks.
Crear la red virtual y las máquinas virtuales
Este inicio rápido utiliza la plantilla de Bicep de Dos máquinas virtuales en VNET a partir de las Plantillas de inicio rápido de Azure Resource Manager para crear la red virtual, la subred de recursos y las máquinas virtuales. La plantilla de Bicep define los siguientes recursos de Azure:
Revisar el archivo de Bicep:
@description('Admin username')
param adminUsername string
@description('Admin password')
@secure()
param adminPassword string
@description('Prefix to use for VM names')
param vmNamePrefix string = 'BackendVM'
@description('Location for all resources.')
param location string = resourceGroup().location
@description('Size of the virtual machines')
param vmSize string = 'Standard_D2s_v3'
var availabilitySetName = 'AvSet'
var storageAccountType = 'Standard_LRS'
var storageAccountName = uniqueString(resourceGroup().id)
var virtualNetworkName = 'vNet'
var subnetName = 'backendSubnet'
var loadBalancerName = 'ilb'
var networkInterfaceName = 'nic'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName)
var numberOfInstances = 2
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
}
resource availabilitySet 'Microsoft.Compute/availabilitySets@2023-09-01' = {
name: availabilitySetName
location: location
sku: {
name: 'Aligned'
}
properties: {
platformUpdateDomainCount: 2
platformFaultDomainCount: 2
}
}
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: virtualNetworkName
location: location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: subnetName
properties: {
addressPrefix: '10.0.2.0/24'
}
}
]
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${networkInterfaceName}${i}'
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
subnet: {
id: subnetRef
}
loadBalancerBackendAddressPools: [
{
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
]
}
}
]
}
dependsOn: [
virtualNetwork
loadBalancer
]
}]
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-09-01' = {
name: loadBalancerName
location: location
sku: {
name: 'Standard'
}
properties: {
frontendIPConfigurations: [
{
properties: {
subnet: {
id: subnetRef
}
privateIPAddress: '10.0.2.6'
privateIPAllocationMethod: 'Static'
}
name: 'LoadBalancerFrontend'
}
]
backendAddressPools: [
{
name: 'BackendPool1'
}
]
loadBalancingRules: [
{
properties: {
frontendIPConfiguration: {
id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'LoadBalancerFrontend')
}
backendAddressPool: {
id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool1')
}
probe: {
id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'lbprobe')
}
protocol: 'Tcp'
frontendPort: 80
backendPort: 80
idleTimeoutInMinutes: 15
}
name: 'lbrule'
}
]
probes: [
{
properties: {
protocol: 'Tcp'
port: 80
intervalInSeconds: 15
numberOfProbes: 2
}
name: 'lbprobe'
}
]
}
dependsOn: [
virtualNetwork
]
}
resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = [for i in range(0, numberOfInstances): {
name: '${vmNamePrefix}${i}'
location: location
properties: {
availabilitySet: {
id: availabilitySet.id
}
hardwareProfile: {
vmSize: vmSize
}
osProfile: {
computerName: '${vmNamePrefix}${i}'
adminUsername: adminUsername
adminPassword: adminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: '2019-Datacenter'
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
}
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface[i].id
}
]
}
diagnosticsProfile: {
bootDiagnostics: {
enabled: true
storageUri: storageAccount.properties.primaryEndpoints.blob
}
}
}
}]
output location string = location
output name string = loadBalancer.name
output resourceGroupName string = resourceGroup().name
output resourceId string = loadBalancer.id
Implementar la plantilla de Bicep
Guarde el archivo de Bicep en el equipo local como main.bicep.
Implemente el archivo de Bicep utilizando la CLI de Azure o Azure PowerShell:
Interfaz de línea de comandos (CLI)
az group create \
--name TestRG \
--location eastus
az deployment group create \
--resource-group TestRG \
--template-file main.bicep
PowerShell
$rgParams = @{
Name = 'TestRG'
Location = 'eastus'
}
New-AzResourceGroup @rgParams
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'main.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
Cuando la implementación finaliza, un mensaje indica que se ha realizado correctamente.
Implementación de Azure Bastion
Bastion usa el explorador para conectarse a las máquinas virtuales de la red virtual a través del shell seguro (SSH) o el protocolo de escritorio remoto (RDP) mediante sus direcciones IP privadas. Las máquinas virtuales no necesitan direcciones IP públicas, software cliente ni configuración especial. Para más información sobre Bastion, consulte ¿Qué es Azure Bastion?
Nota:
Las tarifas por hora se aplican desde el momento en que se despliega Bastion, independientemente del uso de datos salientes. Para más información, consulte Precios y SKU. Si va a implementar Bastion como parte de un tutorial o prueba, se recomienda eliminar este recurso una vez que haya terminado de usarlo.
Use la plantilla de Bicep de Azure Bastion como servicio a partir de las Plantillas de inicio rápido de Azure Resource Manager para implementar y configurar Bastion en la red virtual. Esta plantilla de Bicep define los siguientes recursos de Azure:
Revisar el archivo de Bicep:
@description('Name of new or existing vnet to which Azure Bastion should be deployed')
param vnetName string = 'vnet01'
@description('IP prefix for available addresses in vnet address space')
param vnetIpPrefix string = '10.1.0.0/16'
@description('Specify whether to provision new vnet or deploy to existing vnet')
@allowed([
'new'
'existing'
])
param vnetNewOrExisting string = 'new'
@description('Bastion subnet IP prefix MUST be within vnet IP prefix address space')
param bastionSubnetIpPrefix string = '10.1.1.0/26'
@description('Name of Azure Bastion resource')
param bastionHostName string
@description('Azure region for Bastion and virtual network')
param location string = resourceGroup().location
var publicIpAddressName = '${bastionHostName}-pip'
var bastionSubnetName = 'AzureBastionSubnet'
resource publicIp 'Microsoft.Network/publicIPAddresses@2022-01-01' = {
name: publicIpAddressName
location: location
sku: {
name: 'Standard'
}
properties: {
publicIPAllocationMethod: 'Static'
}
}
// if vnetNewOrExisting == 'new', create a new vnet and subnet
resource newVirtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' = if (vnetNewOrExisting == 'new') {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetIpPrefix
]
}
subnets: [
{
name: bastionSubnetName
properties: {
addressPrefix: bastionSubnetIpPrefix
}
}
]
}
}
// if vnetNewOrExisting == 'existing', reference an existing vnet and create a new subnet under it
resource existingVirtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' existing = if (vnetNewOrExisting == 'existing') {
name: vnetName
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2022-01-01' = if (vnetNewOrExisting == 'existing') {
parent: existingVirtualNetwork
name: bastionSubnetName
properties: {
addressPrefix: bastionSubnetIpPrefix
}
}
resource bastionHost 'Microsoft.Network/bastionHosts@2022-01-01' = {
name: bastionHostName
location: location
dependsOn: [
newVirtualNetwork
existingVirtualNetwork
]
properties: {
ipConfigurations: [
{
name: 'IpConf'
properties: {
subnet: {
id: subnet.id
}
publicIPAddress: {
id: publicIp.id
}
}
}
]
}
}
Implementar la plantilla de Bicep
Guarde el archivo de Bicep en su equipo local como bastion.bicep.
Use un editor de texto o código para realizar los siguientes cambios en el archivo:
- Línea 2: cambie
param vnetName string
de 'vnet01'
a 'VNet'
.
- Línea 5: cambie
param vnetIpPrefix string
de '10.1.0.0/16'
a '10.0.0.0/16'
.
- Línea 12: cambie
param vnetNewOrExisting string
de 'new'
a 'existing'
.
- Línea 15: cambie
param bastionSubnetIpPrefix string
de '10.1.1.0/26'
a '10.0.1.0/26'
.
- Línea 18: cambie
param bastionHostName string
a param bastionHostName = 'VNet-bastion'
.
Las primeras 18 líneas del archivo de Bicep ahora deben tener un aspecto similar al de este ejemplo:
@description('Name of new or existing vnet to which Azure Bastion should be deployed')
param vnetName string = 'VNet'
@description('IP prefix for available addresses in vnet address space')
param vnetIpPrefix string = '10.0.0.0/16'
@description('Specify whether to provision new vnet or deploy to existing vnet')
@allowed([
'new'
'existing'
])
param vnetNewOrExisting string = 'existing'
@description('Bastion subnet IP prefix MUST be within vnet IP prefix address space')
param bastionSubnetIpPrefix string = '10.0.1.0/26'
@description('Name of Azure Bastion resource')
param bastionHostName = 'VNet-bastion'
Guarde el archivo bastion.bicep.
Implemente el archivo de Bicep utilizando la CLI de Azure o Azure PowerShell:
Interfaz de línea de comandos (CLI)
az deployment group create \
--resource-group TestRG \
--template-file bastion.bicep
PowerShell
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'bastion.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
Cuando la implementación finaliza, un mensaje indica que se ha realizado correctamente.
Nota:
Las máquinas virtuales de una red virtual con un host bastión no necesitarán direcciones IP públicas. Bastion proporcionará la dirección IP pública y las máquinas virtuales usarán direcciones IP privadas para comunicarse dentro de la red. Es posible quitar las direcciones IP públicas de cualquier máquina virtual en redes virtuales hospedadas por Bastion. Para obtener más información, consulte Desasociar una dirección IP pública de una máquina virtual de Azure.
Revisión de los recursos implementados
Use la CLI de Azure, Azure PowerShell o Azure Portal para revisar los recursos implementados:
Interfaz de línea de comandos (CLI)
az resource list --resource-group TestRG
PowerShell
Get-AzResource -ResourceGroupName TestRG
Portal
En Azure Portal, busque la opción Grupos de recursos. En la página Grupos de recursos, seleccione TestRG de la lista de grupos de recursos.
En la página Información general de TestRG, revise todos los recursos que ha creado, incluida la red virtual, las dos máquinas virtuales y el host de Bastion.
Seleccione la red virtual VNet. En la página Información general de VNet, observe el espacio de direcciones definido de 10.0.0.0/16.
En el menú de la izquierda, seleccione Subredes. En la página Subredes, observe las subredes implementadas de backendSubnet y AzureBastionSubnet con los valores asignados de los archivos Bicep.