이 빠른 시작에서는 Azure Portal, Azure CLI, Azure PowerShell, Resource Manager 템플릿, Bicep 템플릿 및 Terraform을 사용하여 Azure VNet(Virtual Network)을 만드는 방법을 알아봅니다. 동일한 가상 네트워크에 있는 가상 머신 간의 연결을 테스트하기 위해 두 개의 가상 머신과 Azure Bastion 호스트가 배포됩니다. Azure Bastion 호스트는 SSL을 통해 Azure Portal에서 직접 가상 머신에 대한 안전하고 원활한 RDP 및 SSH 연결을 용이하게 합니다.
가상 네트워크는 Azure에서 개인 네트워크의 기본 구성 요소입니다. Azure Virtual Network를 사용하면 VM과 같은 Azure 리소스가 서로 및 인터넷과 안전하게 통신할 수 있습니다.
Azure에 로그인
Azure 계정을 사용하여 Azure Portal 에 로그인합니다.
가상 네트워크 및 Azure 베스천 호스트 만들기
다음 프로시저에서는 리소스 서브넷, Azure Bastion 서브넷 및 베스천 호스트가 포함된 가상 네트워크를 만듭니다.
포털에서 가상 네트워크를 검색하여 선택합니다.
가상 네트워크 페이지에서 + 만들기를 선택합니다.
가상 네트워크 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
가치 |
프로젝트 세부 정보 |
|
구독 |
구독을 선택합니다. |
리소스 그룹 |
새로 만들기를 선택합니다.
이름으로 test-rg를 입력합니다.
확인을 선택합니다. |
인스턴스 세부 정보 |
|
이름 |
vnet-1을 입력합니다. |
지역 |
미국 동부 2를 선택합니다. |
다음을 선택하여 보안 탭으로 이동합니다.
Azure Bastion 섹션에서 Azure Bastion 사용을 선택합니다.
Bastion은 브라우저를 사용하여 개인 IP 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. 자세한 내용은 Azure Bastion이란?을 참조하세요.
비고
시간당 가격은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정 및 SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다.
Azure Bastion에서 다음 정보를 입력하거나 선택합니다.
설정 |
가치 |
Azure Bastion 호스트 이름 |
bastion을 입력합니다. |
Azure Bastion 공용 IP 주소 |
공용 IP 주소 만들기를 선택합니다.
이름에 public-ip-bastion을 입력합니다.
확인을 선택합니다. |
다음을 선택하여 IP 주소 탭으로 이동합니다.
서브넷의 주소 공간 입력란에서 기본 서브넷을 선택합니다.
서브넷 편집에서 다음 정보를 입력하거나 선택합니다.
설정 |
가치 |
서브넷 목적 |
기본값인 기본값을 그대로 둡니다. |
이름 |
subnet-1을 입력합니다. |
IPv4 |
|
IPv4 주소 범위 |
기본값인 10.0.0.0/16은 그대로 둡니다. |
시작 주소 |
기본값인 10.0.0.0을 그대로 둡니다. |
크기 |
기본값인 /24(256개 주소)를 그대로 둡니다. |
저장을 선택합니다.
창 하단에서 검토 + 만들기를 선택합니다. 유효성 검사를 통과하면 만들기를 선택합니다.
가상 머신 만들기
다음 프로시저에서는 가상 네트워크에 vm-1 및 vm-2라는 두 개의 VM을 만듭니다.
포털에서 가상 머신을 검색하여 선택합니다.
가상 머신에서 + 만들기를 선택한 다음, Azure Virtual Machines를 선택합니다.
가상 머신 만들기의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
가치 |
프로젝트 세부 정보 |
|
구독 |
구독을 선택합니다. |
리소스 그룹 |
test-rg를 선택합니다. |
인스턴스 세부 정보 |
|
가상 머신 이름 |
vm-1을 입력합니다. |
지역 |
미국 동부 2를 선택합니다. |
가용성 옵션 |
인프라 중복이 필요하지 않습니다.를 선택합니다. |
보안 유형 |
기본값인 표준을 그대로 둡니다. |
이미지 |
Ubuntu Server 22.04 LTS - x64 Gen2를 선택합니다. |
VM 아키텍처 |
x64(기본값)를 그대로 둡니다. |
크기 |
크기를 선택합니다. |
관리자 계정 |
|
인증 유형 |
암호를 선택합니다. |
사용자 이름 |
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 베스천 호스트가 있는 가상 네트워크의 가상 머신에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. Bastion 호스트된 가상 네트워크의 모든 VM에서 공용 IP를 제거할 수 있습니다. 자세한 내용은 Azure VM에서 공용 IP 주소 연결 해제를 참조하세요.
비고
Azure는 공용 IP 주소가 할당되지 않았거나 내부 기본 Azure Load Balancer의 백 엔드 풀에 있는 VM에 대한 기본 아웃바운드 액세스 IP를 제공합니다. 기본 아웃바운드 액세스 IP 메커니즘은 구성할 수 없는 아웃바운드 IP 주소를 제공합니다.
다음 이벤트 중 하나가 발생하면 기본 아웃바운드 액세스 IP가 사용하지 않도록 설정됩니다.
- 공용 IP 주소가 VM에 할당됩니다.
- VM은 아웃바운드 규칙 유무에 관계없이 표준 Load Balancer의 백 엔드 풀에 배치됩니다.
-
Azure NAT Gateway 리소스는 VM의 서브넷에 할당됩니다.
유연한 오케스트레이션 모드에서 가상 머신 확장 집합을 사용하여 만드는 VM에는 기본 아웃바운드 액세스 권한이 없습니다.
Azure의 아웃바운드 연결에 대한 자세한 내용은 Azure의 기본 아웃바운드 액세스 및 아웃바운드 연결에 SNAT(원본 네트워크 주소 변환) 사용을 참조하세요.
리소스 그룹 만들기
New-AzResourceGroup을 사용하여 가상 네트워크를 호스트할 리소스 그룹을 만듭니다. 다음 코드를 실행하여 eastus2 Azure 지역에 test-rg라는 리소스 그룹을 만듭니다.
$rg = @{
Name = 'test-rg'
Location = 'eastus2'
}
New-AzResourceGroup @rg
가상 네트워크 만들기
New-AzVirtualNetwork를 사용하여 test-rg 리소스 그룹 및 eastus2 위치에 IP 주소 접두사가 10.0.0.0/16인 vnet-1이라는 가상 네트워크를 만듭니다.
$vnet = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
AddressPrefix = '10.0.0.0/16'
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Azure는 가상 네트워크 내의 서브넷에 리소스를 배포합니다.
Add-AzVirtualNetworkSubnetConfig를 사용하여 주소 접두사가 10.0.0.0/24인 subnet-1이라는 서브넷 구성을 만듭니다.
$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 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. Bastion에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.
시간당 가격은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정 및 SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다.
가상 네트워크에 대한 베스천 서브넷을 구성합니다. 이 서브넷은 Bastion 리소스 전용으로 예약되어 있으며 이름을 AzureBastionSubnet으로 지정해야 합니다.
$subnet = @{
Name = 'AzureBastionSubnet'
VirtualNetwork = $virtualNetwork
AddressPrefix = '10.0.1.0/26'
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
구성을 설정합니다.
$virtualNetwork | Set-AzVirtualNetwork
Bastion에 대한 공용 IP 주소를 만듭니다. 베스천 호스트는 공용 IP를 사용하여 포트 443을 통해 SSH 및 RDP에 액세스합니다.
$ip = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip'
Location = 'eastus2'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip
New-AzBastion 명령을 사용하여 AzureBastionSubnet에서 새 표준 SKU 베스천 호스트를 만듭니다.
$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이 가상 네트워크에 배포되는 동안 다음 섹션에서 VM을 만들 수 있습니다.
가상 머신 만들기
New-AzVM을 사용하여 가상 네트워크의 subnet-1 서브넷에 vm-1 및 vm-2라는 두 개의 VM을 만듭니다. 자격 증명을 묻는 메시지가 표시되면 VM의 사용자 이름과 암호를 입력합니다.
첫 번째 VM을 만들려면 다음 코드를 사용합니다.
# 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
두 번째 VM을 만들려면 다음 코드를 사용합니다.
# 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
팁 (조언)
다른 작업을 계속하는 동안 -AsJob
옵션을 사용하여 백그라운드에서 VM을 만들 수 있습니다. 예를 들어 New-AzVM @vm1 -AsJob
를 실행합니다. Azure가 백그라운드에서 VM을 만들기 시작하면 다음과 같은 출력이 표시됩니다.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running... AzureLongRun... Running True localhost New-AzVM
Azure에서 VM을 만드는 데 몇 분 정도 걸립니다. Azure에서 VM 만들기를 마치면 출력을 PowerShell로 반환합니다.
비고
Bastion 호스트가 있는 가상 네트워크의 VM에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. Bastion 호스트된 가상 네트워크의 모든 VM에서 공용 IP를 제거할 수 있습니다. 자세한 내용은 Azure VM에서 공용 IP 주소 연결 해제를 참조하세요.
비고
Azure는 공용 IP 주소가 할당되지 않았거나 내부 기본 Azure Load Balancer의 백 엔드 풀에 있는 VM에 대한 기본 아웃바운드 액세스 IP를 제공합니다. 기본 아웃바운드 액세스 IP 메커니즘은 구성할 수 없는 아웃바운드 IP 주소를 제공합니다.
다음 이벤트 중 하나가 발생하면 기본 아웃바운드 액세스 IP가 사용하지 않도록 설정됩니다.
- 공용 IP 주소가 VM에 할당됩니다.
- VM은 아웃바운드 규칙 유무에 관계없이 표준 Load Balancer의 백 엔드 풀에 배치됩니다.
-
Azure NAT Gateway 리소스는 VM의 서브넷에 할당됩니다.
유연한 오케스트레이션 모드에서 가상 머신 확장 집합을 사용하여 만드는 VM에는 기본 아웃바운드 액세스 권한이 없습니다.
Azure의 아웃바운드 연결에 대한 자세한 내용은 Azure의 기본 아웃바운드 액세스 및 아웃바운드 연결에 SNAT(원본 네트워크 주소 변환) 사용을 참조하세요.
리소스 그룹 만들기
az group create를 사용하여 가상 네트워크를 호스트할 리소스 그룹을 만듭니다. 다음 코드를 사용하여 eastus2 Azure 지역에 test-rg라는 리소스 그룹을 만듭니다.
az group create \
--name test-rg \
--___location eastus2
가상 네트워크 및 서브넷 만들기
az network vnet create를 사용하여 test-rg 리소스 그룹에 subnet-1이라는 서브넷이 있는 vnet-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(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다.
시간당 가격은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정 및 SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다. Bastion에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.
az network vnet subnet create를 사용하여 가상 네트워크용 베스천 서브넷을 만듭니다. 이 서브넷은 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 주소는 인터넷에서 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 eastus2 \
--zone 1 2 3
az network bastion create를 사용하여 가상 네트워크용 AzureBastionSubnet에 베스천 호스트를 만듭니다.
az network bastion create \
--name bastion \
--public-ip-address public-ip \
--resource-group test-rg \
--vnet-name vnet-1 \
--___location eastus2
Bastion 리소스를 배포하는 데 약 10분 정도 걸립니다. Bastion이 가상 네트워크에 배포되는 동안 다음 섹션에서 VM을 만들 수 있습니다.
가상 머신 만들기
az vm create를 사용하여 가상 네트워크의 subnet-1 서브넷에 vm-1 및 vm-2라는 두 개의 VM을 만듭니다. 자격 증명을 입력하라는 메시지가 표시되면 VM에 대한 사용자 이름 및 암호를 입력합니다.
첫 번째 VM을 만들려면 다음 명령을 사용합니다.
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-1 \
--image Ubuntu2204 \
--public-ip-address ""
두 번째 VM을 만들려면 다음 명령을 사용합니다.
az vm create \
--resource-group test-rg \
--admin-username azureuser \
--authentication-type password \
--name vm-2 \
--image Ubuntu2204 \
--public-ip-address ""
팁 (조언)
다른 작업을 계속하는 동안 --no-wait
옵션을 사용하여 백그라운드에서 VM을 만들 수도 있습니다.
VM을 만드는 데 몇 분이 걸릴 수 있습니다. Azure가 각 VM을 만든 후 Azure CLI는 다음 메시지와 유사한 출력을 반환합니다.
{
"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": ""
}
비고
Bastion 호스트가 있는 가상 네트워크의 VM에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. Bastion 호스트된 가상 네트워크의 모든 VM에서 공용 IP를 제거할 수 있습니다. 자세한 내용은 Azure VM에서 공용 IP 주소 연결 해제를 참조하세요.
비고
Azure는 공용 IP 주소가 할당되지 않았거나 내부 기본 Azure Load Balancer의 백 엔드 풀에 있는 VM에 대한 기본 아웃바운드 액세스 IP를 제공합니다. 기본 아웃바운드 액세스 IP 메커니즘은 구성할 수 없는 아웃바운드 IP 주소를 제공합니다.
다음 이벤트 중 하나가 발생하면 기본 아웃바운드 액세스 IP가 사용하지 않도록 설정됩니다.
- 공용 IP 주소가 VM에 할당됩니다.
- VM은 아웃바운드 규칙 유무에 관계없이 표준 Load Balancer의 백 엔드 풀에 배치됩니다.
-
Azure NAT Gateway 리소스는 VM의 서브넷에 할당됩니다.
유연한 오케스트레이션 모드에서 가상 머신 확장 집합을 사용하여 만드는 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에 Resource Manager 템플릿 배포:
Azure에 배포를 선택하여 Azure에 로그인하고 템플릿을 엽니다. 템플릿은 두 개의 서브넷이 있는 가상 네트워크를 만듭니다.
포털의 두 개의 서브넷이 있는 Virtual Network 만들기 페이지에서 다음 값을 입력하거나 선택합니다.
-
리소스 그룹: 새로 만들기를 선택하고 리소스 그룹 이름으로 CreateVNetQS-rg를 입력한 다음 확인을 선택합니다.
-
가상 네트워크 이름: 새 가상 네트워크의 이름을 입력합니다.
검토 및 생성를 선택한 후 생성를 선택합니다.
배포가 완료되면 리소스로 이동 단추를 선택하여 배포한 리소스를 검토합니다.
배포된 리소스 검토
VNet1의 설정 창을 탐색하여 가상 네트워크로 만든 리소스를 살펴봅니다.
템플릿에서 가상 네트워크의 JSON 구문 및 속성에 대해 알아보려면 Microsoft.Network/virtualNetworks를 참조하세요.
가상 네트워크 및 VM 만들기
이 빠른 시작에서는 Azure Resource Manager 빠른 시작 템플릿의 VNET의 두 VM Bicep 템플릿을 사용하여 가상 네트워크, 리소스 서브넷 및 VM을 만듭니다. 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 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
배포가 완료되면 배포가 성공했음을 나타내는 메시지가 표시됩니다.
Azure Bastion 배포
Bastion은 브라우저를 사용하여 개인 IP 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. Bastion에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.
비고
시간당 가격은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정 및 SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다.
Azure Resource Manager 빠른 시작 템플릿의 Azure Bastion as a Service 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 호스트가 있는 가상 네트워크의 VM에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. Bastion 호스트된 가상 네트워크의 모든 VM에서 공용 IP를 제거할 수 있습니다. 자세한 내용은 Azure VM에서 공용 IP 주소 연결 해제를 참조하세요.
배포된 리소스 검토
Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 배포된 리소스를 검토합니다.
명령 줄 인터페이스 (CLI)
az resource list --resource-group TestRG
PowerShell
Get-AzResource -ResourceGroupName TestRG
입구
Azure Portal에서 리소스 그룹을 검색하여 선택합니다.
리소스 그룹 페이지의 리소스 그룹 목록에서 TestRG를 선택합니다.
TestRG의 개요 페이지에서 가상 네트워크, 두 VM 및 Bastion 호스트를 포함하여 만든 모든 리소스를 검토합니다.
VNet 가상 네트워크를 선택합니다.
VNet의 개요 페이지에서 정의된 주소 공간 10.0.0.0/16을 확인합니다.
왼쪽 메뉴에서 서브넷을 선택합니다.
서브넷 페이지에서, Bicep 파일에서 할당된 값이 있는 backendSubnet 및 AzureBastionSubnet의 배포된 서브넷을 확인합니다.