자습서: 가상 네트워크 서비스 엔드포인트를 사용하여 PaaS 리소스에 대한 네트워크 액세스 제한
아티클
가상 네트워크 서비스 엔드포인트를 사용하면 일부 Azure 서비스 리소스에 대한 네트워크 액세스를 가상 네트워크 서브넷으로 제한할 수 있습니다. 리소스에 대한 인터넷 액세스를 제거할 수도 있습니다. 서비스 엔드포인트는 가상 네트워크에서 지원되는 Azure 서비스로의 직접 연결을 제공하므로 가상 네트워크의 프라이빗 주소 공간을 사용하여 Azure 서비스에 액세스할 수 있습니다. 서비스 엔드포인트를 통해 Azure 리소스에 도달하는 트래픽은 항상 Microsoft Azure 백본 네트워크에 유지됩니다.
Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.
Azure 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와 연결해야 합니다.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
다음 프로시저에서는 리소스 서브넷, Azure Bastion 서브넷 및 베스천 호스트가 포함된 가상 네트워크를 만듭니다.
포털에서 가상 네트워크를 검색하여 선택합니다.
가상 네트워크 페이지에서 + 만들기를 선택합니다.
가상 네트워크 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
새로 만들기를 선택합니다. 이름으로 test-rg를 입력합니다. 확인을 선택합니다.
인스턴스 세부 정보
Name
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개 주소)를 그대로 둡니다.
저장을 선택합니다.
창 하단에서 검토 + 만들기를 선택합니다. 유효성 검사를 통과하면 만들기를 선택합니다.
서비스 엔드포인트는 서비스 단위, 서브넷 단위로 활성화됩니다.
포털 페이지 상단의 검색 상자에서 가상 네트워크를 검색합니다. 검색 결과에서 가상 네트워크를 선택합니다.
가상 네트워크에서 vnet-1을 선택합니다.
vnet-1의 설정 섹션에서 서브넷을 선택합니다.
+ 서브넷을 선택합니다.
서브넷 추가 페이지에서 다음 정보를 입력하거나 선택합니다.
설정
값
속성
subnet-private
서브넷 주소 범위
기본값인 10.0.2.0/24를 그대로 둡니다.
서비스 엔드포인트
Services
Microsoft.Storage를 선택합니다.
저장을 선택합니다.
주의
리소스를 포함한 기존 서브넷에 서비스 엔드포인트를 사용하도록 설정하기 전에 서브넷 설정 변경을 참조하세요.
가상 네트워크 만들기
가상 네트워크를 만들기 전에 가상 네트워크에 대한 리소스 그룹과 이 아티클에서 만든 다른 모든 리소스를 만들어야 합니다. New-AzResourceGroup을 사용하여 리소스 그룹을 만듭니다. 다음 예에서는 test-rg라는 리소스 그룹을 만듭니다.
Azure Bastion은 브라우저를 사용하여 개인 IP 주소를 사용하여 SSH(보안 셸) 또는 RDP(원격 데스크톱 프로토콜)를 통해 가상 네트워크의 VM에 연결합니다. VM에는 공용 IP 주소, 클라이언트 소프트웨어 또는 특수 구성이 필요하지 않습니다. Bastion에 대한 자세한 내용은 Azure Bastion이란?을 참조하세요.
시간당 가격 책정은 아웃바운드 데이터 사용량에 관계없이 Bastion이 배포되는 순간부터 시작됩니다. 자세한 내용은 가격 책정 및 SKU를 참조하세요. 자습서 또는 테스트의 일부로 Bastion을 배포하는 경우 이 리소스 사용을 마친 후 삭제하는 것이 좋습니다.
가상 네트워크에 대한 베스천 서브넷을 구성합니다. 이 서브넷은 Bastion 리소스 전용으로 예약되어 있으며 이름을 AzureBastionSubnet으로 지정해야 합니다.
서비스 엔드포인트를 지원하는 서비스에 대해서만 서비스 엔드포인트를 사용하도록 설정할 수 있습니다. az network vnet list-endpoint-services를 사용하여 Azure 위치에서 사용할 수 있는 서비스 엔드포인트 지원 서비스를 확인합니다. 다음 예에서는 westus2 지역에서 사용 가능한 서비스 엔드포인트 지원 서비스 목록을 반환합니다. 반환되는 서비스 목록은 시간이 지나면서 서비스 엔드포인트를 사용할 수 있는 Azure 서비스가 증가함에 따라 확장됩니다.
az network vnet list-endpoint-services \
--location westus2 \
--out table
# 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 서브넷에 연결합니다.
각 네트워크 보안 그룹에는 몇 가지 기본 보안 규칙이 포함되어 있습니다. 모든 공용 IP 주소에 대한 아웃바운드 액세스를 허용하는 기본 보안 규칙을 재정의하는 규칙을 만듭니다. destination-address-prefix "Internet" 옵션은 모든 공용 IP 주소에 대한 아웃바운드 액세스를 거부합니다. 우선 순위가 더 높은 이전 규칙이 이 규칙을 재정의하여 Azure Storage의 공용 IP 주소에 대한 액세스를 허용합니다.
서비스 엔드포인트에 사용하도록 설정된 Azure 서비스를 통해 만든 리소스에 대한 네트워크 액세스를 제한하는 데 필요한 단계는 서비스에 따라 달라집니다. 각 서비스에 대한 특정 단계는 개별 서비스의 설명서를 참조하세요. 이 자습서의 나머지 부분에는 Azure Storage 계정에 대한 네트워크 액세스를 제한하는 단계가 예제로 포함되어 있습니다.
저장소 계정 만들기
이 문서의 단계에 대한 Azure Storage 계정을 만듭니다. 스토리지 계정이 이미 있는 경우 대신 사용할 수 있습니다.
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
+ 만들기를 선택합니다.
스토리지 계정 만들기의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
구독
Azure 구독을 선택합니다.
리소스 그룹
test-rg를 선택합니다.
인스턴스 세부 정보
스토리지 계정 이름
storage1을 입력합니다. 이름을 사용할 수 없는 경우 고유한 이름을 입력합니다.
위치
(미국) 미국 동부 2를 선택합니다.
성능
기본값인 표준을 그대로 둡니다.
중복
LRS(로컬 중복 스토리지)를 선택합니다.
검토를 선택합니다.
만들기를 실행합니다.
New-AzStorageAccount를 사용하여 Azure 스토리지 계정을 만듭니다. <replace-with-your-unique-storage-account-name>을 모든 Azure 위치에서 고유한 이름으로 바꿉니다. 이름은 3~24자 사이여야 하고 숫자와 소문자만 사용할 수 있습니다.
이 자습서에서는 연결 문자열을 사용하여 스토리지 계정에 연결합니다. 사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 높은 수준의 신뢰를 요구하며 다른 흐름에는 존재하지 않는 위험을 수반합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
이 키는 이후 단계에서 파일 공유를 만드는 데 사용됩니다. $storageAcctKey를 입력하고 값을 기록합니다. 이후 단계에서 가상 머신의 드라이브에 파일 공유를 매핑할 때 수동으로 입력해야 합니다.
서비스 엔드포인트에 사용할 수 있는 Azure 서비스를 통해 만든 리소스에 대한 네트워크 액세스를 제한하는 데 필요한 단계는 서비스에 따라 다릅니다. 각 서비스에 대한 특정 단계는 개별 서비스의 설명서를 참조하세요. 이 문서의 나머지 부분에는 Azure Storage 계정에 대한 네트워크 액세스를 제한하는 단계가 예제로 포함되어 있습니다.
저장소 계정 만들기
az storage account create를 사용하여 Azure Storage 계정을 만듭니다. <replace-with-your-unique-storage-account-name>을 모든 Azure 위치에서 고유한 이름으로 바꿉니다. 이름은 3~24자 사이여야 하고 숫자와 소문자만 사용할 수 있습니다.
이 자습서에서는 연결 문자열을 사용하여 스토리지 계정에 연결합니다. 사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 높은 수준의 신뢰를 요구하며 다른 흐름에는 존재하지 않는 위험을 수반합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
기본적으로 스토리지 계정은 인터넷을 비롯하여 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 인터넷 및 모든 가상 네트워크의 다른 모든 서브넷(vnet-1 가상 네트워크에 있는 subnet-private 서브넷 제외)으로부터 네트워크 액세스를 제한할 수 있습니다.
서브넷에 대한 네트워크 액세스를 제한하려면 다음을 수행합니다.
포털 맨 위에 있는 검색 상자에 스토리지 계정을 입력합니다. 검색 결과에서 스토리지 계정을 선택합니다.
사용자의 스토리지 계정을 선택합니다.
보안 + 네트워킹에서 네트워킹을 선택합니다.
방화벽 및 가상 네트워크 탭의 공용 네트워크 액세스에서 선택한 가상 네트워크 및 IP 주소에서 사용을 선택합니다.
가상 네트워크에서 + 기존 가상 네트워크 추가를 선택합니다.
네트워크 추가에서 다음 정보를 입력하거나 선택합니다.
설정
값
Subscription
구독을 선택합니다.
가상 네트워크
vnet-1을 선택합니다.
서브넷
서브넷-프라이빗을 선택합니다.
추가를 선택합니다.
저장을 선택하여 가상 네트워크 구성을 저장합니다.
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 선택한 네트워크에 대한 액세스를 제한하려면 기본 동작을 거부 로 Update-AzStorageAccountNetworkRuleSet를 사용해 변경합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 선택한 네트워크에 대한 액세스를 제한하려면 az storage account update를 사용하여 기본 작업을 거부로 변경합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
새로 만들기를 선택합니다. 이름으로 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의 백 엔드 풀에 배치됩니다.
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
vm-public VM이 subnet-public 서브넷 내에 배포되었기 때문에 액세스가 거부되고 mount error(13): Permission denied 오류가 발생합니다. subnet-public 서브넷에는 Azure Storage에 대해 사용하도록 설정된 서비스 엔드포인트가 없으며, 스토리지 계정은 subnet-private 서브넷에서만 네트워크 액세스를 허용하고 subnet-public 서브넷에서는 허용하지 않습니다.