네트워크 보안 규칙 진단
이 문서의 내용
이 문서에서는 Azure Network Watcher NSG 진단을 사용하여 네트워크 보안 그룹 및 Azure Virtual Network Manager 를 통해 Azure 트래픽에 적용되는 보안 규칙을 확인하고 문제를 해결하는 방법을 알아봅니다. NSG 진단은 적용된 보안 규칙에 따라 트래픽이 허용되거나 거부되는지 확인합니다.
이 문서의 예제에서는 잘못 구성된 네트워크 보안 그룹이 Azure Bastion을 사용하여 가상 머신에 연결하는 것을 방지하는 방법을 보여 줍니다.
필수 조건
활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다 .
Azure Cloud Shell 또는 Azure PowerShell.
이 문서의 단계에서는 Azure Cloud Shell 에서 Azure PowerShell cmdlet을 대화형으로 실행합니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloud Shell 을 엽니다. 복사 를 선택하여 코드를 복사한 다음, 복사한 코드를 Cloud Shell에 붙여넣어 실행합니다. Azure Portal 내에서 Cloud Shell을 실행할 수도 있습니다.
Azure PowerShell을 로컬로 설치하여 cmdlet을 실행할 수도 있습니다. 이 문서에는 Az PowerShell 모듈이 필요합니다. 자세한 내용은 Azure PowerShell 설치 방법 을 참조하세요. 설치되어 있는 버전을 확인하려면 Get-InstalledModule -Name Az
을 실행합니다. PowerShell을 로컬로 실행하는 경우 Connect-AzAccount cmdlet을 사용하여 Azure에 로그인합니다.
활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다 .
Azure Cloud Shell 또는 Azure CLI.
이 문서의 단계에서는 Azure Cloud Shell 에서 대화형으로 Azure CLI 명령을 실행합니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloud Shell 을 엽니다. 복사 를 선택하여 코드를 복사하고 Cloud Shell에 붙여넣어 실행합니다. Cloud Shell은 Azure Portal 내에서도 실행할 수 있습니다.
Azure CLI를 로컬로 설치 하여 명령을 실행할 수도 있습니다. Azure CLI를 로컬로 실행하는 경우 az login 명령을 사용하여 Azure에 로그인합니다.
가상 네트워크 및 Bastion 호스트 만들기
이 섹션에서는 두 개의 서브넷과 Azure Bastion 호스트가 있는 가상 네트워크를 만듭니다. 첫 번째 서브넷은 가상 머신에 사용되고 두 번째 서브넷은 Bastion 호스트에 사용됩니다. 또한 네트워크 보안 그룹을 만들고 첫 번째 서브넷에 적용합니다.
포털 상단에 있는 검색 상자에 가상 네트워크 를 입력합니다. 검색 결과에서 가상 네트워크 를 선택합니다.
+ 만들기 를 선택합니다. 가상 네트워크 만들기 의 기본 탭에서 다음 값을 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
구독
Azure 구독을 선택합니다.
리소스 그룹
새로 만들기 를 선택합니다. 이름 에 myResourceGroup 을 입력합니다. 확인 을 선택합니다.
인스턴스 세부 정보
가상 네트워크 이름
myVNet 을 입력합니다.
지역
(미국) 미국 동부 를 선택합니다.
보안 탭을 선택하거나 페이지 하단에 있는 다음 단추를 선택합니다.
Azure Bastion 에서 Azure Bastion 사용 을 선택하고 기본값을 적용합니다.
설정
값
Azure Bastion 호스트 이름
myVNet-Bastion .
Azure Bastion 공용 IP 주소
(신규) myVNet-bastion-publicIpAddress .
IP 주소 탭을 선택하거나 페이지 하단에 있는 다음 단추를 선택합니다.
기본 IP 주소 공간 10.0.0.0/16 을 적용하고 연필 아이콘을 선택하여 기본 서브넷을 편집합니다. 서브넷 편집 페이지에서 다음 값을 입력합니다.
설정
값
서브넷 세부 정보
이름
mySubnet 을 입력합니다.
보안
네트워크 보안 그룹
새로 만들기 를 선택합니다. 이름 에 mySubnet-nsg 를 입력합니다. 확인 을 선택합니다.
검토 + 만들기 를 선택합니다.
설정을 검토한 다음, 만들기 를 선택합니다.
New-AzResourceGroup 을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
# Create a resource group.
New-AzResourceGroup -Name 'myResourceGroup' -Location 'eastus'
New-AzNetworkSecurityGroup 을 사용하여 기본 네트워크 보안 그룹을 만듭니다.
# Create a network security group.
$networkSecurityGroup = New-AzNetworkSecurityGroup -Name 'mySubnet-nsg' -ResourceGroupName 'myResourceGroup' -Location 'eastus'
New-AzVirtualNetworkSubnetConfig 를 사용하여 가상 머신 서브넷과 Bastion 호스트 서브넷에 대한 서브넷 구성을 만듭니다.
# Create subnets configuration.
$firstSubnet = New-AzVirtualNetworkSubnetConfig -Name 'mySubnet' -AddressPrefix '10.0.0.0/24' -NetworkSecurityGroup $networkSecurityGroup
$secondSubnet = New-AzVirtualNetworkSubnetConfig -Name 'AzureBastionSubnet' -AddressPrefix '10.0.1.0/26'
New-AzVirtualNetwork 를 사용하여 가상 네트워크를 만듭니다.
# Create a virtual network.
$vnet = New-AzVirtualNetwork -Name 'myVNet' -ResourceGroupName 'myResourceGroup' -Location 'eastus' -AddressPrefix '10.0.0.0/16' -Subnet $firstSubnet, $secondSubnet
New-AzPublicIpAddress 를 사용하여 Bastion 호스트에 필요한 공용 IP 주소 리소스를 만듭니다.
# Create a public IP address for Azure Bastion.
New-AzPublicIpAddress -ResourceGroupName 'myResourceGroup' -Name 'myBastionIp' -Location 'eastus' -AllocationMethod 'Static' -Sku 'Standard'
New-AzBastion 을 사용하여 Bastion 호스트를 만듭니다.
# Create an Azure Bastion host.
New-AzBastion -ResourceGroupName 'myResourceGroup' -Name 'myVNet-Bastion' -PublicIpAddressRgName 'myResourceGroup' -PublicIpAddressName 'myBastionIp' -VirtualNetwork $vnet
az group create 를 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
# Create a resource group.
az group create --name 'myResourceGroup' --location 'eastus'
az network nsg create 를 사용하여 네트워크 보안 그룹을 만듭니다.
# Create a network security group.
az network nsg create --name 'mySubnet-nsg' --resource-group 'myResourceGroup' --location 'eastus'
az network vnet create 를 사용하여 가상 네트워크를 만듭니다.
az network vnet create --resource-group 'myResourceGroup' --name 'myVNet' --subnet-name 'mySubnet' --subnet-prefixes 10.0.0.0/24 --network-security-group 'mySubnet-nsg'
az network vnet subnet create 를 사용하여 Azure Bastion용 서브넷을 만듭니다.
# Create AzureBastionSubnet.
az network vnet subnet create --name 'AzureBastionSubnet' --resource-group 'myResourceGroup' --vnet-name 'myVNet' --address-prefixes '10.0.1.0/26'
az network public-ip create 를 사용하여 Bastion 호스트용 공용 IP 주소를 만듭니다.
# Create a public IP address resource.
az network public-ip create --resource-group 'myResourceGroup' --name 'myBastionIp' --sku Standard
az network Bastion create 를 사용하여 Bastion 호스트를 만듭니다.
az network bastion create --name 'myVNet-Bastion' --public-ip-address 'myBastionIp' --resource-group 'myResourceGroup' --vnet-name 'myVNet'
Important
시간별 가격 책정은 아웃바운드 데이터 사용량에 관계없이 Bastion 호스트가 배포된 순간부터 시작됩니다. 자세한 내용은 가격 책정 을 참조하세요. 사용이 완료되면 이 리소스를 삭제하는 것이 좋습니다.
가상 머신 만들기
이 섹션에서는 가상 머신과 네트워크 인터페이스에 적용된 네트워크 보안 그룹을 만듭니다.
포털 상단의 검색 상자에 가상 머신 을 입력합니다. 검색 결과에서 가상 머신 을 선택합니다.
만들기 를 선택한 다음, Azure 가상 머신 을 선택합니다.
가상 머신 만들기 의 기본 탭에서 다음 값을 입력하거나 선택합니다.
설정
값
프로젝트 세부 정보
구독
Azure 구독을 선택합니다.
리소스 그룹
myResourceGroup 을 선택합니다.
인스턴스 세부 정보
가상 머신 이름
myVM 을 입력합니다.
지역
(미국) 미국 동부 를 선택합니다.
가용성 옵션
인프라 중복이 필요하지 않습니다. 를 선택합니다.
보안 유형
표준 을 선택합니다.
이미지
Windows Server 2022 Datacenter: Azure Edition - x64 Gen2 를 선택합니다.
크기
크기를 선택하거나 기본 설정을 그대로 둡니다.
관리자 계정
사용자 이름
사용자 이름을 입력합니다.
암호
암호를 입력합니다.
암호 확인
암호를 다시 입력합니다.
네트워킹 탭을 선택하거나 다음: 디스크 , 다음: 네트워킹 을 차례로 선택합니다.
[네트워킹] 탭에서 다음 값을 선택합니다.
설정
값
네트워크 인터페이스
가상 네트워크
myVNet 을 선택합니다.
서브넷
기본값 을 선택합니다.
공용 IP
없음 을 선택합니다.
NIC 네트워크 보안 그룹 추가
기본 을 선택합니다.
공용 인바운드 포트
없음 을 선택합니다.
검토 + 만들기 를 선택합니다.
설정을 검토한 다음, 만들기 를 선택합니다.
New-AzNetworkSecurityGroup 을 사용하여 기본 네트워크 보안 그룹을 만듭니다.
# Create a default network security group.
New-AzNetworkSecurityGroup -Name 'myVM-nsg' -ResourceGroupName 'myResourceGroup' -Location eastus
New-AzVM 을 사용하여 가상 머신을 만듭니다. 메시지가 표시되면 사용자 이름과 암호를 입력합니다.
# Create a virtual machine using the latest Windows Server 2022 image.
New-AzVm -ResourceGroupName 'myResourceGroup' -Name 'myVM' -Location 'eastus' -VirtualNetworkName 'myVNet' -SubnetName 'mySubnet' -SecurityGroupName 'myVM-nsg' -ImageName 'MicrosoftWindowsServer:WindowsServer:2022-Datacenter-azure-edition:latest'
az network nsg create 를 사용하여 네트워크 보안 그룹을 만듭니다.
# Create a default network security group.
az network nsg create --name 'myVM-nsg' --resource-group 'myResourceGroup' --location 'eastus'
az vm create 를 사용하여 가상 머신을 만듭니다. 메시지가 표시되면 사용자 이름과 암호를 입력합니다.
# Create a virtual machine using the latest Windows Server 2022 image.
az vm create --resource-group 'myResourceGroup' --name 'myVM' --location 'eastus' --vnet-name 'myVNet' --subnet 'mySubnet' --public-ip-address '' --nsg 'myVM-nsg' --image 'Win2022AzureEditionCore'
네트워크 보안 그룹에 보안 규칙 추가
이 섹션에서는 myVM 의 네트워크 인터페이스와 연결된 네트워크 보안 그룹에 보안 규칙을 추가합니다. 규칙은 가상 네트워크의 인바운드 트래픽을 거부합니다.
포털 맨 위에 있는 검색 상자에 네트워크 보안 그룹 을 입력합니다. 검색 결과에서 네트워크 보안 그룹을 선택합니다 .
네트워크 보안 그룹 목록에서 myVM-nsg 를 선택합니다.
설정 아래에서 인바운드 보안 규칙 을 선택합니다.
+ 추가 를 선택합니다. 네트워킹 탭에서 다음 값을 입력하거나 선택합니다.
설정
값
원본
서비스 태그 를 선택합니다.
원본 서비스 태그
VirtualNetwork 를 선택합니다.
원본 포트 범위
*를 입력합니다.
대상
모두 를 선택합니다.
서비스
사용자 지정 을 선택합니다.
대상 포트 범위
*를 입력합니다.
프로토콜
모두 를 선택합니다.
작업
거부 를 선택합니다.
우선 순위
1000 을 입력합니다.
이름
DenyVnetInBound 를 입력합니다.
추가 를 선택합니다.
Add-AzNetworkSecurityRuleConfig 를 사용하여 가상 네트워크의 트래픽을 거부하는 보안 규칙을 만듭니다. 그런 다음, Set-AzNetworkSecurityGroup 을 사용하여 네트워크 보안 그룹을 새 보안 규칙으로 업데이트합니다.
# Place the network security group configuration into a variable.
$networkSecurityGroup = Get-AzNetworkSecurityGroup -Name 'myVM-nsg' -ResourceGroupName 'myResourceGroup'
# Create a security rule that denies inbound traffic from the virtual network service tag.
Add-AzNetworkSecurityRuleConfig -Name 'DenyVnetInBound' -NetworkSecurityGroup $networkSecurityGroup `
-Access 'Deny' -Protocol '*' -Direction 'Inbound' -Priority '1000' `
-SourceAddressPrefix 'virtualNetwork' -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '*'
# Updates the network security group.
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $networkSecurityGroup
az network nsg rule create 를 사용하여 네트워크 보안 그룹에 가상 네트워크의 트래픽을 거부하는 보안 규칙을 추가합니다.
# Add to the network security group a security rule that denies inbound traffic from the virtual network service tag.
az network nsg rule create --name 'DenyVnetInBound' --resource-group 'myResourceGroup' --nsg-name 'myVM-nsg' --priority '1000' \
--access 'Deny' --protocol '*' --direction 'Inbound' --source-address-prefixes 'virtualNetwork' --source-port-ranges '*' \
--destination-address-prefixes '*' --destination-port-ranges '*'
참고 항목
VirtualNetwork 서비스 태그는 가상 네트워크의 주소 공간, 연결된 모든 온-프레미스 주소 공간, 피어링된 가상 네트워크, 가상 네트워크 게이트웨이에 연결된 가상 네트워크, 호스트의 IP 주소 및 사용자 정의 경로에 사용되는주소 접두사를 나타냅니다. 자세한 내용은 서비스 태그 를 참조하세요.
가상 머신 트래픽에 적용되는 보안 규칙 확인
NSG 진단을 사용하여 Bastion 서브넷에서 가상 머신으로 시작된 트래픽에 적용되는 보안 규칙을 확인합니다.
포털 상단의 검색 상자에서 Network Watcher 를 검색하여 선택합니다.
네트워크 진단 도구 에서 NSG 진단 을 선택합니다.
NSG 진단 페이지에서 다음 값을 입력하거나 선택합니다.
설정
값
대상 리소스
대상 리소스 종류
가상 머신 을 선택합니다.
가상 머신
myVM 가상 머신을 선택합니다.
트래픽 세부 정보
프로토콜
TCP 를 선택합니다. 다른 사용 가능한 옵션은 Any , UDP 및 ICMP 입니다.
Direction
인바운드 를 선택합니다. 사용 가능한 다른 옵션은 아웃바운드 입니다.
소스 형식
IPv4 주소/CIDR 을 선택합니다. 사용 가능한 다른 옵션은 서비스 태그 입니다.
IPv4 주소/CIDR
Bastion 서브넷의 IP 주소 범위인 10.0.1.0/26 을 입력합니다. 허용되는 값은 단일 IP 주소, 여러 IP 주소, 단일 IP 접두사, 여러 IP 접두사입니다.
대상 IP 주소
myVM 의 IP 주소인 10.0.0.4 기본값을 그대로 둡니다.
대상 포트
*를 입력하여 모든 포트를 포함합니다.
NSG 진단 실행 을 선택하여 테스트를 실행합니다. NSG 진단이 모든 보안 규칙 확인을 완료하면 결과가 표시됩니다.
결과는 Bastion 서브넷의 인바운드 연결에 대해 평가된 세 가지 보안 규칙이 있음을 보여 줍니다.
GlobalRules : 이 보안 관리자 규칙은 Azure Virtual Network 관리를 사용하여 가상 네트워크 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
mySubnet-nsg : 이 네트워크 보안 그룹은 서브넷 수준(가상 머신의 서브넷)에 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
myVM-nsg : 이 네트워크 보안 그룹은 NIC(네트워크 인터페이스) 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 거부합니다.
myVM-nsg 의 세부 정보 보기 를 선택하여 이 네트워크 보안 그룹에 있는 보안 규칙과 트래픽을 거부하는 규칙에 대한 세부 정보를 확인합니다.
myVM-nsg 네트워크 보안 그룹에서 보안 규칙 DenyVnetInBound 는 VirtualNetwork 서비스 태그의 주소 공간에서 가상 머신으로 들어오는 트래픽을 거부합니다. Bastion 호스트는 VirtualNetwork 서비스 태그에 포함된 주소 범위 10.0.1.0/26 의 IP 주소를 사용하여 가상 머신에 연결합니다. 따라서 Bastion 호스트의 연결은 DenyVnetInBound 보안 규칙에 의해 거부됩니다.
Invoke-AzNetworkWatcherNetworkConfigurationDiagnostic 을 사용하여 NSG 진단 세션을 시작합니다.
# Create a profile for the diagnostic session.
$profile = New-AzNetworkWatcherNetworkConfigurationDiagnosticProfile -Direction Inbound -Protocol Tcp -Source 10.0.1.0/26 -Destination 10.0.0.4 -DestinationPort *
# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -Name 'myVM' -ResourceGroupName 'myResourceGroup'
# Start the the NSG diagnostics session.
Invoke-AzNetworkWatcherNetworkConfigurationDiagnostic -Location 'eastus' -TargetResourceId $vm.Id -Profile $profile | Format-List
다음 예제 출력과 유사한 출력이 반환됩니다.
Results : {Microsoft.Azure.Commands.Network.Models.PSNetworkConfigurationDiagnosticResult}
ResultsText : [
{
"Profile": {
"Direction": "Inbound",
"Protocol": "Tcp",
"Source": "10.0.1.0/26",
"Destination": "10.0.0.4",
"DestinationPort": "*"
},
"NetworkSecurityGroupResult": {
"SecurityRuleAccessResult": "Deny",
"EvaluatedNetworkSecurityGroups": [
{
"NetworkSecurityGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkAdmin/providers/Microsoft.Network/networkManagers/GlobalRules",
"MatchedRule": {
"RuleName": "VirtualNetwork",
"Action": "Allow"
},
"RulesEvaluationResult": [
{
"Name": "VirtualNetwork",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
},
{
"NetworkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/mySubnet-nsg",
"MatchedRule": {
"RuleName": "DefaultRule_AllowVnetInBound",
"Action": "Allow"
},
"RulesEvaluationResult": [
{
"Name": "DefaultRule_AllowVnetInBound",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
},
{
"NetworkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myVM-nsg",
"MatchedRule": {
"RuleName": "UserRule_DenyVnetInBound",
"Action": "Deny"
},
"RulesEvaluationResult": [
{
"Name": "UserRule_DenyVnetInBound",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
}
]
}
}
]
결과는 Bastion 서브넷의 인바운드 연결에 대해 평가된 세 가지 보안 규칙이 있음을 보여 줍니다.
GlobalRules : 이 보안 관리자 규칙은 Azure Virtual Network 관리를 사용하여 가상 네트워크 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
mySubnet-nsg : 이 네트워크 보안 그룹은 서브넷 수준(가상 머신의 서브넷)에 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
myVM-nsg : 이 네트워크 보안 그룹은 NIC(네트워크 인터페이스) 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 거부합니다.
myVM-nsg 네트워크 보안 그룹에서 보안 규칙 DenyVnetInBound 는 VirtualNetwork 서비스 태그의 주소 공간에서 가상 머신으로 들어오는 트래픽을 거부합니다. Bastion 호스트는 VirtualNetwork 서비스 태그가 포함된 10.0.1.0/26 의 IP 주소를 사용하여 가상 머신에 연결합니다. 따라서 Bastion 호스트의 연결은 DenyVnetInBound 보안 규칙에 의해 거부됩니다.
az network watcher run-configuration-diagnostic 을 사용하여 NSG 진단 세션을 시작합니다.
# Start the the NSG diagnostics session.
az network watcher run-configuration-diagnostic --resource 'myVM' --resource-group 'myResourceGroup' --resource-type 'virtualMachines' --direction 'Inbound' --protocol 'TCP' --source '10.0.1.0/26' --destination '10.0.0.4' --port '*'
다음 예제 출력과 유사한 출력이 반환됩니다.
{
"results": [
{
"networkSecurityGroupResult": {
"evaluatedNetworkSecurityGroups": [
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet",
"matchedRule": {
"action": "Allow",
"ruleName": "VirtualNetwork"
},
"networkSecurityGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkAdmin/providers/Microsoft.Network/networkManagers/GlobalRules",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "VirtualNetwork",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
},
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet/subnets/mySubnet",
"matchedRule": {
"action": "Allow",
"ruleName": "DefaultRule_AllowVnetInBound"
},
"networkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/mySubnet-nsg",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "DefaultRule_AllowVnetInBound",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
},
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myvm36",
"matchedRule": {
"action": "Deny",
"ruleName": "UserRule_DenyVnetInBound"
},
"networkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myVM-nsg",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "UserRule_DenyVnetInBound",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
}
],
"securityRuleAccessResult": "Deny"
},
"profile": {
"destination": "10.0.0.4",
"destinationPort": "*",
"direction": "Inbound",
"protocol": "TCP",
"source": "10.0.1.0/26"
}
}
]
}
결과는 Bastion 서브넷의 인바운드 연결에 대해 평가된 세 가지 보안 규칙이 있음을 보여 줍니다.
GlobalRules : 이 보안 관리자 규칙은 Azure Virtual Network 관리를 사용하여 가상 네트워크 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
mySubnet-nsg : 이 네트워크 보안 그룹은 서브넷 수준(가상 머신의 서브넷)에 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 허용합니다.
myVM-nsg : 이 네트워크 보안 그룹은 NIC(네트워크 인터페이스) 수준에서 적용됩니다. 규칙은 Bastion 서브넷에서 가상 머신으로의 인바운드 TCP 트래픽을 거부합니다.
myVM-nsg 네트워크 보안 그룹에서 보안 규칙 DenyVnetInBound 는 VirtualNetwork 서비스 태그의 주소 공간에서 가상 머신으로 들어오는 트래픽을 거부합니다. Bastion 호스트는 VirtualNetwork 서비스 태그가 포함된 10.0.1.0/26 의 IP 주소를 사용하여 가상 머신에 연결합니다. 따라서 Bastion 호스트의 연결은 DenyVnetInBound 보안 규칙에 의해 거부됩니다.
Bastion 서브넷의 트래픽을 허용하는 보안 규칙 추가
Azure Bastion을 사용하여 myVM 에 연결하려면 네트워크 보안 그룹에서 Bastion 서브넷의 트래픽을 허용해야 합니다. 10.0.1.0/26 의 트래픽을 허용하려면 DenyVnetInBound 규칙보다 우선 순위가 높은(낮은 우선 순위 번호) 보안 규칙을 추가하거나 DenyVnetInBound 규칙을 편집하여 Bastion 서브넷의 트래픽을 허용합니다.
가상 머신에 대한 트래픽을 거부하는 보안 규칙에 대한 세부 정보를 보여 주는 Network Watcher 페이지에서 네트워크 보안 그룹에 보안 규칙을 추가할 수 있습니다.
Network Watcher 내에서 보안 규칙을 추가하려면 + 보안 규칙 추가 를 선택한 후, 다음 값을 입력하거나 선택합니다.
설정
값
원본
IP 주소 를 선택합니다.
원본 IP 주소/CIDR 범위
Bastion 서브넷의 IP 주소 범위인 10.0.1.0/26 을 입력합니다.
원본 포트 범위
*를 입력합니다.
대상
모두 를 선택합니다.
서비스
사용자 지정 을 선택합니다.
대상 포트 범위
*를 입력합니다.
프로토콜
모두 를 선택합니다.
작업
수락 을 선택합니다.
우선 순위
DenyVnetInBound 규칙에 사용되는 1000 보다 높은 우선 순위인 900 을 입력합니다.
이름
AllowBastionConnections 를 입력합니다.
다시 확인 을 선택하여 진단 세션을 다시 실행합니다. 이제 진단 세션에 Bastion 서브넷의 트래픽이 허용됨이 표시됩니다.
보안 규칙 AllowBastionConnections 는 10.0.1.0/26 의 모든 IP 주소에서 가상 머신으로의 트래픽을 허용합니다. Bastion 호스트는 10.0.1.0/26 의 IP 주소를 사용하므로 가상 머신에 대한 연결은 AllowBastionConnections 보안 규칙에 따라 허용됩니다.
Add-AzNetworkSecurityRuleConfig 를 사용하여 Bastion 서브넷의 트래픽을 허용하는 보안 규칙을 만듭니다. 그런 다음, Set-AzNetworkSecurityGroup 을 사용하여 네트워크 보안 그룹을 새 보안 규칙으로 업데이트합니다.
# Place the network security group configuration into a variable.
$networkSecurityGroup = Get-AzNetworkSecurityGroup -Name 'myVM-nsg' -ResourceGroupName 'myResourceGroup'
# Create a security rule.
Add-AzNetworkSecurityRuleConfig -Name 'AllowBastionConnections' -NetworkSecurityGroup $networkSecurityGroup -Priority '900' -Access 'Allow' `
-Protocol '*' -Direction 'Inbound' -SourceAddressPrefix '10.0.1.0/26' -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '*'
# Updates the network security group.
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $networkSecurityGroup
Invoke-AzNetworkWatcherNetworkConfigurationDiagnostic 을 사용하여 새 NSG 진단 세션을 통해 다시 확인합니다.
# Create a profile for the diagnostic session.
$profile = New-AzNetworkWatcherNetworkConfigurationDiagnosticProfile -Direction 'Inbound' -Protocol 'Tcp' -Source '10.0.1.0/26' -Destination '10.0.0.4' -DestinationPort '*'
# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -Name 'myVM' -ResourceGroupName 'myResourceGroup'
# Start the diagnostic session.
Invoke-AzNetworkWatcherNetworkConfigurationDiagnostic -Location 'eastus' -TargetResourceId $vm.Id -Profile $profile | Format-List
다음 예제 출력과 유사한 출력이 반환됩니다.
Results : {Microsoft.Azure.Commands.Network.Models.PSNetworkConfigurationDiagnosticResult}
ResultsText : [
{
"Profile": {
"Direction": "Inbound",
"Protocol": "Tcp",
"Source": "10.0.1.0/26",
"Destination": "10.0.0.4",
"DestinationPort": "*"
},
"NetworkSecurityGroupResult": {
"SecurityRuleAccessResult": "Allow",
"EvaluatedNetworkSecurityGroups": [
{
"NetworkSecurityGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkAdmin/providers/Microsoft.Network/networkManagers/GlobalRules",
"MatchedRule": {
"RuleName": "VirtualNetwork",
"Action": "Allow"
},
"RulesEvaluationResult": [
{
"Name": "VirtualNetwork",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
},
{
"NetworkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/mySubnet-nsg",
"MatchedRule": {
"RuleName": "DefaultRule_AllowVnetInBound",
"Action": "Allow"
},
"RulesEvaluationResult": [
{
"Name": "DefaultRule_AllowVnetInBound",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
},
{
"NetworkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myVM-nsg",
"MatchedRule": {
"RuleName": "UserRule_AllowBastionConnections",
"Action": "Allow"
},
"RulesEvaluationResult": [
{
"Name": "UserRule_AllowBastionConnections",
"ProtocolMatched": true,
"SourceMatched": true,
"SourcePortMatched": true,
"DestinationMatched": true,
"DestinationPortMatched": true
}
]
}
]
}
}
]
보안 규칙 AllowBastionConnections 는 10.0.1.0/26 의 모든 IP 주소에서 가상 머신으로의 트래픽을 허용합니다. Bastion 호스트는 10.0.1.0/26 의 IP 주소를 사용하므로 가상 머신에 대한 연결은 AllowBastionConnections 보안 규칙에 따라 허용됩니다.
az network nsg rule create 를 사용하여 Bastion 서브넷의 트래픽을 허용하는 보안 규칙을 네트워크 보안 그룹에 추가합니다.
# Add a security rule to the network security group.
az network nsg rule create --name 'AllowBastionConnections' --resource-group 'myResourceGroup' --nsg-name 'myVM-nsg' --priority '900' \
--access 'Allow' --protocol '*' --direction 'Inbound' --source-address-prefixes '10.0.1.0/26' --source-port-ranges '*' \
--destination-address-prefixes '*' --destination-port-ranges '*'
az network watcher run-configuration-diagnostic 을 사용하여 새 NSG 진단 세션을 통해 다시 확인합니다.
# Start the the NSG diagnostics session.
az network watcher run-configuration-diagnostic --resource 'myVM' --resource-group 'myResourceGroup' --resource-type 'virtualMachines' --direction 'Inbound' --protocol 'TCP' --source '10.0.1.0/26' --destination '10.0.0.4' --port '*'
다음 예제 출력과 유사한 출력이 반환됩니다.
{
"results": [
{
"networkSecurityGroupResult": {
"evaluatedNetworkSecurityGroups": [
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet",
"matchedRule": {
"action": "Allow",
"ruleName": "VirtualNetwork"
},
"networkSecurityGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkAdmin/providers/Microsoft.Network/networkManagers/GlobalRules",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "VirtualNetwork",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
},
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet/subnets/mySubnet",
"matchedRule": {
"action": "Allow",
"ruleName": "DefaultRule_AllowVnetInBound"
},
"networkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/mySubnet-nsg",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "DefaultRule_AllowVnetInBound",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
},
{
"appliedTo": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myvm36",
"matchedRule": {
"action": "Allow",
"ruleName": "UserRule_AllowBastionConnections"
},
"networkSecurityGroupId": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myVM-nsg",
"rulesEvaluationResult": [
{
"destinationMatched": true,
"destinationPortMatched": true,
"name": "UserRule_AllowBastionConnections",
"protocolMatched": true,
"sourceMatched": true,
"sourcePortMatched": true
}
]
}
],
"securityRuleAccessResult": "Allow"
},
"profile": {
"destination": "10.0.0.4",
"destinationPort": "*",
"direction": "Inbound",
"protocol": "TCP",
"source": "10.0.1.0/26"
}
}
]
}
보안 규칙 AllowBastionConnections 는 10.0.1.0/26 의 모든 IP 주소에서 가상 머신으로의 트래픽을 허용합니다. Bastion 호스트는 10.0.1.0/26 의 IP 주소를 사용하므로 가상 머신에 대한 연결은 AllowBastionConnections 보안 규칙에 따라 허용됩니다.
리소스 정리
더 이상 필요하지 않은 경우 리소스 그룹 및 해당 그룹에 포함된 모든 리소스를 삭제합니다.
포털 맨 위에 있는 검색 상자에 myResourceGroup 을 입력합니다. 검색 결과에서 myResourceGroup 을 선택합니다.
리소스 그룹 삭제 를 선택합니다.
리소스 그룹 삭제 에 myResourceGroup 을 입력한 다음, 삭제 를 선택합니다.
삭제 를 선택하여 리소스 그룹 및 리소스 그룹의 모든 리소스의 삭제를 확인합니다.
Remove-AzResourceGroup 을 사용하여 리소스 그룹과 그룹에 포함된 모든 리소스를 삭제합니다.
# Delete the resource group and all the resources it contains.
Remove-AzResourceGroup -Name 'myResourceGroup' -Force
az group delete 를 사용하여 리소스 그룹 및 그룹에 포함된 모든 리소스를 제거합니다.
# Delete the resource group and all the resources it contains.
az group delete --name 'myResourceGroup' --yes --no-wait
관련 콘텐츠