Translated ['', 'src/pentesting-cloud/azure-security/az-services/vms/az-

This commit is contained in:
Translator
2026-01-21 21:27:37 +00:00
parent 7e7077bb2d
commit 24a827d520

View File

@@ -4,25 +4,25 @@
## 기본 정보
Azure는 사용자가 Azure 클라우드 내에**격리된** **네트워크**를 생성할 수 있도록 하는 **가상 네트워크(VNet)**를 제공합니다. 이러한 VNet 내에서 가상 머신, 애플리케이션, 데이터베이스와 같은 리소스를 안전하게 호스팅하고 관리할 수 있습니다. Azure의 네트워킹은 클라우드 내의 통신(Azure 서비스 간)과 외부 네트워크 및 인터넷과의 연결을 지원합니다.\
또한, VNet 다른 VNet 온프레미스 네트워크와 **연결**할 수 있습니다.
Azure는 **virtual networks (VNet)**를 제공하여 사용자가 Azure 클라우드 내에 **격리된** **네트워크**를 생성할 수 있합니다. 이러한 VNet 내에서 가상 머신, 애플리케이션, 데이터베이스 리소스를 안전하게 호스팅하고 관리할 수 있습니다. Azure의 네트워킹은 클라우드 내부(예: Azure 서비스 간) 통신과 외부 네트워크 및 인터넷과의 연결을 모두 지원합니다.\
또한, VNets를 다른 VNet이나 온프레미스 네트워크와 **연결**하는 것도 가능합니다.
## 가상 네트워크(VNET) 서브넷
## Virtual Network (VNET) & 서브넷
Azure 가상 네트워크(VNet) 클라우드에서 귀하의 네트워크를 나타내며, 귀하의 구독념하는 Azure 환경 내에서 **논리적 격리**를 제공합니다. VNet Azure에서 가상 사설 네트워크(VPN)를 프로비저닝하고 관리할 수 있게 하며, 가상 머신(VM), 데이터베이스 애플리케이션 서비스 같은 리소스를 호스팅니다. 이들은 IP 주소 범위, 서브넷 생성, 라우트 테이블 네트워크 게이트웨이를 포함한 **네트워크 설정에 대한 완전한 제어**를 제공합니다.
An Azure Virtual Network (VNet) 클라우드에서 자신의 네트워크를 표현한 것으로, 구독 전용의 Azure 환경 내에서 **논리적 격리(logical isolation)**를 제공합니다. VNets를 통해 Azure에서 virtual private networks (VPNs)을 프로비저닝하고 관리할 수 있으며, Virtual Machines (VMs), 데이터베이스, 애플리케이션 서비스 같은 리소스를 호스팅할 수 있습니다. 또한 IP 주소 범위, 서브넷 생성, 라우트 테이블, 네트워크 게이트웨이네트워크 설정에 대한 **완전한 제어(full control over network settings)**를 제공합니다.
**서브넷**은 특정 **IP 주소 범위**로 정의된 VNet 내의 세분화입니다. VNet을 여러 서브넷으로 분할함으로써 네트워크 아키텍처에 따라 리소스를 조직하고 보호할 수 있습니다.\
기본적으로 동일한 Azure 가상 네트워크(VNet) 내의 모든 서브넷은 **서로 통신할 수 있습니다**.
**서브넷**은 VNet 내의 세분화된 영역으로, 특정 **IP address ranges**로 정의됩니다. VNet을 여러 서브넷으로 분할하면 네트워크 아키텍처에 따라 리소스를 구성하고 보호할 수 있습니다.\
기본적으로 동일한 Azure Virtual Network (VNet) 내의 모든 서브넷은 **서로 통신할 수 있습니다** 제약 없이.
**예시:**
- `MyVNet`의 IP 주소 범위는 10.0.0.0/16입니다.
- **서브넷-1:** 웹 서버용 10.0.0.0/24.
- **서브넷-2:** 데이터베이스 서버용 10.0.1.0/24.
- `MyVNet` with an IP address range of 10.0.0.0/16.
- **Subnet-1:** 10.0.0.0/24 웹 서버용.
- **Subnet-2:** 10.0.1.0/24 데이터베이스 서버용.
### 열거
Azure 계정의 모든 VNet 서브넷을 나열하려면 Azure 명령줄 인터페이스(CLI)를 사용할 수 있습니다. 다음은 단계입니다:
Azure 계정의 모든 VNet 서브넷을 나열하려면 Azure Command-Line Interface (CLI)를 사용할 수 있습니다. 단계는 다음과 같습니다:
{{#tabs }}
{{#tab name="az cli" }}
@@ -47,18 +47,20 @@ Select-Object Name, AddressPrefix
{{#endtab }}
{{#endtabs }}
## 네트워크 보안 그룹 (NSG)
## Network Security Groups (NSG)
**네트워크 보안 그룹 (NSG)**는 Azure 가상 네트워크 (VNet) 내의 Azure 리소스에 대한 네트워크 트래픽을 필터링합니다. 이는 **인바운드 및 아웃바운드 트래픽**을 위해 **열어야 할 포트**를 소스 포트, 소스 IP, 포트 목적지에 따라 지정할 수 있는 **보안 규칙** 세트를 포함하고 있으며, 우선 순위를 할당할 수 있습니다 (우선 순위 번호가 낮을수록 우선 순위가 높습니다).
**Network Security Group (NSG)**는 Azure Virtual Network (VNet) 내의 Azure 리소스에 대한 들어오고 나가는 네트워크 트래픽을 필터링합니다.
NSG는 **서브넷 및 NIC**에 연결될 수 있습니다.
이는 출발 포트, 출발 IP, 목적지 포트별로 인바운드 및 아웃바운드 트래픽에 대해 열어야 할 포트를 지정할 수 있**보안 규칙** 집합을 포함하며, 우선순위(숫자가 낮을수록 우선순위가 높음)를 지정할 수 있습니다.
NSG가 연결될 수 있는 대상은 **서브넷 및 NICs.**
**규칙 예시:**
- 모든 소스에서 웹 서버로의 HTTP 트래픽 (포트 80)을 허용하는 인바운드 규칙.
- 특정 목적지 IP 주소 범위로의 SQL 트래픽 (포트 1433)만 허용하는 아웃바운드 규칙.
- 모든 소스에서 웹 서버로의 HTTP 트래픽 (port 80)을 허용하는 인바운드 규칙.
- 특정 목적지 IP 주소 범위로의 SQL 트래픽 (port 1433)만 허용하는 아웃바운드 규칙.
### 열거
### Enumeration
{{#tabs }}
{{#tab name="az cli" }}
@@ -71,7 +73,7 @@ az network nsg show --name <nsg-name>
az network nsg rule list --nsg-name <NSGName> --resource-group <ResourceGroupName> --query "[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}" -o table
# Get NICs and subnets using this NSG
az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
az network nsg show --name <NSGName> --resource-group <ResourceGroupName> --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
```
{{#endtab }}
{{#tab name="PowerShell" }}
@@ -81,32 +83,35 @@ Get-AzNetworkSecurityGroup | Select-Object Name, Location
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
# Get NSG rules
(Get-AzNetworkSecurityGroup -ResourceGroupName <NSGName> -Name <ResourceGroupName>).SecurityRules
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName> |
Select-Object -ExpandProperty SecurityRules |
Select-Object Name, Priority, Direction, Access, Protocol, SourceAddressPrefix, DestinationAddressPrefix, SourcePortRange, DestinationPortRange
# Get NICs and subnets using this NSG
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).Subnets
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).NetworkInterfaces
```
{{#endtab }}
{{#endtabs }}
## Azure Firewall
Azure Firewall는 클라우드 리소스를 보호하기 위해 트래픽을 검사하고 제어하는 **관리형 네트워크 보안 서비스**입니다. 이는 **상태 저장 방화벽**으로, Layer 3에서 7까지의 규칙에 따라 트래픽을 필터링하며, **Azure 내**(동서 트래픽) 및 **외부 네트워크와의 통신**(남북 트래픽)을 지원합니다. **가상 네트워크(VNet) 수준**에 배포되어 VNet의 모든 서브넷에 대한 중앙 집중식 보호를 제공합니다. Azure Firewall은 트래픽 수요에 맞게 자동으로 확장되며, 수동 설정 없이 높은 가용성을 보장합니다.
Azure Firewall는 트래픽(L3L7)을 east-west 및 north-south 흐름에 대해 필터링하는 **관리형, 상태 저장 방화벽**입니다. **VNet 레벨**에 배포되어 모든 서브넷에 대한 검사를 중앙화하고 가용성을 위해 자동으로 확장됩니다.
세 가지 SKU—**Basic**, **Standard**, **Premium**—로 제공되며, 각각 특정 고객 요구에 맞춰 조정됩니다:
사용 가능한 SKUs: **Basic**, **Standard**, and **Premium**:
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **추천 사용 사례** | 제한된 요구를 가진 중소기업(SMB) | 일반 기업용, Layer 37 필터링 | 매우 민감한 환경(예: 결제 처리) |
| **성능** | 최대 250 Mbps 처리량 | 최대 30 Gbps 처리량 | 최대 100 Gbps 처리량 |
| **위협 인텔리전스** | 경고만 제공 | 경고 및 차단(악성 IP/도메인) | 경고 및 차단(고급 위협 인텔리전스) |
| **L3L7 필터링** | 기본 필터링 | 프로토콜 전반에 걸친 상태 저장 필터링 | 고급 검사를 통한 상태 저장 필터링 |
| **고급 위협 보호** | 사용 불가 | 위협 인텔리전스 기반 필터링 | 침입 탐지 및 방지 시스템(IDPS) 포함 |
| **TLS 검사** | 사용 불가 | 사용 불가 | 인바운드/아웃바운드 TLS 종료 지원 |
| **가용성** | 고정 백엔드(2 VMs) | 자동 확장 | 자동 확장 |
| **관리 용이성** | 기본 제어 | 방화벽 관리자 통해 관리 | 방화벽 관리자 통해 관리 |
| **권장 사용 사례** | 요구 사항이 제한된 중소기업(SMBs) | 일반 기업용, Layer 37 필터링 | 매우 민감한 환경(예: 결제 처리) |
| **성능** | 최대 250 Mbps 처리량 | 최대 30 Gbps 처리량 | 최대 100 Gbps 처리량 |
| **위협 인텔리전스** | 경고만 | 경고 및 차단(악성 IP/도메인) | 경고 및 차단(고급 위협 인텔리전스) |
| **L3L7 필터링** | 기본 필터링 | 프로토콜 전반에 걸친 상태 저장 필터링 | 고급 검사 기능이 있는 상태 저장 필터링 |
| **고급 위협 보호** | 사용 불가 | 위협 인텔리전스 기반 필터링 | 침입 탐지 및 방지 시스템(IDPS) 포함 |
| **TLS 검사** | 사용 불가 | 사용 불가 | 인바운드/아웃바운드 TLS 종료 지원 |
| **가용성** | 고정 백엔드(2 VMs) | 자동 확장 | 자동 확장 |
| **관리 용이성** | 기본 제어 | Firewall Manager로 관리 | Firewall Manager로 관리 |
### Enumeration
### 열거
{{#tabs }}
{{#tab name="az cli" }}
@@ -143,9 +148,14 @@ Get-AzFirewall
## Azure Route Tables
Azure **Route Tables**는 서브넷 내에서 네트워크 트래픽의 라우팅을 제어하는 데 사용됩니다. 이들은 패킷이 Azure 리소스, 인터넷 또는 Virtual Appliance나 Azure Firewall과 같은 특정 다음 홉으로 전달되는 방법을 지정하는 규칙을 정의합니다. 라우트 테이블을 **서브넷**과 연결할 수 있으며, 해당 서브넷 내의 모든 리소스는 테이블의 경로를 따릅니다.
Azure **Route Tables (UDR)** 은 목적지 프리픽스(예: `10.0.0.0/16` 또는 `0.0.0.0/0`)와 next hop(예: Virtual Network, Internet, Virtual Network Gateway, Virtual Appliance)을 정의해 기본 라우팅을 재정의할 수 있게 합니다.
**예:** 서브넷이 검사를 위해 Network Virtual Appliance (NVA)를 통해 아웃바운드 트래픽을 라우팅해야 하는 리소스를 호스팅하는 경우, 라우트 테이블에 **라우트**를 생성하여 모든 트래픽(예: `0.0.0.0/0`)을 NVA의 개인 IP 주소로 다음 홉으로 리디렉션할 수 있습니다.
> 라우트는 서브넷 수준에 적용됩니다; 해당 서브넷의 모든 VMs가 이 테이블을 따릅니다.
**예시:**
- 인터넷으로 향하는 트래픽은 기본 `0.0.0.0/0`을 사용하고 next hop으로 **Internet**을 지정합니다.
- 아웃바운드 트래픽을 검사하려면 `0.0.0.0/0`을 Network Virtual Appliance (NVA) IP로 라우트합니다.
### **Enumeration**
@@ -155,8 +165,11 @@ Azure **Route Tables**는 서브넷 내에서 네트워크 트래픽의 라우
# List Route Tables
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
# List routes for a table
az network route-table route list --route-table-name <RouteTableName> --resource-group <ResourceGroupName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table
# List routes for a table (summary)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table
# List routes for a table (full)
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName>
```
{{#endtab }}
{{#tab name="PowerShell" }}
@@ -172,16 +185,16 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Link는 **Azure 서비스에 대한 비공식적인 접근을 가능하게 하는 Azure의 서비스**로, **Azure 가상 네트워크(VNet)와 서비스 간의 트래픽이 Microsoft의 Azure 백본 네트워크 내에서 완전히 이동하도록 보장합니다**. 이 설정은 서비스를 VNet로 가져옵니다. 이로 인해 데이터 공용 인터넷에 노출지 않아 보안 강화니다.
Azure Private Link는 Azure의 서비스로, **Azure 서비스에 대한 프라이빗 액세스를 가능하게** 하며 이는 **Azure 가상 네트워크(VNet)와 서비스 간의 트래픽이 Microsoft의 Azure 백본 네트워크 내에서 이동하도록 보장**함으로써 구현됩니다. 이는 서비스를 VNet 내부로 가져오는 것과 같으며, 데이터 공용 인터넷에 노출지 않아 보안 강화니다.
Private Link는 Azure Storage, Azure SQL Database Private Link를 통해 공유되는 사용자 정의 서비스와 같은 다양한 Azure 서비스와 함께 사용할 수 있습니다. 이는 자신의 VNet 내에서 또는 다른 Azure 구독에서 서비스 안전하게 소비할 수 있는 방법을 제공합니다.
Private Link는 Azure Storage, Azure SQL Database 같은 다양한 Azure 서비스나 Private Link를 통해 공유되는 커스텀 서비스와 함께 사용할 수 있습니다. 이는 자 VNet 내 또는 다른 Azure 구독으로부터 서비스 안전하게 접근할 수 있는 방법을 제공합니다.
> [!CAUTION]
> NSG는 개인 엔드포인트에 적용되지 않으므로, Private Link를 포함하는 서브넷에 NSG를 연결하는 것은 효과가 없습니다.
> NSGsprivate endpoints에 적용되지 않습니다. 따라서 Private Link를 포함하는 서브넷에 NSG를 연결해도 아무런 효과가 없습니다.
**예:**
**예:**
**VNet에서 Azure SQL Database에 안전하게 접근하고자 하는 시나리오를 고려해 보십시오**. 일반적으로는 공용 인터넷을 통해 이동해야 할 수 있습니다. Private Link를 사용하면 **VNet에 Azure SQL Database 서비스에 직접 연결되는 개인 엔드포인트를 생성할 수 있습니다**. 이 엔드포인트는 데이터베이스가 자신의 VNet의 일부인 것처럼 보이게 하며, 개인 IP 주소를 통해 접근할 수 있도록 하여 안전하고 비공적인 접근을 보장합니다.
예를 들어 VNet에서 안전하게 액세스하려는 **Azure SQL Database**가 있다고 가정해 보겠습니다. 일반적으로는 공용 인터넷을 거쳐야 할 수 있습니다. Private Link를 사용하면 VNet에 **프라이빗 엔드포인트(private endpoint)**를 생성하여 Azure SQL Database 서비스에 직접 연결할 수 있습니다. 이 엔드포인트는 데이터베이스를 마치 자체 VNet의 일부인 것처럼 보이게 하여 프라이빗 IP 주소를 통해 접근 가능하게 하고, 따라서 안전하고 비공적인 액세스를 보장합니다.
### **Enumeration**
@@ -206,15 +219,62 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
{{#endtab }}
{{#endtabs }}
### DNS OverDoS via service Private DNS zone links
When a VNet has a **Virtual Network Link** to a **service Private DNS zone** (e.g., `privatelink.blob.core.windows.net`), Azure **forces hostname resolution** for Private Link registered resources of that service type through the zone. If the zone **lacks the required `A` record** for a resource that workloads still access via its public endpoint, DNS resolution returns **NXDOMAIN** and clients never reach the public IP, causing an **availability DoS** without touching the resource itself.
**Abuse flow (control-plane DoS):**
1. Gain RBAC that allows creating **Private Endpoints** or modifying **Private DNS zone links**.
2. Create a Private Endpoint for the same service type in another VNet (Azure auto-creates the service Private DNS zone and links it to that VNet).
3. Link that **service Private DNS zone** to the victim VNet.
4. Because the victim VNet now **forces resolution via the Private DNS zone** and no `A` record exists for the target resource in that zone, name resolution fails and the workload cannot reach the (still-public) endpoint. This applies to any Private Linksupported service (storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI, etc.).
**대규모 탐색 (Azure Resource Graph):**
- VNETs linked to the blob Private DNS zone (forced resolution for PL-registered blob endpoints):
```kusto
resources
| where type == "microsoft.network/privatednszones/virtualnetworklinks"
| extend
zone = tostring(split(id, "/virtualNetworkLinks")[0]),
vnetId = tostring(properties.virtualNetwork.id)
| join kind=inner (
resources
| where type == "microsoft.network/privatednszones"
| where name == "privatelink.blob.core.windows.net"
| project zoneId = id
) on $left.zone == $right.zoneId
| project vnetId
```
- Storage accounts가 public endpoint를 통해 접근할 수 있지만 **없는** Private Endpoint 연결 (위 링크가 추가되면 깨질 수 있음):
```kusto
Resources
| where type == "microsoft.storage/storageaccounts"
| extend publicNetworkAccess = properties.publicNetworkAccess
| extend defaultAction = properties.networkAcls.defaultAction
| extend vnetRules = properties.networkAcls.virtualNetworkRules
| extend ipRules = properties.networkAcls.ipRules
| extend privateEndpoints = properties.privateEndpointConnections
| where publicNetworkAccess == "Enabled"
| where defaultAction == "Deny"
| where (isnull(privateEndpoints) or array_length(privateEndpoints) == 0)
| extend allowedVnets = iif(isnull(vnetRules), 0, array_length(vnetRules))
| extend allowedIps = iif(isnull(ipRules), 0, array_length(ipRules))
| where allowedVnets > 0 or allowedIps > 0
| project id, name, vnetRules, ipRules
```
## Azure Service Endpoints
Azure Service Endpoints는 가상 네트워크의 개인 주소 공간과 VNet의 ID를 Azure 서비스에 직접 연결하여 확장합니다. 서비스 엔드포인트를 활성화하면, **VNet 리소스가 Azure의 백본 네트워크를 사용하여 Azure 서비스에 안전하게 연결할 수 있습니다**. 이는 **VNet에서 Azure 서비스로의 트래픽이 Azure 네트워크 내에 유지되도록 하여**, 보다 안전하고 신뢰할 수 있는 경로를 제공합니다.
Azure Service Endpoints는 가상 네트워크의 private 주소 공간과 VNet의 식별(ID)을 Azure 서비스에 대한 직접 연결을 통해 확장합니다. Service endpoints를 활성화하면, **VNet 리소스가 Azure Storage나 Azure SQL Database 같은 Azure 서비스에 Azure backbone 네트워크를 통해 안전하게 연결할 수 있습니다.** 이는 Network Security Groups (NSGs)와 결합해 세분화된 트래픽 제어를 할 때 특히 유용합니다.
**예:**
**예:**
예를 들어, **Azure Storage** 계정은 기본적으로 공용 인터넷을 통해 접근할 수 있습니다. **VNet 내에서 Azure Storage에 대한 서비스 엔드포인트를 활성화하면**, VNet의 트래픽만이 스토리지 계정에 접근할 수 있도록 보장할 수 있습니다. 그런 다음 스토리지 계정 방화벽을 구성하여 VNet에서만 트래픽을 수락하도록 설정할 수 있습니다.
- **Storage** Account와 VNET에 Service Endpoint가 **활성화**된 경우, storage account 방화벽에서 **오직 VNet으로부터의 인바운드 트래픽만 허용**하도록 설정할 수 있어, 스토리지 서비스에 대한 공용 IP 액세스 없이도 **보안 연결**을 강제할 수 있습니다.
### **Enumeration**
Service Endpoints는 서비스에 대해 **private IP addresses를 요구하지 않으며**, 대신 보안 연결을 위해 Azure backbone에 의존합니다. Private Links와 비교하면 설정이 **더 쉬우나**, Private Links가 제공하는 동일한 수준의 격리와 세분성은 **제공하지 않습니다.**
### **열거**
{{#tabs }}
{{#tab name="az cli" }}
@@ -223,7 +283,10 @@ Azure Service Endpoints는 가상 네트워크의 개인 주소 공간과 VNet
az network vnet list --query "[].{name:name, location:location, serviceEndpoints:serviceEndpoints}" -o table
# List Subnets with Service Endpoints
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}" -o table
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}"
# List Service Endpoints for a Subnet
az network vnet subnet show --resource-group <ResourceGroupName> --vnet-name <VNetName> --name <SubnetName> --query "serviceEndpoints"
```
{{#endtab }}
{{#tab name="PowerShell" }}
@@ -237,73 +300,87 @@ Get-AzVirtualNetwork
{{#endtab }}
{{#endtabs }}
### 서비스 엔드포인트와 프라이빗 링크의 차이
### Service Endpoints와 Private Links의 차이
Microsoft는 [**문서**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints)에서 프라이빗 링크 사용을 권장합니다:
Microsoft는 [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints)에서 Private Links 사용을 권장합니다:
<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>
**서비스 엔드포인트:**
**Service Endpoints:**
- VNet에서 Azure 서비스로 트래픽은 Microsoft Azure 백본 네트워크를 통해 공용 인터넷을 우회하여 이동합니다.
- 엔드포인트는 Azure 서비스에 대한 직접 연결이며 VNet 내에서 서비스에 대한 프라이빗 IP를 제공하지 않습니다.
- 서비스 자체는 VNet 외부에서 공용 엔드포인트를 통해 여전히 접근할 수 있으며, 서비스 방화벽을 구성하여 이러한 트래픽을 차단하지 않는 한 접근이 가능합니다.
- 서브넷과 Azure 서비스 간 일대일 관계입니다.
- 프라이빗 링크보다 비용이 저렴합니다.
- VNet에서 Azure 서비스로 가는 트래픽은 공용 인터넷을 우회하여 Microsoft Azure 백본 네트워크를 통해 이동합니다.
- 엔드포인트는 Azure 서비스로의 직접 연결이며 VNet 내에서 서비스에 대한 프라이빗 IP를 제공하지 않습니다.
- 서비스 자체는 서비스 방화벽에서 해당 트래픽을 차단하도록 구성하지 않는 한 VNet 외부에서 퍼블릭 엔드포인트를 통해 여전히 접근 가능합니다.
- 서브넷과 Azure 서비스 간에는 일대일 관계입니다.
- Private Links보다 비용이 적게 듭니다.
**프라이빗 링크:**
**Private Links:**
- 프라이빗 링크는 Azure 서비스를 VNet 내의 프라이빗 엔드포인트를 통해 매핑하며, 이는 VNet 내의 프라이빗 IP 주소를 가진 네트워크 인터페이스입니다.
- Azure 서비스는 이 프라이빗 IP 주소를 사용하여 접근되며, 마치 네트워크의 일부인 것처럼 보입니다.
- 프라이빗 링크를 통해 연결된 서비스는 VNet 또는 연결된 네트워크에서만 접근할 수 있으며, 서비스에 대한 공용 인터넷 접근은 없습니다.
- Azure 서비스 또는 Azure에 호스팅된 자체 서비스에 대한 안전한 연결을 가능하게 하며, 다른 사람이 공유하는 서비스에 대한 연결도 제공합니다.
-비스 엔드포인트와 달리 VNet 내 프라이빗 엔드포인트를 통해 더 세분화된 접근 제어를 제공합니다.
- Private Link은 프라이빗 엔드포인트를 통해 Azure 서비스를 VNet으로 매핑합니다. 프라이빗 엔드포인트는 VNet 내의 프라이빗 IP를 가진 네트워크 인터페이스입니다.
- 이 프라이빗 IP 주소를 사용해 Azure 서비스에 접근하므로 해당 서비스가 마치 네트워크의 일부인 것처럼 보입니다.
- Private Link로 연결된 서비스는 귀하의 VNet 또는 연결된 네트워크에서만 접근할 수 있으며, 서비스에 대한 공용 인터넷 접근은 없습니다.
- Azure 서비스 또는 Azure에 호스팅된 자체 서비스에 대한 보안 연결과 타인이 공유 서비스로의 연결을 가능하게 합니다.
-브넷 수준의 광범위한 접근 제어와 달리, VNet 내 프라이빗 엔드포인트를 통해 더 세분화된 접근 제어를 제공합니다.
요약하면, 서비스 엔드포인트와 프라이빗 링크 모두 Azure 서비스에 대한 안전한 연결을 제공하지만, **프라이빗 링크는 서비스를 공용 인터넷에 노출하지 않고 프라이빗하게 접근도록 보장함으로써 더 높은 수준의 격리와 보안을 제공합니다**. 반면 서비스 엔드포인트는 VNet 내에서 프라이빗 IP가 필요 없는 일반적인 경우에 Azure 서비스에 대한 간단하고 안전한 접근을 설정하기가 더 쉽습니다.
요약하면, Service Endpoints와 Private Links 둘 다 Azure 서비스에 대한 안 연결을 제공하지만, **Private Links는 서비스를 공용 인터넷에 노출하지 않고 프라이빗하게 접근도록 보장하여 더 높은 수준의 격리와 보안을 제공합니다**. 반면 Service Endpoints는 VNet 내에서 프라이빗 IP가 필요하지 않은 일반적인 경우에 Azure 서비스에 대한 간단하고 안전한 접근을 설정하는 데 더 쉽습니다.
## Azure Front Door (AFD) AFD WAF
## Azure Front Door (AFD) & AFD WAF
**Azure Front Door**는 **전 세계 웹 애플리케이션의 빠른 배포**를 위한 확장 가능하고 안전한 진입점입니다. 이는 **글로벌 로드 밸런싱, 사이트 가속, SSL 오프로드 및 웹 애플리케이션 방화벽(WAF)** 기능과 같은 다양한 서비스를 하나의 서비스로 **결합**합니다. Azure Front Door는 **사용자에게 가장 가까운 엣지 위치**에 기반한 지능형 라우팅을 제공하여 최적의 성능과 신뢰성을 보장합니다. 또한 URL 기반 라우팅, 다중 사이트 호스팅, 세션 친화성 및 애플리케이션 계층 보안을 제공합니다.
**Azure Front Door**는 글로벌 웹 애플리케이션의 빠른 전달을 위한 확장 가능하고 보안적인 진입점입니다. 애플리케이션 가속, SSL offloading, 애플리케이션 레이어 보안(through Web Application Firewall - WAF)과 같은 다양한 서비스를 **결합**합니다. 전 세계의 엣지 POP(Point of Presence) 위치 개념 위에 구축되어 애플리케이션을 사용자에게 더 가깝게 제공합니다.
**Azure Front Door WAF**는 **웹 기반 공격으로부터 웹 애플리케이션을 보호**하도록 설계되었으며, 백엔드 코드를 수정할 필요가 없습니다. SQL 인젝션, 크로스 사이트 스크립팅 및 기타 일반적인 공격과 같은 위협으로부터 보호하기 위해 사용자 정의 규칙 및 관리 규칙 세트를 포함합니다.
> Azure Front Door는 전 세계에 분산된 엣지 위치 네트워크를 제공하여 웹 애플리케이션(Azure 또는 다른 곳에 있는)에 대한 들어오는 트래픽을 **라우팅 및 가속(route and accelerate)**하고 성능을 향상시키며 보안을 강화합니다.
**예시:**
전 세계 사용자들이 있는 글로벌 분산 애플리케이션이 있다고 가정해 보십시오. Azure Front Door를 사용하여 **사용자 요청을 애플리케이션을 호스팅하는 가장 가까운 지역 데이터 센터로 라우팅**할 수 있어 지연 시간을 줄이고 사용자 경험을 개선하며 **WAF 기능으로 웹 공격으로부터 방어할 수 있습니다**. 특정 지역에서 다운타임이 발생하면 Azure Front Door는 자동으로 트래픽을 다음 최적의 위치로 재라우팅하여 높은 가용성을 보장합니다.
- 전 세계 사용자 기반을 가진 글로벌 이커머스 플랫폼의 경우, **Azure Front Door는 엣지 위치에서 정적 콘텐츠를 캐시할 수 있으며** **SSL offloading**을 제공해 지연 시간을 줄이고 더 반응성이 높은 사용자 경험을 제공합니다. 또한 일반적인 웹 취약점(SQL injection이나 XSS와 같은)으로부터 애플리케이션을 보호하기 위해 **WAF**를 제공합니다.
### 열거
Azure Front Door는 헬스 프로브와 지연 시간을 기반으로 가장 가까운 사용 가능한 백엔드로 트래픽을 라우팅하여 **스마트 로드 밸런싱**을 제공하고 일관된 성능 및 가용성을 보장합니다. **WAF**와 통합함으로써 일반적인 웹 위협으로부터 보호하는 데 도움을 줍니다.
### **Enumeration**
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List Azure Front Door Instances
# List Azure Front Door profiles
az afd profile list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table
# List AFD endpoints
az afd endpoint list --profile-name <ProfileName> --resource-group <ResourceGroupName> --query "[].{name:name, hostName:hostName, state:resourceState}" -o table
# Classic Azure Front Door (v1) profiles
az network front-door list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
# List Front Door WAF Policies
# Classic Azure Front Door WAF policies
az network front-door waf-policy list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
```
{{#endtab }}
{{#tab name="PowerShell" }}
```bash
# List Azure Front Door Instances
# List Azure Front Door profiles
Get-AzFrontDoorCdnProfile | Select-Object Name, Location, ResourceGroupName
# List AFD endpoints
Get-AzFrontDoorCdnEndpoint -ProfileName <ProfileName> -ResourceGroupName <ResourceGroupName> | Select-Object Name, HostName, ResourceState
# Classic Azure Front Door (v1) profiles
Get-AzFrontDoor
# List Front Door WAF Policies
# Classic Azure Front Door WAF policies
Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupName>
```
{{#endtab }}
{{#endtabs }}
## Azure Application Gateway Azure Application Gateway WAF
## Azure Application Gateway and Azure Application Gateway WAF
Azure Application Gateway는 **웹 트래픽 로드 밸런서**로, **웹** 애플리케이션에 대한 트래픽을 관리할 수 있게 해줍니다. 이는 **Layer 7 로드 밸런싱, SSL 종료 및 웹 애플리케이션 방화벽(WAF) 기능**을 서비스로 제공하는 Application Delivery Controller(ADC)니다. 주요 기능으로는 URL 기반 라우팅, 쿠키 기반 세션 친화성 및 보안 소켓 계층(SSL) 오프로드가 있으며, 이는 글로벌 라우팅 및 경로 기반 라우팅과 같은 복잡한 로드 밸런싱 기능이 필요한 애플리케이션에 중요합니다.
Azure Application Gateway는 **웹 트래픽 로드 밸런서**로 **웹** 애플리케이션으로의 트래픽을 관리할 수 있게 해줍니다. 이는 서비스형 Application Delivery Controller (ADC)에서 **Layer 7 load balancing, SSL termination, 및 web application firewall (WAF) 기능**을 제공합니다. 주요 기능으로는 URL 기반 라우팅, 쿠키 기반 세션 고정, 그리고 secure sockets layer (SSL) 오프로딩이 있으며, 이는 global routing 및 path-based routing과 같은 복잡한 로드밸런싱 기능이 필요한 애플리케이션에 중요합니다.
**예시:**
**Example:**
사용자 계정 결제 처리와 같은 다양한 기능을 위한 여러 하위 도메인을 포함하는 전자 상거래 웹사이트가 있다고 가정해 보십시오. Azure Application Gateway는 **URL 경로에 따라 적절한 웹 서버로 트래픽을 라우팅**할 수 있습니다. 예를 들어, `example.com/accounts` 트래픽은 사용자 계정 서비스로, `example.com/pay` 트래픽은 결제 처리 서비스로 라우팅될 수 있습니다.\
그리고 **WAF 기능을 사용하여 웹사이트를 공격으로부터 보호합니다.**
사용자 계정, 결제 처리 등 기능별로 여러 서브도메인을 포함하는 이커머스 웹사이트가 있다고 가정해보세요. Azure Application Gateway는 **URL 경로에 따라 적절한 웹 서버로 트래픽을 라우팅할 수 있습니다**. 예를 들어 `example.com/accounts` 오는 트래픽은 사용자 계정 서비스로, `example.com/pay` 오는 트래픽은 결제 처리 서비스로 전달될 수 있습니다.\
And **protect your website from attacks using the WAF capabilities.**
### **열거**
### **Enumeration**
{{#tabs }}
{{#tab name="az cli" }}
@@ -320,20 +397,20 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
{{#endtab }}
{{#endtabs }}
## Azure Hub, Spoke & VNet Peering
## VNet Peering & HUB and Spoke topologies
**VNet Peering**는 Azure의 네트워킹 기능으로 **서로 다른 가상 네트워크(VNet)를 직접적이고 원활하게 연결할 수 있게 해줍니다**. VNet 피어링을 통해 한 VNet의 리소스는 **마치 같은 네트워크에 있는 것처럼** 다른 VNet의 리소스와 개인 IP 주소를 사용하여 통신할 수 있습니다.\
**VNet Peering은 온프레미스 네트워크와도 사용할 수 있으며**, 사이트 간 VPN 또는 Azure ExpressRoute를 설정하여 가능합니다.
### VNet Peering
**Azure Hub and Spoke**는 Azure에서 네트워크 트래픽을 관리하고 조직하는 데 사용되는 네트워크 토폴로지입니다. **"허브"는 서로 다른 "스포크" 간의 트래픽을 제어하고 라우팅하는 중앙 지점입니다**. 허브는 일반적으로 네트워크 가상 장치(NVA), Azure VPN Gateway, Azure Firewall 또는 Azure Bastion과 같은 공유 서비스를 포함합니다. **"스포크"는 워크로드를 호스팅하고 VNet 피어링을 사용하여 허브에 연결되는 VNet입니다**, 이를 통해 허브 내의 공유 서비스를 활용할 수 있습니다. 이 모델은 여러 VNet에 걸쳐 있는 여러 워크로드가 사용할 수 있는 공통 서비스를 중앙 집중화하여 복잡성을 줄이고 깔끔한 네트워크 레이아웃을 촉진합니다.
**VNet Peering**는 Azure의 기능으로, **서로 다른 Virtual Networks (VNets)를 직접적이고 원활하게 연결할 수 있도록 합니다**. VNet peering을 통해 한 VNet의 리소스는 사설 IP 주소를 사용하여 다른 VNet의 리소스와 통신할 수 있으며, **마치 동일한 네트워크에 있는 것처럼** 동작합니다.\\
**VNet Peering은 온프레미스 네트워크와도 사용할 수 있습니다** — site-to-site VPN 또는 Azure ExpressRoute를 설정하여.
> [!CAUTION] > **Azure에서 VNET 피어링은 비전이적입니다**, 즉 스포크 1이 스포크 2에 연결되고 스포크 2가 스포크 3에 연결되어 있더라도 스포크 1은 스포크 3과 직접 통신할 수 없습니다.
**Azure Hub and Spoke**는 VNet peering을 활용해 중앙의 **Hub VNet**을 생성하고 이를 여러 **Spoke VNets**에 연결하는 네트워크 아키텍처입니다. Hub에는 일반적으로 방화벽, DNS, Active Directory와 같은 공유 서비스가 포함되고, Spoke에는 애플리케이션 워크로드가 호스팅됩니다. 이 설계는 관리 단순화, 중앙화된 제어를 통한 보안 강화, 중복성 감소를 제공합니다.
**예시:**
**Example:**
판매, 인사 및 개발과 같은 별도의 부서를 가진 회사를 상상해 보십시오. **각 부서는 자체 VNet(스포크)을 가지고 있습니다**. 이러한 VNet은 **중앙 데이터베이스, 방화벽 및 인터넷 게이트웨이와 같은 공유 리소스에 대한 접근이 필요합니다**, 이 모든 것은 **다른 VNet(허브)에 위치해 있습니다**. Hub and Spoke 모델을 사용함으로써 각 부서는 **공유 리소스를 허브 VNet을 통해 안전하게 연결할 수 있으며, 이러한 리소스를 공용 인터넷에 노출시키거나 수많은 연결로 복잡한 네트워크 구조를 만들 필요가 없습니다**.
여러 부서(Finance, HR, IT)를 가진 대기업은 방화벽과 DNS 서버와 같은 공유 서비스를 제공하는 **Hub VNet with shared services**를 생성할 수 있습니다. 각 부서는 peering을 통해 Hub에 연결되는 자체 Spoke VNet을 가질 수 있습니다. 이를 통해 부서들은 리소스를 퍼블릭 인터넷에 노출하지 않고도 안전하게 통신하고 공유 서비스를 이용할 수 있습니다.
### Enumeration
### **Enumeration**
{{#tabs }}
{{#tab name="az cli" }}
@@ -341,8 +418,8 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
# List all VNets in your subscription
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}" -o table
# List VNet peering connections for a given VNet
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, peeringState:peeringState, remoteVnetId:remoteVnetId}" -o table
# List VNet Peerings
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, remoteVnetId:remoteVirtualNetwork.id, allowForwardedTraffic:allowForwardedTraffic, allowGatewayTransit:allowGatewayTransit}"
# List Shared Resources (e.g., Azure Firewall) in the Hub
az network firewall list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table
@@ -353,8 +430,8 @@ az network firewall list --query "[].{name:name, location:location, resourceGrou
# List all VNets in your subscription
Get-AzVirtualNetwork
# List VNet peering connections for a given VNet
(Get-AzVirtualNetwork -ResourceGroupName <ResourceGroupName> -Name <VNetName>).VirtualNetworkPeerings
# List VNet Peerings
Get-AzVirtualNetworkPeering -ResourceGroupName <ResourceGroupName> -VirtualNetworkName <VNetName>
# List Shared Resources (e.g., Azure Firewall) in the Hub
Get-AzFirewall
@@ -364,11 +441,11 @@ Get-AzFirewall
## Site-to-Site VPN
Azure의 Site-to-Site VPN은 **온프레미스 네트워크 Azure 가상 네트워크(VNet)에 연결**할 수 있게 해주며, Azure 내의 VM 같은 리소스가 로컬 네트워크에 있는 것처럼 보이게 합니다. 이 연결은 **두 네트워크 간의 트래픽을 암호화하는 VPN 게이트웨이를 통해 설정됩니다.**
Azure의 **Site-to-Site VPN**은 온프레미스 네트워크 Azure Virtual Network (VNet) 간에 안전하고 **지속적인 연결을 설정**하여, Azure 내의 VMs 같은 리소스가 마치 로컬 네트워크에 있는 것처럼 보이게 합니다. 이 연결은 두 네트워크 간의 트래픽을 암호화하는 **VPN gateway**를 통해 설정됩니다.
**예:**
**예:**
뉴욕에 본사가 있는 한 기업은 Azure에서 가상화된 워크로드를 호스팅하는 VNet에 안전하게 연결해야 하는 온프레미스 데이터 센터를 가지고 있습니다. **Site-to-Site VPN을 설정함으로써, 회사는 온프레미스 서버와 Azure VM 간의 암호화된 연결을 보장할 수 있으며**, 두 환경 모두에서 리소스에 안전하게 접근할 수 있도록 하여 마치 동일한 로컬 네트워크에 있는 것처럼 만듭니다.
뉴욕에 본사가 있는 한 기업은 온프레미스 데이터 센터를 보유하고 있으며, 가상화된 워크로드를 호스팅하는 Azure의 VNet에 안전하게 연결해야 니다. **Site-to-Site VPN을 설정함으로써, 회사는 온프레미스 서버와 Azure VMs 간의 암호화된 연결을 보장할 수 있으며**, 두 환경 리소스에 마치 동일한 로컬 네트워크에 있는 것처럼 안전하게 접근할 수 있습니다.
### **Enumeration**
@@ -395,13 +472,13 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
## Azure ExpressRoute
Azure ExpressRoute는 **온프레미스 인프라와 Azure 데이터 센터 간의 개인적이고 전용의 고속 연결을 제공하는 서비스**입니다. 이 연결은 연결 제공를 통해 이루어지며, 공용 인터넷을 우회하여 일반 인터넷 연결보다 더 높은 신뢰성, 빠른 속도, 낮은 대기 시간 및 더 높은 보안을 제공합니다.
Azure ExpressRoute는 온프레미스 인프라와 Azure 데이터 센터 간의 **프라이빗하고 전용의 고속 연결**을 제공하는 서비스입니다. 이 연결은 커넥티비티 제공업체를 통해 이루어지며, 공용 인터넷을 우회하여 일반적인 인터넷 연결보다 더 높은 신뢰성, 빠른 속도, 낮은 지연 및 향상된 보안을 제공합니다.
**예시:**
다국적 기업은 **데이터의 높은 양과 높은 처리량 필요성으로 인해 Azure 서비스에 대일관되고 신뢰할 수 있는 연결**이 필요합니다. 회사는 Azure ExpressRoute를 선택하여 온프레미스 데이터 센터를 Azure에 직접 연결하 일일 백업 및 실시간 데이터 분석과 같은 대규모 데이터 전송을 촉진하며, 향상된 개인 정보 보호 및 속도를 제공합니다.
다국적 기업은 데이터 양이 많고 높은 처리량 필요하기 때문에 Azure 서비스에 대해 **일관되고 신뢰할 수 있는 연결**이 필요합니다. 회사는 Azure ExpressRoute를 선택하여 온프레미스 데이터 센터를 Azure에 직접 연결하고, 일일 백업 및 실시간 데이터 분석과 같은 대규모 데이터 전송을 더 높은 프라이버시와 속도로 수행합니다.
### **Enumeration**
### **열거**
{{#tabs }}
{{#tab name="az cli" }}
@@ -418,4 +495,10 @@ Get-AzExpressRouteCircuit
{{#endtab }}
{{#endtabs }}
## 참고 자료
- [DNS OverDoS: Private Endpoints는 너무 폐쇄적인가?](https://unit42.paloaltonetworks.com/dos-attacks-and-azure-private-endpoint/)
- [Azure Private Endpoint DNS 구성](https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-dns)
- [Private DNS의 인터넷 폴백](https://learn.microsoft.com/en-us/azure/dns/private-dns-fallback)
{{#include ../../../../banners/hacktricks-training.md}}