가상 네트워크 서비스 엔드포인트를 사용하면 일부 Azure 서비스 리소스에 대한 네트워크 액세스를 가상 네트워크 서브넷으로 제한할 수 있습니다. 리소스에 대한 인터넷 액세스를 제거할 수도 있습니다. 서비스 엔드포인트는 가상 네트워크에서 지원되는 Azure 서비스로의 직접 연결을 제공하므로 가상 네트워크의 프라이빗 주소 공간을 사용하여 Azure 서비스에 액세스할 수 있습니다. 서비스 엔드포인트를 통해 Azure 리소스에 도달하는 트래픽은 항상 Microsoft Azure 백본 네트워크에 유지됩니다.
이 자습서에서는 다음 작업 방법을 알아봅니다.
- 하나의 서브넷이 있는 가상 네트워크 만들기
- 서브넷을 추가하고 서비스 엔드포인트를 사용하도록 설정
- Azure 리소스를 만들고 서브넷에서만 네트워크 액세스 허용
- 각 서브넷에 VM(가상 머신) 배포
- 서브넷에서 리소스에 대한 액세스 확인
- 서브넷 및 인터넷에서 리소스에 대한 액세스가 거부되는지 확인
필수 구성 요소
Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Azure Cloud Shell
Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.
Azure Cloud Shell을 시작하려면 다음을 수행합니다.
옵션 |
예/링크 |
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다.
시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. |
|
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. |
|
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. |
|
Azure Cloud Shell을 사용하려면:
Cloud Shell을 시작합니다.
코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.
Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.
Enter를 선택하여 코드 또는 명령을 실행합니다.
PowerShell을 로컬로 설치하고 사용하도록 선택하는 경우, 이 문서에는 Azure PowerShell 모듈 버전 1.0.0 이상이 필요합니다. 설치되어 있는 버전을 확인하려면 Get-Module -ListAvailable Az
을 실행합니다. 업그레이드해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요. 또한 PowerShell을 로컬로 실행하는 경우 Connect-AzAccount
를 실행하여 Azure와 연결해야 합니다.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- 이 문서에는 Azure CLI 버전 2.0.28 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
서비스 엔드포인트 사용
가상 네트워크 및 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 주소 탭으로 이동합니다.
서브넷의 주소 공간 입력란에서 기본 서브넷을 선택합니다.
서브넷 편집에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
서브넷 목적 |
기본값인 Default를 그대로 둡니다. |
이름 |
subnet-1을 입력합니다. |
IPv4 |
|
IPv4 주소 범위 |
기본값인 10.0.0.0/16은 그대로 둡니다. |
시작 주소 |
기본값인 10.0.0.0을 그대로 둡니다. |
크기 |
기본값인 /24(256개 주소)를 그대로 둡니다. |
저장을 선택합니다.
창 하단에서 검토 + 만들기를 선택합니다. 유효성 검사를 통과하면 만들기를 선택합니다.
서비스 엔드포인트는 서비스 단위, 서브넷 단위로 활성화됩니다.
포털 페이지 상단의 검색 상자에서 가상 네트워크를 검색합니다. 검색 결과에서 가상 네트워크를 선택합니다.
가상 네트워크에서 vnet-1을 선택합니다.
vnet-1의 설정 섹션에서 서브넷을 선택합니다.
+ 서브넷을 선택합니다.
서브넷 추가 페이지에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
이름 |
서브넷-프라이빗 |
서브넷 주소 범위 |
기본값인 10.0.2.0/24를 그대로 둡니다. |
서비스 엔드포인트 |
|
서비스 |
Microsoft.Storage를 선택합니다. |
저장을 선택합니다.
주의
리소스를 포함한 기존 서브넷에 서비스 엔드포인트를 사용하도록 설정하기 전에 서브넷 설정 변경을 참조하세요.
가상 네트워크 만들기
가상 네트워크를 만들기 전에 가상 네트워크에 대한 리소스 그룹과 이 아티클에서 만든 다른 모든 리소스를 만들어야 합니다.
New-AzResourceGroup을 사용하여 리소스 그룹을 만듭니다. 다음 예에서는 test-rg라는 리소스 그룹을 만듭니다.
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
New-AzVirtualNetwork를 사용하여 가상 네트워크를 만듭니다. 다음 예에서는 주소 접두사가 10.0.0.0/16인 vnet-1이라는 가상 네트워크를 만듭니다.
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
New-AzVirtualNetworkSubnetConfig를 사용하여 서브넷 구성을 만듭니다. 다음 예에서는 subnet-public이라는 이름의 서브넷에 대한 서브넷 구성을 만듭니다.
$subpub = @{
Name = "subnet-public"
AddressPrefix = "10.0.0.0/24"
VirtualNetwork = $virtualNetwork
}
$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig @subpub
Set-AzVirtualNetwork를 사용하여 가상 네트워크에 서브넷 구성을 작성해 가상 네트워크에 서브넷을 만듭니다.
$virtualNetwork | Set-AzVirtualNetwork
가상 네트워크에 다른 서브넷을 만듭니다. 이 예에서 Microsoft.Storage에 대한 서비스 엔드포인트를 사용하여 subnet-private라는 서브넷이 만들어집니다.
$subpriv = @{
Name = "subnet-private"
AddressPrefix = "10.0.2.0/24"
VirtualNetwork = $virtualNetwork
ServiceEndpoint = "Microsoft.Storage"
}
$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig @subpriv
$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 = 'westus2'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip
New-AzBastion 명령을 사용하여 AzureBastionSubnet에서 새 표준 베스천 호스트를 만듭니다.
$bastion = @{
Name = 'bastion'
ResourceGroupName = 'test-rg'
PublicIpAddressRgName = 'test-rg'
PublicIpAddressName = 'public-ip'
VirtualNetworkRgName = 'test-rg'
VirtualNetworkName = 'vnet-1'
Sku = 'Basic'
}
New-AzBastion @bastion -AsJob
Bastion 리소스를 배포하는 데 약 10분 정도 걸립니다. Bastion이 가상 네트워크에 배포되는 동안 다음 섹션에서 VM을 만들 수 있습니다.
가상 네트워크 만들기
가상 네트워크를 만들기 전에 가상 네트워크에 대한 리소스 그룹과 이 아티클에서 만든 다른 모든 리소스를 만들어야 합니다.
az group create를 사용하여 리소스 그룹을 만듭니다. 다음 예에서는 westus2 위치에 test-rg라는 리소스 그룹을 만듭니다.
az group create \
--name test-rg \
--___location westus2
az network vnet create를 사용하여 하나의 서브넷이 있는 가상 네트워크를 만듭니다.
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-public \
--subnet-prefix 10.0.0.0/24
서비스 엔드포인트를 지원하는 서비스에 대해서만 서비스 엔드포인트를 사용하도록 설정할 수 있습니다.
az network vnet list-endpoint-services를 사용하여 Azure 위치에서 사용할 수 있는 서비스 엔드포인트 지원 서비스를 확인합니다. 다음 예에서는 westus2 지역에서 사용 가능한 서비스 엔드포인트 지원 서비스 목록을 반환합니다. 반환되는 서비스 목록은 시간이 지나면서 서비스 엔드포인트를 사용할 수 있는 Azure 서비스가 증가함에 따라 확장됩니다.
az network vnet list-endpoint-services \
--___location westus2 \
--out table
az network vnet subnet create를 사용하여 가상 네트워크에 다른 서브넷을 만듭니다. 이 예에서 Microsoft.Storage
에 대한 서비스 엔드포인트가 서브넷에 대해 만들어집니다.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-private \
--address-prefix 10.0.1.0/24 \
--service-endpoints Microsoft.Storage
서브넷에 대한 네트워크 액세스 제한
기본적으로 서브넷의 모든 가상 머신 인스턴스는 모든 리소스와 통신할 수 있습니다. 네트워크 보안 그룹을 만들고 서브넷에 연결하여 서브넷에 있는 모든 리소스 간에 통신을 제한할 수 있습니다.
포털 페이지 위쪽에 있는 검색 상자에서 네트워크 보안 그룹을 검색합니다. 검색 결과에서 네트워크 보안 그룹을 선택합니다.
네트워크 보안 그룹에서 + 만들기를 선택합니다.
네트워크 보안 그룹 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
프로젝트 세부 정보 |
|
구독 |
구독을 선택합니다. |
리소스 그룹 |
test-rg를 선택합니다. |
인스턴스 세부 정보 |
|
이름 |
nsg-storage를 입력합니다. |
지역 |
미국 동부 2를 선택합니다. |
검토 + 만들기를 선택한 다음, 만들기를 선택합니다.
New-AzNetworkSecurityGroup을 사용하여 네트워크 보안 그룹을 만듭니다. 다음 예에서는 nsg-private라는 네트워크 보안 그룹을 만듭니다.
$nsgpriv = @{
ResourceGroupName = 'test-rg'
Location = 'westus2'
Name = 'nsg-private'
}
$nsg = New-AzNetworkSecurityGroup @nsgpriv
az network nsg create를 사용하여 네트워크 보안 그룹을 만듭니다. 다음 예에서는 nsg-private라는 네트워크 보안 그룹을 만듭니다.
az network nsg create \
--resource-group test-rg \
--name nsg-private
아웃바운드 NSG(네트워크 보안 그룹) 규칙 만들기
포털 페이지 위쪽에 있는 검색 상자에서 네트워크 보안 그룹을 검색합니다. 검색 결과에서 네트워크 보안 그룹을 선택합니다.
nsg-storage를 선택합니다.
설정에서 아웃바운드 보안 규칙을 선택합니다.
+추가를 선택합니다.
Azure Storage 서비스에 대해 아웃바운드 통신을 허용하는 규칙을 만듭니다.
아웃바운드 보안 규칙 추가에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
원본 |
서비스 태그를 선택합니다. |
원본 서비스 태그 |
VirtualNetwork를 선택합니다. |
원본 포트 범위 |
기본값인 *을 그대로 둡니다. |
대상 |
서비스 태그를 선택합니다. |
대상 서비스 태그 |
스토리지를 선택합니다. |
서비스 |
사용자 지정(기본값)을 그대로 둡니다. |
대상 포트 범위 |
445를 입력합니다. |
프로토콜 |
모두를 선택합니다. |
작업 |
허용을 선택합니다. |
우선 순위 |
100(기본값)을 그대로 둡니다. |
이름 |
allow-storage-all을 입력합니다. |
+추가를 선택합니다.
인터넷에 대한 통신을 거부하는 다른 아웃바운드 보안 규칙을 만듭니다. 이 규칙은 아웃바운드 인터넷 통신을 허용하는 모든 네트워크 보안 그룹의 기본 규칙을 재정의합니다.
아웃바운드 보안 규칙 추가에서 다음 값을 사용하여 이전 단계를 완료합니다.
설정 |
값 |
원본 |
서비스 태그를 선택합니다. |
원본 서비스 태그 |
VirtualNetwork를 선택합니다. |
원본 포트 범위 |
기본값인 *을 그대로 둡니다. |
대상 |
서비스 태그를 선택합니다. |
대상 서비스 태그 |
인터넷을 선택합니다. |
서비스 |
사용자 지정(기본값)을 그대로 둡니다. |
대상 포트 범위 |
*를 입력합니다. |
프로토콜 |
모두를 선택합니다. |
작업 |
거부를 선택합니다. |
우선 순위 |
기본값인 110을 그대로 둡니다. |
이름 |
deny-internet-all을 입력합니다. |
추가를 선택합니다.
포털 페이지 위쪽에 있는 검색 상자에서 네트워크 보안 그룹을 검색합니다. 검색 결과에서 네트워크 보안 그룹을 선택합니다.
nsg-storage를 선택합니다.
설정에서 서브넷을 선택합니다.
+ 연결을 선택합니다.
서브넷 연결의 가상 네트워크에서 vnet-1을 선택합니다.
서브넷에서 subnet-private을 선택합니다.
확인을 선택합니다.
New-AzNetworkSecurityRuleConfig를 사용하여 네트워크 보안 그룹 보안 규칙을 만듭니다. 다음 규칙을 사용하면 Azure Storage 서비스에 지정된 공용 IP 주소에 대한 아웃바운드 액세스가 허용됩니다.
$r1 = @{
Name = "Allow-Storage-All"
Access = "Allow"
DestinationAddressPrefix = "Storage"
DestinationPortRange = "*"
Direction = "Outbound"
Priority = 100
Protocol = "*"
SourceAddressPrefix = "VirtualNetwork"
SourcePortRange = "*"
}
$rule1 = New-AzNetworkSecurityRuleConfig @r1
다음 규칙은 모든 공용 IP 주소에 대한 액세스를 거부합니다. 우선 순위가 더 높은 이전 규칙이 이 규칙을 재정의하여 Azure Storage의 공용 IP 주소에 대한 액세스를 허용합니다.
$r2 = @{
Name = "Deny-Internet-All"
Access = "Deny"
DestinationAddressPrefix = "Internet"
DestinationPortRange = "*"
Direction = "Outbound"
Priority = 110
Protocol = "*"
SourceAddressPrefix = "VirtualNetwork"
SourcePortRange = "*"
}
$rule2 = New-AzNetworkSecurityRuleConfig @r2
Get-AzNetworkSecurityGroup을 사용하여 네트워크 보안 그룹 개체를 변수로 검색합니다.
Set-AzNetworkSecurityRuleConfig를 사용하여 네트워크 보안 그룹에 규칙을 추가합니다.
# Retrieve the existing network security group
$nsgpriv = @{
ResourceGroupName = 'test-rg'
Name = 'nsg-private'
}
$nsg = Get-AzNetworkSecurityGroup @nsgpriv
# Add the new rules to the security group
$nsg.SecurityRules += $rule1
$nsg.SecurityRules += $rule2
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
Set-AzVirtualNetworkSubnetConfig를 사용하여 네트워크 보안 그룹을 subnet-private 서브넷에 연결한 다음 서브넷 구성을 가상 네트워크에 작성합니다. 다음 예에서는 nsg-private 네트워크 보안 그룹을 subnet-private 서브넷에 연결합니다.
$subnet = @{
VirtualNetwork = $VirtualNetwork
Name = "subnet-private"
AddressPrefix = "10.0.2.0/24"
ServiceEndpoint = "Microsoft.Storage"
NetworkSecurityGroup = $nsg
}
Set-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
az network nsg rule create를 사용하여 보안 규칙을 만듭니다. 다음 규칙을 사용하면 Azure Storage 서비스에 지정된 공용 IP 주소에 대한 아웃바운드 액세스가 허용됩니다.
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-private \
--name Allow-Storage-All \
--access Allow \
--protocol "*" \
--direction Outbound \
--priority 100 \
--source-address-prefix "VirtualNetwork" \
--source-port-range "*" \
--destination-address-prefix "Storage" \
--destination-port-range "*"
각 네트워크 보안 그룹에는 몇 가지 기본 보안 규칙이 포함되어 있습니다. 모든 공용 IP 주소에 대한 아웃바운드 액세스를 허용하는 기본 보안 규칙을 재정의하는 규칙을 만듭니다.
destination-address-prefix "Internet"
옵션은 모든 공용 IP 주소에 대한 아웃바운드 액세스를 거부합니다. 우선 순위가 더 높은 이전 규칙이 이 규칙을 재정의하여 Azure Storage의 공용 IP 주소에 대한 액세스를 허용합니다.
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-private \
--name Deny-Internet-All \
--access Deny \
--protocol "*" \
--direction Outbound \
--priority 110 \
--source-address-prefix "VirtualNetwork" \
--source-port-range "*" \
--destination-address-prefix "Internet" \
--destination-port-range "*"
다음 규칙은 어디에서나 서브넷에 SSH 트래픽 인바운드를 허용합니다. 이 규칙은 인터넷의 모든 인바운드 트래픽을 거부하는 기본 보안 규칙을 재정의합니다. 이후 단계에서 연결을 테스트할 수 있도록 서브넷에 대한 SSH가 허용됩니다.
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-private \
--name Allow-SSH-All \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 120 \
--source-address-prefix "*" \
--source-port-range "*" \
--destination-address-prefix "VirtualNetwork" \
--destination-port-range "22"
az network vnet subnet update를 사용하여 네트워크 보안 그룹을 subnet-private 서브넷에 연결합니다. 다음 예에서는 nsg-private 네트워크 보안 그룹을 subnet-private 서브넷에 연결합니다.
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-private \
--resource-group test-rg \
--network-security-group nsg-private
리소스에 대한 네트워크 액세스 제한
서비스 엔드포인트에 사용하도록 설정된 Azure 서비스를 통해 만든 리소스에 대한 네트워크 액세스를 제한하는 데 필요한 단계는 서비스에 따라 달라집니다. 각 서비스에 대한 특정 단계는 개별 서비스의 설명서를 참조하세요. 이 자습서의 나머지 부분에는 Azure Storage 계정에 대한 네트워크 액세스를 제한하는 단계가 예제로 포함되어 있습니다.
스토리지 계정 만들기
이 문서의 단계에 대한 Azure Storage 계정을 만듭니다. 스토리지 계정이 이미 있는 경우 대신 사용할 수 있습니다.
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
+ 만들기를 선택합니다.
스토리지 계정 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
프로젝트 세부 정보 |
|
구독 |
Azure 구독을 선택합니다. |
리소스 그룹 |
test-rg를 선택합니다. |
인스턴스 세부 정보 |
|
스토리지 계정 이름 |
storage1을 입력합니다. 이름을 사용할 수 없는 경우 고유한 이름을 입력합니다. |
위치 |
(미국) 미국 동부 2를 선택합니다. |
성능 |
기본값인 표준을 그대로 둡니다. |
중복 |
LRS(로컬 중복 스토리지)를 선택합니다. |
검토를 선택합니다.
만들기를 선택합니다.
New-AzStorageAccount를 사용하여 Azure 스토리지 계정을 만듭니다.
<replace-with-your-unique-storage-account-name>
을 모든 Azure 위치에서 고유한 이름으로 바꿉니다. 이름은 3~24자 사이여야 하고 숫자와 소문자만 사용할 수 있습니다.
$storageAcctName = '<replace-with-your-unique-storage-account-name>'
$storage = @{
Location = 'westus2'
Name = $storageAcctName
ResourceGroupName = 'test-rg'
SkuName = 'Standard_LRS'
Kind = 'StorageV2'
}
New-AzStorageAccount @storage
스토리지 계정이 생성된 후 Get-AzStorageAccountKey를 사용하여 스토리지 계정의 키를 변수로 검색합니다.
$storagekey = @{
ResourceGroupName = 'test-rg'
AccountName = $storageAcctName
}
$storageAcctKey = (Get-AzStorageAccountKey @storagekey).Value[0]
이 키는 이후 단계에서 파일 공유를 만드는 데 사용됩니다.
$storageAcctKey
를 입력하고 값을 기록합니다. 이후 단계에서 가상 머신의 드라이브에 파일 공유를 매핑할 때 수동으로 입력해야 합니다.
서비스 엔드포인트에 사용할 수 있는 Azure 서비스를 통해 만든 리소스에 대한 네트워크 액세스를 제한하는 데 필요한 단계는 서비스에 따라 다릅니다. 각 서비스에 대한 특정 단계는 개별 서비스의 설명서를 참조하세요. 이 문서의 나머지 부분에는 Azure Storage 계정에 대한 네트워크 액세스를 제한하는 단계가 예제로 포함되어 있습니다.
스토리지 계정 만들기
az storage account create를 사용하여 Azure Storage 계정을 만듭니다.
<replace-with-your-unique-storage-account-name>
을 모든 Azure 위치에서 고유한 이름으로 바꿉니다. 이름은 3~24자 사이여야 하고 숫자와 소문자만 사용할 수 있습니다.
storageAcctName="<replace-with-your-unique-storage-account-name>"
az storage account create \
--name $storageAcctName \
--resource-group test-rg \
--sku Standard_LRS \
--kind StorageV2
스토리지 계정이 생성된 후 az storage account show-connection-string을 사용하여 스토리지 계정에 대한 연결 문자열을 변수로 검색합니다. 이 연결 문자열은 이후 단계에서 파일 공유를 만드는 데 사용됩니다.
saConnectionString=$(az storage account show-connection-string \
--name $storageAcctName \
--resource-group test-rg \
--query 'connectionString' \
--out tsv)
중요합니다
Microsoft에서는 사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 좋습니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 관리 ID와 같이 다른 보안 흐름이 실행 가능하지 않은 경우에만 이 흐름을 사용해야 합니다.
관리 ID를 사용하여 스토리지 계정에 연결하는 방법에 대한 자세한 내용은 관리 ID를 사용하여 Azure Storage에 액세스를 참조하세요.
스토리지 계정에 파일 공유 만들기
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
스토리지 계정에서 이전 단계에서 만든 스토리지 계정을 선택합니다.
데이터 스토리지에서 파일 공유를 선택합니다.
+ 파일 공유를 선택합니다.
새 파일 공유에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
이름 |
파일 공유를 입력합니다. |
계층 |
기본값인 트랜잭션 최적화를 그대로 둡니다. |
다음: 백업을 선택합니다.
백업 사용을 선택 취소합니다.
검토 + 만들기를 선택한 다음, 만들기를 선택합니다.
New-AzStorageContext를 사용하여 스토리지 계정 및 키에 대한 컨텍스트를 만듭니다. 이 컨텍스트는 스토리지 계정 이름 및 계정 키를 캡슐화합니다.
$storagecontext = @{
StorageAccountName = $storageAcctName
StorageAccountKey = $storageAcctKey
}
$storageContext = New-AzStorageContext @storagecontext
New-AzStorageShare를 사용해 파일 공유를 만듭니다.
$fs = @{
Name = "file-share"
Context = $storageContext
}
$share = New-AzStorageShare @fs
az storage share create를 사용하여 스토리지 계정에서 파일 공유를 만듭니다. 이후 단계에서 네트워크 액세스를 확인하기 위해 이 파일 공유가 탑재됩니다.
az storage share create \
--name file-share \
--quota 2048 \
--connection-string $saConnectionString > /dev/null
서브넷에 대한 네트워크 액세스 제한
기본적으로 스토리지 계정은 인터넷을 비롯하여 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 인터넷 및 모든 가상 네트워크의 다른 모든 서브넷(vnet-1 가상 네트워크에 있는 subnet-private 서브넷 제외)으로부터 네트워크 액세스를 제한할 수 있습니다.
서브넷에 대한 네트워크 액세스를 제한하려면 다음을 수행합니다.
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
사용자의 스토리지 계정을 선택합니다.
보안 + 네트워킹에서 네트워킹을 선택합니다.
방화벽 및 가상 네트워크 탭의 공용 네트워크 액세스에서 선택한 가상 네트워크 및 IP 주소에서 사용을 선택합니다.
가상 네트워크에서 + 기존 가상 네트워크 추가를 선택합니다.
네트워크 추가에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
구독 |
구독을 선택합니다. |
가상 네트워크 |
vnet-1을 선택합니다. |
서브넷 |
서브넷-프라이빗을 선택합니다. |
추가를 선택합니다.
저장을 선택하여 가상 네트워크 구성을 저장합니다.
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 선택한 네트워크에 대한 액세스를 제한하려면 기본 동작을 거부 로 Update-AzStorageAccountNetworkRuleSet를 사용해 변경합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
$storagerule = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName
DefaultAction = "Deny"
}
Update-AzStorageAccountNetworkRuleSet @storagerule
Get-AzVirtualNetwork를 사용하여 생성된 가상 네트워크를 검색한 다음, Get-AzVirtualNetworkSubnetConfig를 사용하여 프라이빗 서브넷 개체를 변수로 검색합니다.
$subnetpriv = @{
ResourceGroupName = "test-rg"
Name = "vnet-1"
}
$privateSubnet = Get-AzVirtualNetwork @subnetpriv | Get-AzVirtualNetworkSubnetConfig -Name "subnet-private"
Add-AzStorageAccountNetworkRule을 사용하여 subnet-private 서브넷에서 스토리지 계정에 대한 네트워크 액세스를 허용합니다.
$storagenetrule = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName
VirtualNetworkResourceId = $privateSubnet.Id
}
Add-AzStorageAccountNetworkRule @storagenetrule
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 선택한 네트워크에 대한 액세스를 제한하려면 az storage account update를 사용하여 기본 작업을 거부로 변경합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
az storage account update \
--name $storageAcctName \
--resource-group test-rg \
--default-action Deny
az storage account network-rule add를 사용하여 subnet-private 서브넷에서 스토리지 계정에 대한 네트워크 액세스를 허용합니다.
az storage account network-rule add \
--resource-group test-rg \
--account-name $storageAcctName \
--vnet-name vnet-1 \
--subnet subnet-private
서브넷에 가상 머신 배포
스토리지 계정에 대한 네트워크 액세스를 테스트하려면 각 서브넷에 가상 머신을 배포합니다.
테스트 가상 머신 만들기
다음 절차에서는 가상 네트워크에 vm-1이라는 테스트 VM(가상 머신)을 만듭니다.
포털에서 가상 머신을 검색하여 선택합니다.
가상 머신에서 + 만들기를 선택한 다음, Azure 가상 머신을 선택합니다.
가상 머신 만들기의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
프로젝트 세부 정보 |
|
구독 |
구독을 선택합니다. |
리소스 그룹 |
test-rg를 선택합니다. |
인스턴스 세부 정보 |
|
가상 머신 이름 |
vm-1을 입력합니다. |
지역 |
미국 동부 2를 선택합니다. |
가용성 옵션 |
인프라 중복이 필요하지 않습니다를 선택합니다. |
보안 유형 |
기본값인 표준을 그대로 둡니다. |
이미지 |
Windows Server 2022 Datacenter - x64 Gen2를 선택합니다. |
VM 아키텍처 |
기본값인 x64를 그대로 둡니다. |
크기 |
크기를 선택합니다. |
관리자 계정 |
|
인증 유형 |
암호를 선택합니다. |
사용자 이름 |
azureuser를 입력합니다. |
암호 |
암호를 입력합니다. |
암호 확인 |
암호를 다시 입력합니다. |
인바운드 포트 규칙 |
|
공용 인바운드 포트 |
없음을 선택합니다. |
페이지 위쪽에 있는 네트워킹 탭을 선택합니다.
네트워킹 탭에서 다음 정보를 입력하거나 선택합니다.
설정 |
값 |
네트워크 인터페이스 |
|
가상 네트워크 |
vnet-1을 선택합니다. |
서브넷 |
subnet-1 (10.0.0.0/24)을 선택합니다. |
공용 IP |
없음을 선택합니다. |
NIC 네트워크 보안 그룹 추가 |
고급을 선택합니다. |
네트워크 보안 그룹 구성 |
새로 만들기를 선택합니다.
이름으로 nsg-1을 입력합니다.
나머지는 기본값으로 두고 확인을 선택합니다. |
나머지 설정은 기본값으로 두고 검토 + 만들기를 선택합니다.
설정을 검토하고 만들기를 선택합니다.
참고
베스천 호스트가 있는 가상 네트워크의 가상 머신에는 공용 IP 주소가 필요하지 않습니다. Bastion은 공용 IP를 제공하고 VM은 개인 IP를 사용하여 네트워크 내에서 통신합니다. 베스천 호스트된 가상 네트워크의 모든 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(원본 네트워크 주소 변환) 사용을 참조하세요.
두 번째 가상 머신 만들기
이전 섹션의 단계를 반복하여 두 번째 가상 머신을 만듭니다.
가상 머신 만들기에서 다음 값을 바꿉니다.
설정 |
값 |
가상 머신 이름 |
vm-private을 입력합니다. |
서브넷 |
서브넷-프라이빗을 선택합니다. |
공용 IP |
없음을 선택합니다. |
NIC 네트워크 보안 그룹 추가 |
없음을 선택합니다. |
경고
배포가 완료될 때까지 다음 단계로 진행하지 마세요.
첫 번째 가상 머신 만들기
New-AzVM을 사용하여 subnet-public 서브넷에 가상 머신을 만듭니다. 다음 명령을 실행하면 자격 증명을 묻는 메시지가 표시됩니다. 입력하는 값은 VM에 대한 사용자 이름과 암호로 구성됩니다.
$vm1 = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-public"
Name = "vm-public"
PublicIpAddressName = $null
}
New-AzVm @vm1
두 번째 가상 머신 만들기
subnet-private 서브넷에 가상 머신을 만듭니다.
$vm2 = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-private"
Name = "vm-private"
PublicIpAddressName = $null
}
New-AzVm @vm2
Azure가 VM을 만드는 데 몇 분이 걸립니다. Azure가 VM 만들기를 완료하고 PowerShell에 출력을 반환할 때까지 다음 단계로 이동하지 마세요.
스토리지 계정에 대한 네트워크 액세스를 테스트하려면 각 서브넷에 VM을 배포합니다.
첫 번째 가상 머신 만들기
az vm create를 사용하여 subnet-public 서브넷에 VM을 만듭니다. 기본 키 위치에 SSH 키가 없는 경우 이 명령에서 키를 만듭니다. 특정 키 집합을 사용하려면 --ssh-key-value
옵션을 사용합니다.
az vm create \
--resource-group test-rg \
--name vm-public \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-public \
--admin-username azureuser \
--generate-ssh-keys
VM을 만드는 데 몇 분이 걸립니다. VM을 만든 후 Azure CLI는 다음 예제와 비슷한 정보를 표시합니다.
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-public",
"___location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
두 번째 가상 머신 만들기
az vm create \
--resource-group test-rg \
--name vm-private \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-private \
--admin-username azureuser \
--generate-ssh-keys
VM을 만드는 데 몇 분이 걸립니다.
스토리지 계정에 대한 액세스 확인
subnet-private 서브넷에 할당된 이전에 만든 가상 머신은 스토리지 계정에 대한 액세스를 확인하는 데 사용됩니다.
subnet-1 서브넷에 할당된 이전 섹션에서 만든 가상 머신은 스토리지 계정에 대한 액세스가 차단되어 있는지 확인하는 데 사용됩니다.
스토리지 계정 액세스 키 가져오기
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
스토리지 계정에서 스토리지 계정을 선택합니다.
보안 + 네트워킹에서 액세스 키를 선택합니다.
key1의 값을 복사합니다. 키를 표시하려면 표시 단추를 선택해야 할 수도 있습니다.
포털 맨 위에 있는 검색 상자에 가상 머신을 입력합니다. 검색 결과에서 가상 머신을 선택합니다.
vm-private을 선택합니다.
작업에서 Bastion을 선택합니다.
가상 머신을 만들 때 지정한 사용자 이름 및 암호를 입력합니다.
연결을 선택합니다.
Windows PowerShell을 엽니다. 다음 스크립트를 사용하여 Azure 파일 공유를 Z 드라이브에 매핑합니다.
$key = @{
String = "<storage-account-key>"
}
$acctKey = ConvertTo-SecureString @key -AsPlainText -Force
$cred = @{
ArgumentList = "Azure\<storage-account-name>", $acctKey
}
$credential = New-Object System.Management.Automation.PSCredential @cred
$map = @{
Name = "Z"
PSProvider = "FileSystem"
Root = "\\<storage-account-name>.file.core.windows.net\file-share"
Credential = $credential
}
New-PSDrive @map
PowerShell에서 다음 예제 출력과 비슷한 출력을 반환합니다.
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Z FileSystem \\storage8675.file.core.windows.net\f...
Azure 파일 공유가 Z 드라이브에 매핑되었습니다.
vm-private에 대한 Bastion 연결을 닫습니다.
subnet-private 서브넷에 할당된 이전에 만든 가상 머신은 스토리지 계정에 대한 액세스를 확인하는 데 사용됩니다.
subnet-1 서브넷에 할당된 이전 섹션에서 만든 가상 머신은 스토리지 계정에 대한 액세스가 차단되어 있는지 확인하는 데 사용됩니다.
스토리지 계정 액세스 키 가져오기
Azure 포털에 로그인합니다.
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
스토리지 계정에서 스토리지 계정을 선택합니다.
보안 + 네트워킹에서 액세스 키를 선택합니다.
key1의 값을 복사합니다. 키를 표시하려면 표시 단추를 선택해야 할 수도 있습니다.
포털 맨 위에 있는 검색 상자에 가상 머신을 입력합니다. 검색 결과에서 가상 머신을 선택합니다.
vm-private을 선택합니다.
개요에서 연결을 선택한 다음 Bastion을 통해 연결을 선택합니다.
가상 머신을 만들 때 지정한 사용자 이름 및 암호를 입력합니다.
연결을 선택합니다.
Windows PowerShell을 엽니다. 다음 스크립트를 사용하여 Azure 파일 공유를 Z 드라이브에 매핑합니다.
$key = @{
String = "<storage-account-key>"
}
$acctKey = ConvertTo-SecureString @key -AsPlainText -Force
$cred = @{
ArgumentList = "Azure\<storage-account-name>", $acctKey
}
$credential = New-Object System.Management.Automation.PSCredential @cred
$map = @{
Name = "Z"
PSProvider = "FileSystem"
Root = "\\<storage-account-name>.file.core.windows.net\file-share"
Credential = $credential
}
New-PSDrive @map
PowerShell에서 다음 예제 출력과 비슷한 출력을 반환합니다.
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Z FileSystem \\storage8675.file.core.windows.net\f...
Azure 파일 공유가 Z 드라이브에 매핑되었습니다.
VM에 다른 공용 IP 주소에 대한 아웃바운드 연결이 없는지 확인합니다.
ping bing.com
프라이빗 서브넷과 연결된 네트워크 보안 그룹이 Azure Storage 서비스에 할당된 주소 이외의 공용 IP 주소에 대한 아웃바운드 액세스를 허용하지 않으므로 응답이 수신되지 않습니다.
vm-private에 대한 Bastion 연결을 닫습니다.
vm-private VM에 SSH를 실행합니다.
다음 명령을 실행하여 VM의 IP 주소를 환경 변수로 저장합니다.
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-private --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
탑재 지점에 대한 폴더를 만듭니다.
sudo mkdir /mnt/file-share
만든 디렉터리에 Azure 파일 공유를 탑재합니다. 다음 명령을 실행하기 전에 <storage-account-name>
을 계정 이름으로, <storage-account-key>
를 스토리지 계정 만들기에서 검색한 키로 바꿉니다.
sudo mount --types cifs //<storage-account-name>.file.core.windows.net/my-file-share /mnt/file-share --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino
user@vm-private:~$
프롬프트가 수신됩니다. Azure 파일 공유가 /mnt/file-share에 성공적으로 탑재되었습니다.
VM에 다른 공용 IP 주소에 대한 아웃바운드 연결이 없는지 확인합니다.
ping bing.com -c 4
subnet-private 서브넷에 연결된 네트워크 보안 그룹이 Azure Storage 서비스에 할당된 주소 외의 공용 IP 주소에 대한 아웃바운드 액세스를 허용하지 않으므로 응답이 수신되지 않습니다.
vm-private VM에 대한 SSH 세션을 종료합니다.
스토리지 계정에 대한 액세스가 거부되는지 확인
vm-1에서
포털 맨 위에 있는 검색 상자에 가상 머신을 입력합니다. 검색 결과에서 가상 머신을 선택합니다.
vm-1을 선택합니다.
작업에서 Bastion을 선택합니다.
가상 머신을 만들 때 지정한 사용자 이름 및 암호를 입력합니다.
연결을 선택합니다.
이전 명령을 반복하여 스토리지 계정의 파일 공유에 드라이브를 매핑하려고 시도합니다. 이 절차를 위해 스토리지 계정 액세스 키를 다시 복사해야 할 수도 있습니다.
$key = @{
String = "<storage-account-key>"
}
$acctKey = ConvertTo-SecureString @key -AsPlainText -Force
$cred = @{
ArgumentList = "Azure\<storage-account-name>", $acctKey
}
$credential = New-Object System.Management.Automation.PSCredential @cred
$map = @{
Name = "Z"
PSProvider = "FileSystem"
Root = "\\<storage-account-name>.file.core.windows.net\file-share"
Credential = $credential
}
New-PSDrive @map
다음과 같은 오류 메시지가 나타납니다.
New-PSDrive : Access is denied
At line:1 char:5
+ New-PSDrive @map
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Z:PSDriveInfo) [New-PSDrive], Win32Exception
+ FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
vm-1에 대한 Bastion 연결을 닫습니다.
로컬 컴퓨터에서
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
스토리지 계정에서 스토리지 계정을 선택합니다.
데이터 스토리지에서 파일 공유를 선택합니다.
파일 공유를 선택합니다.
왼쪽 메뉴에서 찾아보기를 선택합니다.
다음과 같은 오류 메시지가 나타납니다.
참고
컴퓨터가 vnet-1 가상 네트워크의 subnet-private 서브넷에 없기 때문에 액세스가 거부되었습니다.
vm-1에서
포털 맨 위에 있는 검색 상자에 가상 머신을 입력합니다. 검색 결과에서 가상 머신을 선택합니다.
vm-1을 선택합니다.
작업에서 Bastion을 선택합니다.
가상 머신을 만들 때 지정한 사용자 이름 및 암호를 입력합니다.
연결을 선택합니다.
이전 명령을 반복하여 스토리지 계정의 파일 공유에 드라이브를 매핑하려고 시도합니다. 이 절차를 위해 스토리지 계정 액세스 키를 다시 복사해야 할 수도 있습니다.
$key = @{
String = "<storage-account-key>"
}
$acctKey = ConvertTo-SecureString @key -AsPlainText -Force
$cred = @{
ArgumentList = "Azure\<storage-account-name>", $acctKey
}
$credential = New-Object System.Management.Automation.PSCredential @cred
$map = @{
Name = "Z"
PSProvider = "FileSystem"
Root = "\\<storage-account-name>.file.core.windows.net\file-share"
Credential = $credential
}
New-PSDrive @map
다음과 같은 오류 메시지가 나타납니다.
New-PSDrive : Access is denied
At line:1 char:5
+ New-PSDrive @map
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Z:PSDriveInfo) [New-PSDrive], Win32Exception
+ FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
vm-1에 대한 Bastion 연결을 닫습니다.
컴퓨터에서 다음 명령을 사용하여 스토리지 계정의 파일 공유를 보려고 시도합니다.
$storage = @{
ShareName = "file-share"
Context = $storageContext
}
Get-AzStorageFile @storage
액세스가 거부되었습니다. 다음 예와 유사한 출력이 표시됩니다.
Get-AzStorageFile : The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request isn't authorized to perform this operation
사용자의 컴퓨터는 vnet-1 가상 네트워크의 subnet-private 서브넷에 없습니다.
vm-public VM에 SSH를 실행합니다.
다음 명령을 실행하여 VM의 IP 주소를 환경 변수로 저장합니다.
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-public --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
탑재 지점에 대한 디렉터리를 만듭니다.
sudo mkdir /mnt/file-share
만든 디렉터리에 Azure 파일 공유를 탑재합니다. 이 문서에서는 최신 버전의 Ubuntu를 배포했다고 가정합니다. 이전 버전의 Ubuntu를 사용하는 경우 파일 공유를 탑재하는 방법에 대한 자세한 내용은 Linux에서 탑재를 참조하세요. 다음 명령을 실행하기 전에 <storage-account-name>
을 계정 이름으로, <storage-account-key>
를 스토리지 계정 만들기에서 검색한 키로 바꿉니다.
sudo mount --types cifs //storage-account-name>.file.core.windows.net/file-share /mnt/file-share --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino
mount error(13): Permission denied
VM이 subnet-public 서브넷 내에 배포되었기 때문에 액세스가 거부되고 오류가 발생합니다.
subnet-public 서브넷에는 Azure Storage에 대해 사용하도록 설정된 서비스 엔드포인트가 없으며, 스토리지 계정은 subnet-private 서브넷에서만 네트워크 액세스를 허용하고 subnet-public 서브넷에서는 허용하지 않습니다.
vm-public VM에 대한 SSH 세션을 종료합니다.
컴퓨터에서 az storage share list를 사용하여 스토리지 계정의 공유를 봅니다.
<account-name>
및 <account-key>
를 스토리지 계정 만들기의 스토리지 계정 이름과 키로 바꿉니다.
az storage share list \
--account-name <account-name> \
--account-key <account-key>
컴퓨터가 vnet-1 가상 네트워크의 subnet-private 서브넷에 없으므로 액세스가 거부되고 이 요청은 이 작업을 수행할 권한이 없습니다 오류가 발생합니다.
만든 리소스 사용을 마치면 리소스 그룹과 해당 리소스를 모두 삭제할 수 있습니다.
Azure Portal에서 리소스 그룹을 검색하고 선택합니다.
리소스 그룹 페이지에서 test-rg 리소스 그룹을 선택합니다.
test-rg 페이지에서 리소스 그룹 삭제를 선택합니다.
삭제 확인을 위한 리소스 그룹 이름 입력에 test-rg를 입력한 다음 삭제를 선택합니다.
더 이상 필요하지 않은 경우 Remove-AzResourceGroup을 사용하여 리소스 그룹 및 해당 그룹에 포함된 모든 리소스를 제거할 수 있습니다.
$cleanup = @{
Name = "test-rg"
}
Remove-AzResourceGroup @cleanup -Force
리소스 정리
더 이상 필요하지 않은 경우 az group delete를 사용하여 리소스 그룹 및 그룹에 포함된 모든 리소스를 제거합니다.
az group delete \
--name test-rg \
--yes \
--no-wait
다음 단계
이 자습서에서는 다음을 수행합니다.
가상 네트워크 서브넷에 대해 서비스 엔드포인트를 사용하도록 설정했습니다.
여러 Azure 서비스에서 배포된 리소스에 서비스 엔드포인트를 사용하도록 설정할 수 있음을 알았습니다.
Azure Storage 계정을 만들고 스토리지 계정에 대한 네트워크 액세스를 가상 네트워크 서브넷 내의 리소스로만 제한했습니다.
서비스 엔드포인트에 대한 자세한 내용은 서비스 엔드포인트 개요 및 서브넷 관리를 참조하세요.
계정에 여러 가상 네트워크가 있는 경우 리소스가 서로 통신할 수 있도록 가상 네트워크 간에 연결을 설정하는 것이 좋습니다. 가상 네트워크를 연결하는 방법을 알아보려면 다음 자습서를 진행합니다.