了解如何使用 Azure portal、Azure CLI、Azure PowerShell、Azure Resource Manager (ARM) 模板、Bicep 模板和 Terraform 创建Azure Virtual Network(VNet)。 部署了两个虚拟机和一个Azure Bastion主机,用于测试同一虚拟网络中虚拟机之间的连接。 Azure Bastion 主机通过 SSL 直接在 Azure 门户中与虚拟机建立安全无缝的 RDP 和 SSH 连接。
virtual network是Azure中专用网络的基本构建基块。 Azure Virtual Network使Azure资源(如虚拟机)能够安全地相互通信以及访问 Internet。
登录到 Azure
使用Azure帐户登录到 Azure portal。
创建虚拟网络和Azure堡垒主机
以下过程将创建一个具有资源子网、Azure Bastion 子网和 Bastion 主机的虚拟网络:
在门户中,搜索并选择“虚拟网络”。
在“虚拟网络”页面上,选择“+ 创建”。
在 Basics 选项卡上的 Create virtual network,输入或选择以下信息:
| 设置 |
价值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“新建”。
输入“test-rg”作为名称。
选择“确定”。 |
|
实例详细信息 |
|
| 名称 |
输入“vnet-1”。 |
| 区域 |
选择“(亚太)中国东部 2”。 |
选择“下一步”,转到“安全性”选项卡。
在 Azure Bastion 部分中,选择 Enable Bastion。
Bastion 使用浏览器通过安全外壳(SSH)或远程桌面协议(RDP)及其专用 IP 地址连接到虚拟网络中的 VM。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关详细信息,请参阅 什么是 Azure Bastion?。
注释
无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
在 Azure Bastion 中,输入或选择以下信息:
| 设置 |
价值 |
| Azure Bastion主机名 |
输入 堡垒。 |
| Azure Bastion公共 IP 地址 |
选择“创建公共 IP 地址”。
在名称中输入 public-ip-bastion。
选择“确定”。 |
选择下一步,转到IP 地址选项卡。
在“子网”的地址空间框中,选择“默认”子网。
在编辑子网中,输入或选择以下信息:
| 设置 |
价值 |
|
子网详细信息 |
|
| 子网模板 |
保留默认值“默认”。 |
| 名称 |
输入subnet-1。 |
| 起始地址 |
保留默认值“10.0.0.0”。 |
| 子网大小 |
保留默认值“/24 (256 个地址)”。 |
选择“保存”。
在窗口底部选择查看 + 创建。 验证通过后,选择“创建”。
创建虚拟机
以下过程在virtual network中创建两个名为 vm-1 和 vm-2 的 VM:
在门户中,搜索并选择Virtual machines。
在 Virtual machines 中,选择+ 创建,然后选择Azure虚拟机。
在“创建虚拟机”的“基本信息”选项卡上,输入或选择以下信息:
| 设置 |
价值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择 test-rg。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入“vm-1”。 |
| 区域 |
选择“中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
保留默认值标准。 |
| 图像 |
选择“Ubuntu Server 22.04 LTS - Gen2”。 |
| 尺寸 |
请选择尺寸。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择密码。 |
| 用户名 |
输入“azureuser”。 |
| 密码 |
输入密码。 |
| 确认密码 |
重新输入密码。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择无。 |
选择“网络”选项卡。输入或选择以下信息:
| 设置 |
价值 |
|
网络接口 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-1 (10.0.0.0/24)”。 |
| 公网 IP |
选择无。 |
| NIC 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择“新建”。
在“名称”中输入“nsg-1”。
将其余字段保留默认设置,然后选择“确定”。 |
将其余设置保留为默认值,然后选择“查看 + 创建”。
检查设置,然后选择“创建”。
等待第一台虚拟机部署,然后重复前面的步骤,以使用以下设置创建第二台虚拟机:
| 设置 |
价值 |
| 虚拟机名称 |
输入“vm-2”。 |
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-1 (10.0.0.0/24)”。 |
| 公网 IP |
选择无。 |
| NIC 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择 nsg-1。 |
注释
具有 Azure Bastion 主机的虚拟网络中的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从 Bastion 托管的虚拟网络的任何虚拟机中删除公共 IP。 **
有关详细信息,请参阅 解除 Azure VM 的公共 IP 地址关联。
注释
Azure为未分配公共 IP 地址的虚拟机,或者位于内部基本 Azure 负载均衡器后端池中的虚拟机,提供默认的出站访问 IP。 默认出站访问 IP 机制提供一个无法配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
在灵活协调模式下使用虚拟机规模集创建的 VM 没有默认的出站访问。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 默认出站访问 和 使用源网络地址转换(SNAT)进行出站连接。
创建资源组
使用 New-AzResourceGroup 创建用于托管virtual network的资源组。 运行以下代码,在 chinanorth3 Azure 区域中创建名为 test-rg 的资源组:
$rg = @{
Name = 'test-rg'
Location = 'chinanorth3'
}
New-AzResourceGroup @rg
创建虚拟网络
使用New-AzVirtualNetwork 创建一个名为vnet-1的虚拟网络,该网络在test-rg资源组和chinanorth3位置中,IP地址前缀为10.0.0.0/16。
$vnet = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
Location = 'chinanorth3'
AddressPrefix = '10.0.0.0/16'
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Azure将资源部署到virtual network中的子网。 使用 Add-AzVirtualNetworkSubnetConfig 创建名为 subnet-1 的子网 配置,地址前缀 为 10.0.0.0/24:
$subnet = @{
Name = 'subnet-1'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.0.0/24'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
使用 Set-AzVirtualNetwork 将子网配置关联到虚拟网络:
$virtualNetwork | Set-AzVirtualNetwork
部署Azure Bastion
Azure Bastion 使用您的浏览器,通过安全外壳协议(SSH)或远程桌面协议(RDP),利用其专用 IP 地址连接到虚拟网络中的虚拟机。 virtual machines不需要公共 IP 地址、客户端软件或特殊配置。 有关Azure Bastion的详细信息,请参阅 什么是 Azure Bastion?。
无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
为您的虚拟网络配置 Bastion 子网。 此子网专用于 Bastion 资源,必须命名为 AzureBastionSubnet。
$subnet = @{
Name = 'AzureBastionSubnet'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.1.0/26'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
设置配置:
$virtualNetwork | Set-AzVirtualNetwork
为 Bastion 创建一个公共 IP 地址。 Bastion 主机通过公共 IP 和 443 端口访问 SSH 和 RDP。
$ip = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip'
Location = 'chinanorth3'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip
使用 New-AzBastion 命令在 AzureBastionSubnet 中创建新的基本 SKU Bastion 主机:
$bastion = @{
Name = 'bastion'
ResourceGroupName = 'test-rg'
PublicIpAddressRgName = 'test-rg'
PublicIpAddressName = 'public-ip'
VirtualNetworkRgName = 'test-rg'
VirtualNetworkName = 'vnet-1'
Sku = 'Basic'
}
New-AzBastion @bastion
部署 Bastion 资源大约需要 10 分钟。 在 Bastion 主机部署到虚拟网络时,可以在下一部分中创建虚拟机。
创建虚拟机
创建第一个虚拟机
使用 New-AzVM 创建虚拟机。 以下示例在 vnet-1 虚拟网络中创建名为 vm-1 的虚拟机。
# Create a credential object
$cred = Get-Credential
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-1"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-1-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
创建第二个虚拟机
# Create a credential object
$cred = Get-Credential
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-2"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-2-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
Azure 创建虚拟机需要几分钟时间。 Azure完成创建virtual machines后,它将输出返回到 PowerShell。
注释
在虚拟网络中使用 Bastion 主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用私有 IP 在网络中进行通信。 可以删除由 Bastion 托管的虚拟网络中任何虚拟机的公共 IP。 **
有关详细信息,请参阅 解除 Azure VM 的公共 IP 地址关联。
注释
Azure为未分配公共 IP 地址的虚拟机,或者位于内部基本 Azure 负载均衡器后端池中的虚拟机,提供默认的出站访问 IP。 默认出站访问 IP 机制提供一个无法配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
在灵活协调模式下使用虚拟机规模集创建的 VM 没有默认的出站访问。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 默认出站访问 和 使用源网络地址转换(SNAT)进行出站连接。
创建资源组
使用 az group create 创建用于托管virtual network的资源组。 使用以下代码在 chinanorth3 Azure 区域中创建名为 test-rg 资源组:
az group create \
--name test-rg \
--location chinanorth3
创建虚拟网络和子网
使用 az network vnet create 在 test-rg 资源组中创建一个名为 vnet-1 的虚拟网络,并在其中创建一个名为 subnet-1 的子网:
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
部署Azure Bastion
Azure Bastion 使用您的浏览器,通过安全外壳协议(SSH)或远程桌面协议(RDP),利用其专用 IP 地址连接到虚拟网络中的虚拟机。 virtual machines不需要公共 IP 地址、客户端软件或特殊配置。
无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
有关 Bastion 的详细信息,请参阅 什么是 Azure Bastion?。
使用 az network vnet subnet create 为你的虚拟网络创建一个 Bastion 子网。 此子网专用于 Bastion 资源,必须命名为 AzureBastionSubnet。
az network vnet subnet create \
--name AzureBastionSubnet \
--resource-group test-rg \
--vnet-name vnet-1 \
--address-prefix 10.0.1.0/26
为 Bastion 创建一个公共 IP 地址。 此 IP 地址用于从 Internet 连接到 Bastion 主机。 使用az network public-ip create 在test-rg资源组中创建名为public-ip的公共 IP 地址:
az network public-ip create \
--resource-group test-rg \
--name public-ip \
--sku Standard \
--location chinanorth3 \
--zone 1 2 3
使用 az network bastion create 在 AzureBastionSubnet 中为你的虚拟网络创建 Bastion 主机:
az network bastion create \
--name bastion \
--public-ip-address public-ip \
--resource-group test-rg \
--vnet-name vnet-1 \
--location chinanorth3
部署 Bastion 资源大约需要 10 分钟。 在 Bastion 主机部署到虚拟网络时,可以在下一部分中创建虚拟机。
创建虚拟机
创建第一个虚拟机
使用 az vm create 创建虚拟机。 以下示例在 vnet-1 虚拟网络中创建名为 vm-1 的虚拟机。 如果默认密钥位置中尚不存在 SSH 密钥,该命令会创建它们。 该 --no-wait 选项在后台创建虚拟机,以便可以继续执行下一步。
az vm create \
--resource-group test-rg \
--name vm-1 \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--public-ip-address "" \
--admin-username azureuser \
--generate-ssh-keys \
--no-wait
创建第二个虚拟机
在 vnet-1 虚拟网络中创建名为 vm-2 的虚拟机。
az vm create \
--resource-group test-rg \
--name vm-2 \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--public-ip-address "" \
--admin-username azureuser \
--generate-ssh-keys
创建虚拟机需花费几分钟的时间。
注释
在虚拟网络中使用 Bastion 主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用私有 IP 在网络中进行通信。 可以删除由 Bastion 托管的虚拟网络中任何虚拟机的公共 IP。 **
有关详细信息,请参阅 解除 Azure VM 的公共 IP 地址关联。
注释
Azure为未分配公共 IP 地址的虚拟机,或者位于内部基本 Azure 负载均衡器后端池中的虚拟机,提供默认的出站访问 IP。 默认出站访问 IP 机制提供一个无法配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
在灵活协调模式下使用虚拟机规模集创建的 VM 没有默认的出站访问。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 默认出站访问 和 使用源网络地址转换(SNAT)进行出站连接。
查看模板
在本快速入门中使用的模板来自 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')]"
}
}
]
}
}
]
}
该模板定义以下Azure资源:
部署模板
将Resource Manager模板部署到Azure:
选择 部署到 Azure 登录到 Azure 并打开模板。 该模板创建一个包含两个子网的virtual network。
在门户中的 创建一个包含两个子网的虚拟网络页上,输入或选择以下值:
- 资源组:选择“新建”,输入资源组名称“CreateVNetQS-rg”,然后选择“确定”。
-
虚拟网络名称:输入新虚拟网络的名称。
选择“查看 + 创建”,然后选择“创建”。
部署完成后,选择“转到资源”按钮,查看已部署的资源。
查看已部署的资源
探索使用虚拟网络创建的资源,通过浏览VNet1的设置窗格。
若要了解模板中virtual network的 JSON 语法和属性,请参阅 Microsoft.Network/virtualNetworks。
创建虚拟网络和虚拟机
本快速入门使用 Azure 资源管理器快速入门模板 中的 两个 VMs 在 VNET 中 Bicep 模板来创建虚拟网络、资源子网和虚拟机。 Bicep 模板定义以下Azure资源:
查阅 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
部署 Bicep 模板
将 Bicep 文件保存到本地计算机作为 main.bicep。
使用Azure CLI或Azure PowerShell部署 Bicep 文件:
CLI
az group create \
--name TestRG \
--location chinanorth3
az deployment group create \
--resource-group TestRG \
--template-file main.bicep
PowerShell
$rgParams = @{
Name = 'TestRG'
Location = 'chinanorth3'
}
New-AzResourceGroup @rgParams
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'main.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
部署完成后,一条消息指示部署成功。
部署Azure Bastion
Bastion 使用浏览器通过SSH(安全外壳)或RDP(远程桌面协议),利用其专用IP地址连接到虚拟网络中的虚拟机。 virtual machines不需要公共 IP 地址、客户端软件或特殊配置。 有关Azure Bastion的详细信息,请参阅 什么是 Azure Bastion?
注释
无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
使用 Azure Bastion 即服务的Azure Resource Manager 快速入门模板在您的虚拟网络中部署和配置 Bastion。 此 Bicep 模板定义了以下Azure资源:
查阅 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
}
}
}
]
}
}
部署 Bicep 模板
将 Bicep 文件保存到本地计算机作为 bastion.bicep。
使用文本或代码编辑器在文件中进行以下更改:
- 第 2 行:将
param vnetName string 从 'vnet01' 更改为 'VNet'。
- 第 5 行:将
param vnetIpPrefix string 从 '10.1.0.0/16' 更改为 '10.0.0.0/16'。
- 第 12 行:将
param vnetNewOrExisting string 从 'new' 更改为 'existing'。
- 第 15 行:将
param bastionSubnetIpPrefix string 从 '10.1.1.0/26' 更改为 '10.0.1.0/26'。
- 第 18 行:将
param bastionHostName string 更改为 param bastionHostName = 'VNet-bastion'。
更改后,Bicep 文件的前 18 行应如下示例所示:
@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'
保存 bastion.bicep 文件。
使用Azure CLI或Azure PowerShell部署 Bicep 文件:
CLI
az deployment group create \
--resource-group TestRG \
--template-file bastion.bicep
PowerShell
$deploymentParams = @{
ResourceGroupName = 'TestRG'
TemplateFile = 'bastion.bicep'
}
New-AzResourceGroupDeployment @deploymentParams
部署完成后,一条消息指示部署成功。
注释
在虚拟网络中使用 Bastion 主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用私有 IP 在网络中进行通信。 可以删除由 Bastion 托管的虚拟网络中任何虚拟机的公共 IP。 **
有关详细信息,请参阅 解除 Azure VM 的公共 IP 地址关联。
查看已部署的资源
使用Azure CLI、Azure PowerShell或Azure portal查看已部署的资源:
CLI
az resource list --resource-group TestRG
PowerShell
Get-AzResource -ResourceGroupName TestRG
Portal
在 Azure portal 中,搜索并选择资源组。 在“资源组”页面上,从资源组列表中选择“TestRG”。
在 概述 页上,查看您在 TestRG 中创建的所有资源,包括虚拟网络、两个虚拟机和 Bastion 主机。
选择 VNet 虚拟网络。 在 VNet 的“概述”页上,留意所定义的地址空间“10.0.0.0/16”。
在左侧菜单中选择“子网”。 在“子网”页上,注意所部署的子网“backendSubnet”和“AzureBastionSubnet”,以及从 Bicep 文件中分配的值。