了解如何使用 Azure 门户、Azure CLI、Azure PowerShell、Azure 资源管理器(ARM)模板、Bicep模板和 Terraform 创建Azure 虚拟网络。 部署两个虚拟机和一个Azure Bastion主机,以测试同一虚拟网络中的虚拟机之间的连接。 Azure Bastion主机通过 SSL 直接在 Azure 门户中促进与虚拟机的安全无缝 RDP 和 SSH 连接。
登录到 Azure
使用Azure帐户登录到 Azure 门户。
创建虚拟网络和Azure Bastion主机
以下过程创建包含资源子网、Azure Bastion子网和 Bastion 主机的虚拟网络:
在门户中,搜索并选择“虚拟网络”。
在“虚拟网络”页面上,选择“+ 创建”。
在 Basics 选项卡上的 Create virtual network,输入或选择以下信息:
| 设置 |
价值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“新建”。
输入“test-rg”作为名称。
选择“确定”。 |
|
实例详细信息 |
|
| 名称 |
输入“vnet-1”。 |
| 区域 |
选择“(亚太)中国东部 2”。 |
在 Azure 门户中创建虚拟网络的 Basics 选项卡截图。
选择“下一步”,转到“安全性”选项卡。
在 Azure Bastion 部分中,选择 Enable Bastion。
Bastion 使用浏览器通过其专用 IP 地址通过安全外壳(SSH)或远程桌面协议(RDP)连接到虚拟网络中的 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。
在 虚拟机中,选择 + 创建,然后选择 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 地址的 VM 或处于内部基础版 Azure 负载均衡器后端池中的 VM 提供默认的出站访问 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将资源部署到虚拟网络中的子网。 使用 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 使用您的浏览器通过其专用 IP 地址,通过安全 Shell (SSH)或远程桌面协议(RDP)连接到虚拟网络中的虚拟机。 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创建虚拟机后,它会将输出返回到 PowerShell。
注释
在虚拟网络中使用 Bastion 主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用私有 IP 在网络中进行通信。 可以删除由 Bastion 托管的虚拟网络中任何虚拟机的公共 IP。 有关详细信息,请参阅 解除 Azure VM 的公共 IP 地址关联。
注释
Azure为未分配公共 IP 地址的 VM 或处于内部基础版 Azure 负载均衡器后端池中的 VM 提供默认的出站访问 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 使用您的浏览器,通过其专用 IP 地址,通过安全外壳(SSH)或远程桌面协议(RDP),连接到虚拟网络中的虚拟机。 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 地址的 VM 或处于内部基础版 Azure 负载均衡器后端池中的 VM 提供默认的出站访问 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资源:
部署模板
将资源管理器模板部署到Azure:
选择 部署到 Azure,以登录 Azure 并打开模板。 该模板创建一个包含两个子网的virtual network。
在门户的创建包含两个子网的虚拟网络页面中,输入或选择以下值:
- 资源组:选择“新建”,输入资源组名称“CreateVNetQS-rg”,然后选择“确定”。
-
虚拟网络名称:输入新虚拟网络的名称。
选择“查看 + 创建”,然后选择“创建”。
部署完成后,选择“转到资源”按钮,查看已部署的资源。
查看已部署的资源
探索使用虚拟网络创建的资源,通过浏览VNet1的设置窗格。
若要了解模板中虚拟网络的 JSON 语法和属性,请参阅 Microsoft。Network/virtualNetworks。
创建虚拟网络和虚拟机
本快速入门使用 Azure 资源管理器快速入门模板 中的 虚拟网络中的两个虚拟机 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 使用浏览器通过其专用 IP 地址通过安全外壳(SSH)或远程桌面协议(RDP)连接到虚拟网络中的虚拟机。 virtual machines不需要公共 IP 地址、客户端软件或特殊配置。 有关Azure Bastion的详细信息,请参阅 什么是 Azure Bastion?
注释
无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
使用 Azure 资源管理器快速入门模板 中的 Azure Bastion 即服务 Bicep 模板在虚拟网络中部署和配置 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门户查看已部署的资源:
CLI
az resource list --resource-group TestRG
PowerShell
Get-AzResource -ResourceGroupName TestRG
Portal
在 Azure 门户中,搜索并选择资源组。 在“资源组”页面上,从资源组列表中选择“TestRG”。
在 概述 页上,查看您在 TestRG 中创建的所有资源,包括虚拟网络、两个虚拟机和 Bastion 主机。
选择 VNet 虚拟网络。 在 VNet 的“概述”页上,留意所定义的地址空间“10.0.0.0/16”。
在左侧菜单中选择“子网”。 在 Subnets 页上,记录已部署的包含 Bicep 文件中分配值的 backendSubnet 和 AzureBastionSubnet 子网。