서비스 엔드포인트 정책 만들기 및 연결
이 문서의 내용
서비스 엔드포인트 정책을 사용하면 서비스 엔드포인트를 통해 특정 Azure 리소스에 가상 네트워크 트래픽을 필터링 할 수 있습니다. 서비스 엔드포인트 정책을 잘 모르는 경우 서비스 엔드포인트 정책 개요 를 참조하여 자세히 알아보세요.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
가상 네트워크를 만듭니다.
Azure Storage에 서브넷을 추가하고 서비스 엔드포인트를 사용하도록 설정합니다.
두 개의 Azure Storage 계정을 만들고 가상 네트워크의 서브넷에서 네트워크 액세스를 허용합니다.
스토리지 계정 중 하나에 대해서만 액세스를 허용하는 서비스 엔드포인트 정책을 만듭니다.
서브넷에 VM(가상 머신)을 배포합니다.
서브넷에서 허용된 스토리지 계정에 대한 액세스를 확인합니다.
서브넷에서 허용되지 않는 스토리지 계정에 대한 액세스가 거부되었음을 확인합니다.
필수 조건
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 체험 계정 을 만듭니다.
이 문서에는 Azure CLI 버전 2.0.28 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
가상 네트워크 만들기 및 서비스 엔드포인트 사용
이 자습서에서 만든 리소스를 포함하는 가상 네트워크를 만듭니다.
포털의 검색 상자에 가상 네트워크 를 입력합니다. 검색 결과에서 가상 네트워크 를 선택합니다.
+ 만들기 를 선택하여 새 가상 네트워크를 만듭니다.
가상 네트워크 만들기 의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
새로 만들기 를 선택합니다. 이름 에 Enter test-rg 를 입력합니다. 확인 을 선택합니다.
속성
vnet-1 을 입력합니다.
지역
미국 서부 2 를 선택합니다.
다음 을 선택합니다.
다음 을 선택합니다.
IP 주소 의 서브넷 에서 기본 서브넷을 선택합니다.
서브넷 편집 의 다음 정보를 입력하거나 선택합니다.
설정
값
속성
subnet-1 을 입력합니다.
서비스 엔드포인트
서비스
풀다운 메뉴에서 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 를 통해 서브넷 구성을 만든 다음 Set-AzVirtualNetwork 를 통해 가상 네트워크에 서브넷 구성을 기록합니다. 다음 예제에서는 서브넷-1 이라는 가상 네트워크에 추가하고 Microsoft.Storage 에 대한 서비스 엔드포인트를 만듭니다.
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
ServiceEndpoint = "Microsoft.Storage"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
가상 네트워크를 만들기 전에 가상 네트워크에 대한 리소스 그룹과 이 아티클에서 만든 다른 모든 리소스를 만들어야 합니다. 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-1 \
--subnet-prefix 10.0.0.0/24
이 예제에서 Microsoft.Storage
에 대한 서비스 엔드포인트는 서브넷 서브넷-1 을 위해 만들어집니다.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24 \
--service-endpoints Microsoft.Storage
서브넷에 대한 네트워크 액세스 제한
서브넷에 대한 네트워크 액세스를 제한하는 네트워크 보안 그룹 및 규칙을 만듭니다.
네트워크 보안 그룹 만들기
포털의 검색 상자에 네트워크 보안 그룹 을 입력합니다. 검색 결과에서 네트워크 보안 그룹 을 선택합니다.
+ 만들기 를 선택하여 새 네트워크 보안 그룹을 만듭니다.
네트워크 보안 그룹 만들기 의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
test-rg 를 선택합니다.
속성
nsg-1 을 입력합니다.
지역
미국 서부 2 를 선택합니다.
검토 + 생성 를 선택합니다.
만들기 를 선택합니다.
네트워크 보안 그룹 규칙 만들기
포털의 검색 상자에 네트워크 보안 그룹 을 입력합니다. 검색 결과에서 네트워크 보안 그룹 을 선택합니다.
nsg-1 을 선택합니다.
설정 을 확장합니다. 아웃바운드 보안 규칙 을 선택합니다.
+ 추가 를 선택하여 새 아웃바운드 보안 규칙을 추가합니다.
아웃바운드 보안 규칙 추가 에서 다음 정보를 입력하거나 선택합니다.
설정
값
원본
서비스 태그 를 선택합니다.
원본 서비스 태그
VirtualNetwork 를 선택합니다.
원본 포트 범위
* 를 입력합니다.
대상
서비스 태그 를 선택합니다.
대상 서비스 태그
스토리지 를 선택합니다.
서비스
사용자 지정 을 선택합니다.
대상 포트 범위
* 를 입력합니다.
프로토콜
모두 를 선택합니다.
작업
수락 을 선택합니다.
우선 순위
100 을 입력합니다.
속성
allow-storage-all 을 입력합니다.
추가 를 선택합니다.
+ 추가 를 선택하여 다른 아웃바운드 보안 규칙을 추가합니다.
아웃바운드 보안 규칙 추가 에서 다음 정보를 입력하거나 선택합니다.
설정
값
원본
서비스 태그 를 선택합니다.
원본 서비스 태그
VirtualNetwork 를 선택합니다.
원본 포트 범위
* 를 입력합니다.
대상
서비스 태그 를 선택합니다.
대상 서비스 태그
인터넷 을 선택합니다.
서비스
사용자 지정 을 선택합니다.
대상 포트 범위
* 를 입력합니다.
프로토콜
모두 를 선택합니다.
작업
거부 를 선택합니다.
우선 순위
110 을 입력합니다.
속성
deny-internet-all 을 입력합니다.
추가 를 선택합니다.
설정 을 확장합니다. 서브넷 을 선택합니다.
연결 을 선택합니다.
서브넷 연결 에서 다음 정보를 입력하거나 선택합니다.
설정
값
가상 네트워크
vnet-1(test-rg) 을 선택합니다.
서브넷
subnet-1 을 선택합니다.
확인 을 선택합니다.
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
New-AzNetworkSecurityGroup 을 사용하여 네트워크 보안 그룹을 만듭니다. 다음 예제에서는 nsg-1 이라는 네트워크 보안 그룹을 만듭니다.
$securityRules = @($rule1, $rule2)
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
SecurityRules = $securityRules
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
Set-AzVirtualNetworkSubnetConfig 를 사용하여 서브넷-1 서브넷에 네트워크 보안 그룹을 연결한 다음 가상 네트워크에 서브넷 구성을 씁니다. 다음 예제에서는 nsg-1 네트워크 보안 그룹을 서브넷-1 서브넷에 연결합니다.
$subnetConfig = @{
VirtualNetwork = $VirtualNetwork
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
ServiceEndpoint = "Microsoft.Storage"
NetworkSecurityGroup = $nsg
}
Set-AzVirtualNetworkSubnetConfig @subnetConfig
$virtualNetwork | Set-AzVirtualNetwork
az network nsg create 를 사용하여 네트워크 보안 그룹을 만듭니다. 다음 예제에서는 nsg-1 이라는 네트워크 보안 그룹을 만듭니다.
az network nsg create \
--resource-group test-rg \
--name nsg-1
az network vnet subnet update 를 사용하여 서브넷-1 서브넷에 네트워크 보안 그룹을 연결합니다. 다음 예제에서는 nsg-1 네트워크 보안 그룹을 서브넷-1 서브넷에 연결합니다.
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-1 \
--resource-group test-rg \
--network-security-group nsg-1
az network nsg rule create 를 사용하여 보안 규칙을 만듭니다. 다음에 나오는 규칙은 Azure Storage 서비스에 지정된 공용 IP 주소에 대한 아웃바운드 액세스를 허용합니다.
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--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-1 \
--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 "*"
Azure Storage 계정에 대한 네트워크 액세스 제한
서비스 엔드포인트에 사용할 수 있는 Azure 서비스를 통해 만든 리소스에 대한 네트워크 액세스를 제한하는 데 필요한 단계는 서비스에 따라 다릅니다. 각 서비스에 대한 특정 단계는 개별 서비스의 설명서를 참조하세요. 이 문서의 나머지 부분에는 Azure Storage 계정에 대한 네트워크 액세스를 제한하는 단계가 예제로 포함되어 있습니다.
두 개의 스토리지 계정 만들기
포털의 검색 상자에 Storage 계정 을 입력합니다. 검색 결과에서 스토리지 계정 을 선택합니다.
+ 만들기 를 선택하여 새 스토리지 계정을 만듭니다.
스토리지 계정 만들기에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
test-rg 를 선택합니다.
인스턴스 세부 정보
스토리지 계정 이름
allowedaccount(난수) 를 입력합니다. 참고: 스토리지 계정 이름은 고유해야 합니다. 이름 allowedaccount
끝에 난수를 추가합니다 .
지역
미국 서부 2 를 선택합니다.
성능
표준 을 선택합니다.
중복
LRS(로컬 중복 스토리지) 를 선택합니다.
데이터 보호 탭에 도달할 때까지 다음 을 선택합니다.
Recovery 모든 옵션을 선택 취소합니다.
검토 + 생성 를 선택합니다.
만들기 를 선택합니다.
이전 단계를 반복하여 다음 정보를 사용하여 다른 스토리지 계정을 만듭니다.
설정
값
스토리지 계정 이름
deniedaccount(난수) 를 입력합니다.
New-AzStorageAccount 를 사용하여 허용된 Azure Storage 계정을 만듭니다.
$storageAcctParams = @{
Location = 'westus2'
Name = 'allowedaccount'
ResourceGroupName = 'test-rg'
SkuName = 'Standard_LRS'
Kind = 'StorageV2'
}
New-AzStorageAccount @storageAcctParams
동일한 명령을 사용하여 거부된 Azure Storage 계정을 만들지만 이름을 deniedaccount
(으)로 변경합니다.
$storageAcctParams = @{
Location = 'westus2'
Name = 'deniedaccount'
ResourceGroupName = 'test-rg'
SkuName = 'Standard_LRS'
Kind = 'StorageV2'
}
New-AzStorageAccount @storageAcctParams
az storage account create 를 사용하여 Azure Storage 계정을 만듭니다.
storageAcctName1="allowedaccount"
az storage account create \
--name $storageAcctName1 \
--resource-group test-rg \
--sku Standard_LRS \
--kind StorageV2
동일한 명령을 사용하여 거부된 Azure Storage 계정을 만들지만 이름을 deniedaccount
(으)로 변경합니다.
storageAcctName2="deniedaccount"
az storage account create \
--name $storageAcctName2 \
--resource-group test-rg \
--sku Standard_LRS \
--kind StorageV2
파일 공유 만들기
포털의 검색 상자에 Storage 계정 을 입력합니다. 검색 결과에서 스토리지 계정 을 선택합니다.
allowedaccount(난수) 를 선택합니다.
Data Storage 섹션을 확장하고 파일 공유 를 선택합니다.
+ 파일 공유 를 선택합니다.
새 파일 공유 에서 다음 정보를 입력하거나 선택합니다.
나머지 설정을 기본값으로 두고 검토 + 만들기 를 선택합니다.
만들기 를 실행합니다.
이전 단계를 반복하여 deniedaccount(난수) 파일 공유를 만듭니다.
허용되는 스토리지 계정 파일 공유 만들기
Get-AzStorageAccountKey 를 사용하여 허용된 스토리지 계정에 대한 스토리지 계정 키를 가져옵니다. 다음 단계에서 이 키를 사용하여 허용된 스토리지 계정에 파일 공유를 만듭니다.
$storageAcctName1 = "allowedaccount"
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
AccountName = $storageAcctName1
}
$storageAcctKey1 = (Get-AzStorageAccountKey @storageAcctParams1).Value[0]
New-AzStorageContext 를 사용하여 스토리지 계정 및 키에 대한 컨텍스트를 만듭니다. 이 컨텍스트는 스토리지 계정 이름 및 계정 키를 캡슐화합니다.
$storageContext1 = New-AzStorageContext $storageAcctName1 $storageAcctKey1
New-AzStorageShare 를 사용하여 파일 공유를 만듭니다.
$share1 = New-AzStorageShare file-share -Context $storageContext1
거부된 스토리지 계정 파일 공유 만들기
Get-AzStorageAccountKey 를 사용하여 허용된 스토리지 계정에 대한 스토리지 계정 키를 가져옵니다. 다음 단계에서 이 키를 사용하여 거부된 스토리지 계정에 파일 공유를 만듭니다.
$storageAcctName2 = "deniedaccount"
$storageAcctParams2 = @{
ResourceGroupName = "test-rg"
AccountName = $storageAcctName2
}
$storageAcctKey2 = (Get-AzStorageAccountKey @storageAcctParams2).Value[0]
New-AzStorageContext 를 사용하여 스토리지 계정 및 키에 대한 컨텍스트를 만듭니다. 이 컨텍스트는 스토리지 계정 이름 및 계정 키를 캡슐화합니다.
$storageContext2= New-AzStorageContext $storageAcctName2 $storageAcctKey2
New-AzStorageShare 를 사용하여 파일 공유를 만듭니다.
$share2 = New-AzStorageShare file-share -Context $storageContext2
허용되는 스토리지 계정 파일 공유 만들기
az storage account show-connection-string 을 사용하여 스토리지 계정에 대한 연결 문자열을 변수로 검색합니다. 이 연결 문자열은 이후 단계에서 파일 공유를 만드는 데 사용됩니다.
saConnectionString1=$(az storage account show-connection-string \
--name $storageAcctName1 \
--resource-group test-rg \
--query 'connectionString' \
--out tsv)
az storage share create 를 사용하여 스토리지 계정에서 파일 공유를 만듭니다. 이후 단계에서 네트워크 액세스를 확인하기 위해 이 파일 공유가 탑재됩니다.
az storage share create \
--name file-share \
--quota 2048 \
--connection-string $saConnectionString1 > /dev/null
거부된 스토리지 계정 파일 공유 만들기
az storage account show-connection-string 을 사용하여 스토리지 계정에 대한 연결 문자열을 변수로 검색합니다. 이 연결 문자열은 이후 단계에서 파일 공유를 만드는 데 사용됩니다.
saConnectionString2=$(az storage account show-connection-string \
--name $storageAcctName2 \
--resource-group test-rg \
--query 'connectionString' \
--out tsv)
az storage share create 를 사용하여 스토리지 계정에서 파일 공유를 만듭니다. 이후 단계에서 네트워크 액세스를 확인하기 위해 이 파일 공유가 탑재됩니다.
az storage share create \
--name file-share \
--quota 2048 \
--connection-string $saConnectionString2 > /dev/null
스토리지 계정에 대한 모든 네트워크 액세스 거부
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 스토리지 계정에 대한 네트워크 액세스를 제한하려면 특정 네트워크의 연결만 허용하도록 스토리지 계정을 구성할 수 있습니다. 이 예제에서는 이전에 만든 가상 네트워크 서브넷의 연결만 허용하도록 스토리지 계정을 구성합니다.
포털의 검색 상자에 Storage 계정 을 입력합니다. 검색 결과에서 스토리지 계정 을 선택합니다.
allowedaccount(난수) 를 선택합니다.
보안 + 네트워킹 을 확장하고 네트워킹 을 선택합니다.
방화벽 및 가상 네트워크 의 공용 네트워크 액세스 에서 가상 네트워크 및 IP 주소 사용하도록 설정 을 선택합니다.
가상 네트워크 에서 + 기존 가상 네트워크 추가 를 선택합니다.
네트워크 추가 에서 다음 정보를 입력하거나 선택합니다.
설정
값
Subscription
구독을 선택합니다.
가상 네트워크
vnet-1 을 선택합니다.
서브넷
subnet-1 을 선택합니다.
추가 를 선택합니다.
저장 을 선택합니다.
이전 단계를 반복하여 deniedaccount(난수) 에 대한 네트워크 액세스를 거부합니다.
Update-AzStorageAccountNetworkRuleSet 을 사용하여 이전에 만든 가상 네트워크 및 서브넷을 제외한 스토리지 계정에 대한 액세스를 거부합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
DefaultAction = "Deny"
}
Update-AzStorageAccountNetworkRuleSet @storageAcctParams1
$storageAcctParams2 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName2
DefaultAction = "Deny"
}
Update-AzStorageAccountNetworkRuleSet @storageAcctParams2
가상 네트워크 서브넷에서만 네트워크 액세스 사용
Get-AzVirtualNetwork 를 사용하여 생성된 가상 네트워크를 검색한 다음, Get-AzVirtualNetworkSubnetConfig 를 사용하여 프라이빗 서브넷 개체를 변수로 검색합니다.
$privateSubnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-1"
}
$privateSubnet = Get-AzVirtualNetwork @privateSubnetParams | Get-AzVirtualNetworkSubnetConfig -Name "subnet-1"
Add-AzStorageAccountNetworkRule 을 사용하여 서브넷-1 서브넷에서 스토리지 계정에 대한 네트워크 액세스를 허용합니다.
$networkRuleParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
VirtualNetworkResourceId = $privateSubnet.Id
}
Add-AzStorageAccountNetworkRule @networkRuleParams1
$networkRuleParams2 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName2
VirtualNetworkResourceId = $privateSubnet.Id
}
Add-AzStorageAccountNetworkRule @networkRuleParams2
기본적으로 스토리지 계정은 네트워크에 있는 클라이언트의 네트워크 연결을 허용합니다. 선택한 네트워크에 대한 액세스를 제한하려면 az storage account update 를 사용하여 기본 작업을 거부 로 변경합니다. 네트워크 액세스가 거부되면 네트워크에서 스토리지 계정에 액세스할 수 없습니다.
az storage account update \
--name $storageAcctName1 \
--resource-group test-rg \
--default-action Deny
az storage account update \
--name $storageAcctName2 \
--resource-group test-rg \
--default-action Deny
가상 네트워크 서브넷에서만 네트워크 액세스 사용
az storage account network-rule add 를 사용하여 서브넷-1 서브넷에서 스토리지 계정에 대한 네트워크 액세스를 허용합니다.
az storage account network-rule add \
--resource-group test-rg \
--account-name $storageAcctName1 \
--vnet-name vnet-1 \
--subnet subnet-1
az storage account network-rule add \
--resource-group test-rg \
--account-name $storageAcctName2 \
--vnet-name vnet-1 \
--subnet subnet-1
유효한 스토리지 계정에 대한 액세스를 허용하는 정책 적용
서비스 엔드포인트 정책을 만들 수 있습니다. 이 정책은 가상 네트워크의 사용자가 안전하고 허용된 Azure Storage 계정에만 액세스할 수 있도록 합니다. 이 정책에는 서비스 엔드포인트를 통해 스토리지에 연결된 가상 네트워크 서브넷에 적용된 허용된 스토리지 계정 목록이 포함되어 있습니다.
서비스 엔드포인트 정책 만들기
이 섹션에서는 서비스 엔드포인트를 통해 액세스할 수 있도록 허용된 리소스 목록을 사용하여 정책 정의를 만듭니다.
포털의 검색 상자에 서비스 엔드포인트 정책 을 입력합니다. 검색 결과에서 서비스 엔드포인트 정책 을 선택합니다.
+ 만들기 를 선택하여 새 서비스 엔드포인트 정책을 만듭니다.
서비스 엔드포인트 정책 만들기 의 기본 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
test-rg 를 선택합니다.
인스턴스 세부 정보
속성
service-endpoint-policy 를 입력합니다.
위치
미국 서부 2 를 선택합니다.
다음: 정책 정의 를 선택합니다.
리소스 에서 + 리소스 추가 를 선택합니다.
리소스 추가 에서 다음 정보를 입력하거나 선택합니다.
설정
값
서비스
Microsoft.Storage 를 선택합니다.
범위
단일 계정 선택
Subscription
구독을 선택합니다.
Resource group
test-rg 를 선택합니다.
리소스
allowedaccount(난수) 을 선택합니다.
추가 를 선택합니다.
검토 + 생성 를 선택합니다.
만들기 를 선택합니다.
첫 번째(허용) 스토리지 계정에 대한 리소스 ID를 검색하려면 Get-AzStorageAccount 을 사용합니다.
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
}
$resourceId = (Get-AzStorageAccount @storageAcctParams1).id
이전 리소스를 허용하는 정책 정의를 만들려면 New-AzServiceEndpointPolicyDefinition 을 사용합니다.
$policyDefinitionParams = @{
Name = "policy-definition"
Description = "Service Endpoint Policy Definition"
Service = "Microsoft.Storage"
ServiceResource = $resourceId
}
$policyDefinition = New-AzServiceEndpointPolicyDefinition @policyDefinitionParams
New-AzServiceEndpointPolicy 를 사용하여 정책 정의를 사용하여 서비스 엔드포인트 정책을 만듭니다.
$sepolicyParams = @{
ResourceGroupName = "test-rg"
Name = "service-endpoint-policy"
Location = "westus2"
ServiceEndpointPolicyDefinition = $policyDefinition
}
$sepolicy = New-AzServiceEndpointPolicy @sepolicyParams
서비스 엔드포인트 정책은 서비스 엔드포인트에 적용됩니다. 먼저 서비스 엔드포인트 정책을 만듭니다. 그런 다음, 이 서브넷에 대해 승인할 Azure Storage 계정에 대해 이 정책에 따라 정책 정의를 만듭니다.
az storage account show 를 사용하여 허용되는 스토리지 계정의 리소스 ID를 가져옵니다.
serviceResourceId=$(az storage account show --name allowedaccount --query id --output tsv)
서비스 엔드포인트 정책 만들기
az network service-endpoint policy create \
--resource-group test-rg \
--name service-endpoint-policy \
--location westus2
이전 Azure Storage 계정을 서비스 엔드포인트 정책에 허용하기 위한 정책 정의 만들기 및 추가
az network service-endpoint policy-definition create \
--resource-group test-rg \
--policy-name service-endpoint-policy \
--name policy-definition \
--service "Microsoft.Storage" \
--service-resources $serviceResourceId
서비스 엔드포인트 정책을 서브넷에 연결
서비스 엔드포인트 정책을 만든 후에는 Azure Storage의 서비스 엔드포인트 구성을 통해 대상 서브넷에 연결합니다.
포털의 검색 상자에 서비스 엔드포인트 정책 을 입력합니다. 검색 결과에서 서비스 엔드포인트 정책 을 선택합니다.
service-endpoint-policy 를 선택합니다.
설정 을 확장하고 연결된 서브넷 을 선택합니다.
+ 서브넷 연결 편집 을 선택합니다.
서브넷 연결 편집 에서 vnet-1 및 서브넷-1 을 선택합니다.
적용 을 선택합니다.
Set-AzVirtualNetworkSubnetConfig 을 사용하여 서비스 엔드포인트 정책을 서브넷에 연결합니다.
$subnetConfigParams = @{
VirtualNetwork = $VirtualNetwork
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
NetworkSecurityGroup = $nsg
ServiceEndpoint = "Microsoft.Storage"
ServiceEndpointPolicy = $sepolicy
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
$virtualNetwork | Set-AzVirtualNetwork
az network vnet subnet update 를 사용하여 서비스 엔드포인트 정책을 서브넷에 연결합니다.
az network vnet subnet update \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--service-endpoints Microsoft.Storage \
--service-endpoint-policy service-endpoint-policy
Warning
주어진 서브넷에 정책을 연결하기 전에 서브넷에서 액세스된 모든 리소스를 정책 정의에 추가했는지 확인합니다. 정책이 연결되면 서비스에 엔드포인트를 통해 허용 목록 리소스에 대한 액세스만 허용됩니다.
서비스 엔드포인트 정책에 연결된 서브넷에 관리되는 Azure 서비스가 없는지 확인합니다.
모든 지역의 Azure Storage 리소스에 대한 액세스는 이 서브넷의 서비스 엔드포인트 정책에 따라 제한됩니다.
Azure Storage 계정에 대한 액세스 제한 유효성 검사
스토리지 계정에 대한 네트워크 액세스를 테스트하려면 서브넷에 VM을 배포합니다.
가상 머신 배포
포털의 검색 상자에 가상 머신 을 입력합니다. 검색 결과에서 가상 머신 을 선택합니다.
가상 머신 만들기 페이지의 기본 사항 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
Subscription
구독을 선택합니다.
Resource group
test-rg 를 선택합니다.
인스턴스 세부 정보
가상 머신 이름
vm-1 을 입력합니다.
지역
미국 서부 2 를 선택합니다.
가용성 옵션
인프라 중복이 필요하지 않습니다. 를 선택합니다.
보안 유형
표준 을 선택합니다.
이미지
Windows Server 2022 Datacenter - x64 Gen2 를 선택합니다.
크기
크기를 선택합니다.
관리자 계정
사용자 이름
사용자 이름을 입력합니다.
암호
암호를 입력합니다.
암호 확인
암호를 다시 입력합니다.
인바운드 포트 규칙
다음: 디스크 를 선택한 다음 다음: 네트워킹 을 선택합니다.
네트워킹 탭에서 다음 정보를 입력하거나 선택합니다.
설정
값
네트워크 인터페이스
가상 네트워크
vnet-1 을 선택합니다.
서브넷
subnet-1(10.0.0.0/24) 을 선택합니다.
공용 IP
없음 을 선택합니다.
NIC 네트워크 보안 그룹 추가
없음 을 선택합니다.
나머지 설정을 기본값으로 두고 검토 + 만들기 를 선택합니다.
만들기 를 실행합니다.
New-AzVM 을 사용하여 서브넷-1 서브넷에서 가상 머신을 만듭니다. 다음 명령을 실행하면 자격 증명을 묻는 메시지가 표시됩니다. 입력하는 값은 VM에 대한 사용자 이름과 암호로 구성됩니다.
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
Name = "vm-1"
}
New-AzVm @vmParams
az vm create 을 사용하여 서브넷-1 서브넷에서 VM을 만듭니다.
az vm create \
--resource-group test-rg \
--name vm-1 \
--image Win2022Datacenter \
--admin-username azureuser \
--vnet-name vnet-1 \
--subnet subnet-1
다음 단계를 계속하기 전에 가상 머신이 배포를 완료할 때까지 기다리세요.
‘허용된’ 스토리지 계정에 대한 액세스를 확인합니다.
Azure 포털 에 로그인합니다.
포털의 검색 상자에 Storage 계정 을 입력합니다. 검색 결과에서 스토리지 계정 을 선택합니다.
allowedaccount(난수) 를 선택합니다.
보안 + 네트워킹 을 확장하고 액세스 키 를 선택합니다.
key1 값을 복사합니다. 이 키를 사용하여 이전에 만든 가상 머신에서 스토리지 계정에 드라이브를 매핑합니다.
포털의 검색 상자에 가상 머신 을 입력합니다. 검색 결과에서 가상 머신 을 선택합니다.
vm-1 을 선택합니다.
작업 을 확장합니다. 실행 명령 을 선택합니다.
RunPowerShellScript 를 선택합니다.
명령 스크립트 실행 에서 다음 스크립트를 붙여넣습니다.
## Enter the storage account key for the allowed storage account that you recorded earlier.
$storageAcctKey1 = (pasted from procedure above)
$acctKey = ConvertTo-SecureString -String $storageAcctKey1 -AsPlainText -Force
## Replace the login account with the name of the storage account you created.
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList ("Azure\allowedaccount"), $acctKey
## Replace the storage account name with the name of the storage account you created.
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\allowedaccount.file.core.windows.net\file-share" -Credential $credential
실행 을 선택합니다.
드라이브 맵이 성공하면 출력 상자의 출력은 다음 예제와 유사하게 보입니다.
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Z FileSystem \\allowedaccount.file.core.windows.net\fil..
거부된 스토리지 계정에 대한 액세스가 거부됨 확인
포털의 검색 상자에 Storage 계정 을 입력합니다. 검색 결과에서 스토리지 계정 을 선택합니다.
deniedaccount(난수) 를 선택합니다.
보안 + 네트워킹 을 확장하고 액세스 키 를 선택합니다.
key1 값을 복사합니다. 이 키를 사용하여 이전에 만든 가상 머신에서 스토리지 계정에 드라이브를 매핑합니다.
포털의 검색 상자에 가상 머신 을 입력합니다. 검색 결과에서 가상 머신 을 선택합니다.
vm-1 을 선택합니다.
작업 을 확장합니다. 실행 명령 을 선택합니다.
RunPowerShellScript 를 선택합니다.
명령 스크립트 실행 에서 다음 스크립트를 붙여넣습니다.
## Enter the storage account key for the denied storage account that you recorded earlier.
$storageAcctKey2 = (pasted from procedure above)
$acctKey = ConvertTo-SecureString -String $storageAcctKey2 -AsPlainText -Force
## Replace the login account with the name of the storage account you created.
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList ("Azure\deniedaccount"), $acctKey
## Replace the storage account name with the name of the storage account you created.
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\deniedaccount.file.core.windows.net\file-share" -Credential $credential
실행 을 선택합니다.
출력 상자에 다음 오류 메시지가 표시됩니다.
New-PSDrive : Access is denied
At line:1 char:1
+ New-PSDrive -Name Z -PSProvider FileSystem -Root "\\deniedaccount8675 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Z:PSDriveInfo) [New-PSDrive], Win32Exception
+ FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
스토리지 계정에 대한 액세스를 제한하는 서비스 엔드포인트 정책으로 인해 드라이브 맵이 거부되었습니다.
만든 리소스 사용을 마치면 리소스 그룹과 해당 리소스를 모두 삭제할 수 있습니다.
Azure Portal에서 리소스 그룹 을 검색하고 선택합니다.
리소스 그룹 페이지에서 test-rg 리소스 그룹을 선택합니다.
test-rg 페이지에서 리소스 그룹 삭제 를 선택합니다.
삭제 확인을 위한 리소스 그룹 이름 입력 에 test-rg 를 입력한 다음 삭제 를 선택합니다.
더 이상 필요하지 않은 경우 Remove-AzResourceGroup 을 사용하여 리소스 그룹 및 해당 그룹에 포함된 모든 리소스를 제거할 수 있습니다.
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
더 이상 필요하지 않은 경우 az group delete 를 사용하여 리소스 그룹 및 그룹에 포함된 모든 리소스를 제거합니다.
az group delete \
--name test-rg \
--yes \
--no-wait
다음 단계
이 자습서에서는 서비스 엔드포인트 정책을 만들어 서브넷에 연결했습니다. 서비스 엔드포인트 정책에 대한 자세한 내용은 서비스 엔드포인트 정책 개요 를 참조하세요.