빠른 시작: Azure PowerShell을 사용하여 가상 네트워크 만들기

이 빠른 시작에서는 Azure PowerShell을 사용하여 가상 네트워크를 만드는 방법을 보여 줍니다. 그런 다음 네트워크에 두 개의 VM(가상 머신)을 만들고, 인터넷에서 VM에 안전하게 연결하고, VM 간의 프라이빗 통신을 시작합니다.

가상 네트워크는 Azure에서 개인 네트워크의 기본 구성 요소입니다. Azure Virtual Network를 통해 VM과 같은 Azure 리소스가 상호 간 및 인터넷과 안전하게 통신할 수 있습니다.

가상 네트워크 빠른 시작에서 만들어진 리소스의 다이어그램.

필수 조건

  • 활성 구독이 있는 Azure 계정. 무료로 계정을 만들 수 있습니다.

  • Azure Cloud Shell 또는 Azure PowerShell.

    이 빠른 시작의 단계에서는 Azure Cloud Shell에서 대화형으로 Azure PowerShell cmdlet을 실행합니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloudshell 열기를 선택합니다. 복사를 선택하여 코드를 복사한 다음, 복사한 코드를 Cloud Shell에 붙여넣어 실행합니다. Azure Portal 내에서 Cloud Shell을 실행할 수 있습니다.

    Azure PowerShell을 로컬에 설치하여 cmdlet을 실행할 수도 있습니다. 이 문서에서 설명할 단계를 실행하기 위해서는 Azure PowerShell 모듈 버전 5.4.1 또는 그 이후 버전이 필요합니다. 설치되어 있는 버전을 확인하려면 Get-Module -ListAvailable Az을 실행합니다. 업그레이드가 필요한 경우 Azure PowerShell 모듈 업데이트를 참조하세요.

    PowerShell을 로컬에서 실행하는 경우 Connect-AzAccount를 실행하여 Azure에 연결합니다.

리소스 그룹 만들기

New-AzResourceGroup을 사용하여 가상 네트워크를 호스트할 리소스 그룹을 만듭니다. 다음 코드를 실행하여 eastus2 Azure 지역에 test-rg라는 리소스 그룹을 만듭니다.

$rg = @{
    Name = 'test-rg'
    Location = 'eastus2'
}
New-AzResourceGroup @rg

가상 네트워크 만들기

  1. New-AzVirtualNetwork를 사용하여 test-rg 리소스 그룹 및 eastus2 위치에 IP 주소 접두사가 10.0.0.0/16vnet-1이라는 가상 네트워크를 만듭니다.

    $vnet = @{
        Name = 'vnet-1'
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        AddressPrefix = '10.0.0.0/16'
    }
    $virtualNetwork = New-AzVirtualNetwork @vnet
    
  2. Azure는 가상 네트워크 내의 서브넷에 리소스를 배포합니다. Add-AzVirtualNetworkSubnetConfig를 사용하여 주소 접두사가 10.0.0.0/24subnet-1이라는 서브넷 구성을 만듭니다.

    $subnet = @{
        Name = 'subnet-1'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.0.0/24'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  3. Set-AzVirtualNetwork를 사용하여 서브넷 구성을 가상 네트워크에 연결합니다.

    $virtualNetwork | Set-AzVirtualNetwork
    

Azure Bastion 배포

Azure Bastion은 브라우저를 사용하여 개인 IP 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. Bastion에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.

시간당 가격 책정은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다.

  1. 가상 네트워크에 대한 베스천 서브넷을 구성합니다. 이 서브넷은 Bastion 리소스 전용으로 예약되어 있으며 이름을 AzureBastionSubnet으로 지정해야 합니다.

    $subnet = @{
        Name = 'AzureBastionSubnet'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.1.0/26'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  2. 구성을 설정합니다.

    $virtualNetwork | Set-AzVirtualNetwork
    
  3. 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
    
  4. 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-1vm-2라는 두 개의 VM을 만듭니다. 자격 증명을 묻는 메시지가 표시되면 VM의 사용자 이름과 암호를 입력합니다.

  1. 첫 번째 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
    
  2. 두 번째 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(원본 네트워크 주소 변환) 사용을 참조하세요.

가상 머신에 연결

  1. 포털에서 가상 머신을 검색하여 선택합니다.

  2. 가상 머신 페이지에서 vm-1을 선택합니다.

  3. vm-1에 대한 개요 정보에서 연결을 선택합니다.

  4. 가상 머신에 연결 페이지에서 Bastion 탭을 선택합니다.

  5. Bastion 사용을 선택합니다.

  6. VM을 만들 때 만든 사용자 이름과 암호를 입력한 다음 연결을 선택합니다.

VM 간 통신 시작

  1. vm-1에 대한 bash 프롬프트에서 ping -c 4 vm-2를 입력합니다.

    다음 메시지와 유사한 회신이 표시됩니다.

    azureuser@vm-1:~$ ping -c 4 vm-2
    PING vm-2.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.cloudapp.net (10.0.0.5) 56(84) bytes of data.
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=1 ttl=64 time=1.83 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=2 ttl=64 time=0.987 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=3 ttl=64 time=0.864 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=4 ttl=64 time=0.890 ms
    
  2. vm-1에 대한 Bastion 연결을 닫습니다.

  3. 가상 머신에 연결의 단계를 반복하여 vm-2에 연결합니다.

  4. vm-2에 대한 bash 프롬프트에서 ping -c 4 vm-1을 입력합니다.

    다음 메시지와 유사한 회신이 표시됩니다.

    azureuser@vm-2:~$ ping -c 4 vm-1
    PING vm-1.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.cloudapp.net (10.0.0.4) 56(84) bytes of data.
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=1 ttl=64 time=0.695 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=2 ttl=64 time=0.896 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=3 ttl=64 time=3.43 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=4 ttl=64 time=0.780 ms
    
  5. vm-2에 대한 Bastion 연결을 닫습니다.

리소스 정리

가상 네트워크 및 VM 작업이 끝나면 Remove-AzResourceGroup을 사용하여 리소스 그룹과 모든 해당 리소스를 제거합니다.

Remove-AzResourceGroup -Name 'test-rg' -Force

다음 단계

이 빠른 시작에서는 두 개의 VM이 포함된 기본 서브넷이 있는 가상 네트워크를 만들었습니다. Azure Bastion을 배포하고 이를 사용하여 VM에 연결하고 VM 간에 안전하게 통신했습니다. 가상 네트워크 설정에 대한 자세한 내용은 가상 네트워크 만들기, 변경 또는 삭제를 참조하세요.