Lab type
Evidence analysis
Everything needed to solve the scenario appears on this page. You will not sign in to Azure or run a live diagnostic.
Azure Journey / Lab / Evidence analysis
Trace one synthetic TCP flow through Azure and guest layers, identify the earliest point where evidence diverges, and write a finding an accountable owner can act on. No Azure subscription, deployment, payment, tenant access, or production environment is required.
Lab type
Everything needed to solve the scenario appears on this page. You will not sign in to Azure or run a live diagnostic.
Method
Define the flow, compare each layer, and stop at the earliest supported divergence.
Boundary
The result is a documented finding and escalation recommendation, not approval to change a network control.
Scenario
Names, private addresses, rules, timestamps, and results were created for this lab and describe no customer environment.
1 · Learning objectives
2 · Prerequisite knowledge
You should recognize IPv4 subnets, TCP ports, DNS A records, Windows listeners, network security groups, and effective routes. Review Investigating Azure VM Connectivity first if those layers are unfamiliar.
3 · Investigation rules
Use only the supplied packet. Do not invent a route, rule, owner, health result, or approval.
One flow only. A result for TCP 443 from 10.20.1.4 at one time does not establish behavior for another source, port, or timestamp.
No configuration activity. This lab contains no procedure for creating resources, opening ports, changing NSGs or routes, modifying DNS or firewalls, restarting a VM, granting roles, or capturing packets.
4 · Synthetic environment
Source
Private IP 10.20.1.4
Subnet subnet-admin
VNet vnet-krippytech-lab
Destination
Private IP 10.20.2.4
Subnet subnet-app
VNet vnet-krippytech-lab
Service
Required protocol TCP
Required port 443
Path type: private, same VNet
Time
2026-08-22T15:30:00Z
Symptom: constant from the defined source during the supplied window.
5 · Defined traffic flow
| Source | Destination | Protocol | Port | Direction | UTC time | Expected result |
|---|---|---|---|---|---|---|
LAB-ADMIN-0110.20.1.4 | app.lab.example LAB-WEB-01 10.20.2.4 | TCP | 443 | Outbound from source; inbound to destination | 2026-08-22T15:30:00Z | HTTPS TCP connection succeeds |
6 · Topology and inventory
The numbered cards and the equivalent table describe the same path for visual and screen-reader review.
01 · Source VM
10.20.1.4
02 · Source subnet
10.20.1.0/24
03 · VNet routing
System route for 10.20.0.0/16
04 · Destination subnet
10.20.2.0/24
05 · Destination NIC
10.20.2.4
06 · Guest firewall
Focused inbound HTTPS rule
07 · Listener
0.0.0.0:443 listening
| Order | Layer | Expected handoff |
|---|---|---|
| 1 | Source VM and NIC | LAB-ADMIN-01 sends TCP 443 from 10.20.1.4. |
| 2 | Source subnet controls | Outbound flow is permitted from subnet-admin. |
| 3 | VNet routing | The 10.20.0.0/16 VirtualNetwork route selects same-VNet delivery. |
| 4 | Destination subnet controls | Inbound flow must be permitted by nsg-lab-app. |
| 5 | Destination NIC controls | Inbound flow must also be permitted by nsg-lab-web-nic. |
| 6 | Guest firewall | Windows Firewall permits the defined source and port. |
| 7 | Application listener | A process accepts TCP 443 on LAB-WEB-01. |
7 · Evidence packet
Outputs are synthetic snapshots for the defined UTC window. They are not commands to run against an environment.
DNS result
Name: app.lab.example
Type: A
IPAddress: 10.20.2.4
Response: Success
This identifies an address; it does not test TCP 443.
Source VM
Provisioning: Succeeded
Power: Running
NIC: nic-lab-admin-01
Private IP: 10.20.1.4
Destination VM
Provisioning: Succeeded
Power: Running
NIC: nic-lab-web-01
Private IP: 10.20.2.4
Subnet placement
nic-lab-admin-01 → subnet-adminnic-lab-web-01 → subnet-app
Both subnets → vnet-krippytech-lab
| Attachment point | NSG | Relevant observation |
|---|---|---|
| Source subnet: subnet-admin | nsg-lab-admin | Explicit outbound HTTPS allow for the application subnet. |
| Source NIC: nic-lab-admin-01 | None | No NIC-level NSG is attached. |
| Destination subnet: subnet-app | nsg-lab-app | Explicit inbound deny matches the source subnet and TCP 443. |
| Destination NIC: nic-lab-web-01 | nsg-lab-web-nic | Explicit inbound HTTPS allow matches the source subnet. |
| NSG and attachment | Rule | Priority | Direction | Protocol | Source | Destination | Port | Action |
|---|---|---|---|---|---|---|---|---|
| nsg-lab-admin source subnet | AllowAppHttpsOut | 200 | Outbound | TCP | 10.20.1.0/24 | 10.20.2.0/24 | 443 | Allow |
| nsg-lab-app destination subnet | DenyAdminHttps | 200 | Inbound | TCP | 10.20.1.0/24 | 10.20.2.4 | 443 | Deny |
| nsg-lab-app destination subnet | AllowApprovedHttps | 300 | Inbound | TCP | 10.20.3.0/24 | 10.20.2.4 | 443 | Allow |
| nsg-lab-web-nic destination NIC | AllowAdminHttps | 300 | Inbound | TCP | 10.20.1.0/24 | 10.20.2.4 | 443 | Allow |
Priorities are evaluated within each NSG, with lower numbers processed first. For inbound traffic, both the destination subnet NSG and destination NIC NSG must permit the flow. A NIC-level allow does not override a deny at the subnet gate.
Effective security rules
Aggregated result for TCP 443 from 10.20.1.4 to 10.20.2.4: Deny.
Responsible rule: DenyAdminHttps
Origin: nsg-lab-app
Attachment: destination subnet
Source effective route
Prefix: 10.20.0.0/16
Next hop: VirtualNetwork
Source: Default
State: Active
Destination effective route
Prefix: 10.20.0.0/16
Next hop: VirtualNetwork
Source: Default
State: Active
IP flow verify
Direction: Inbound
Protocol: TCP
Remote: 10.20.1.4:55024
Local: 10.20.2.4:443
Rule: DenyAdminHttps
| Evidence | Synthetic result | Interpretation boundary |
|---|---|---|
| Guest IP configuration | LAB-WEB-01 owns 10.20.2.4/24 on Ethernet. | Confirms guest addressing, not remote reachability. |
| Guest firewall profile | Domain profile enabled; focused rule LAB HTTPS Inbound enabled, TCP local port 443, remote 10.20.1.0/24, Allow. | Supports guest policy for this tuple; it does not override Azure NSGs. |
| TCP listener | 0.0.0.0:443 LISTEN on LAB-WEB-01. | A listener does not prove application health or remote path reachability. |
| Local port test | localhost:443 TcpTestSucceeded: True | Confirms a local TCP handshake only. |
| Source-side focused test | ComputerName: app.lab.example | Confirms the defined remote attempt failed; it does not identify the blocking layer by itself. |
Known
DNS answer, VM states, NIC placement, same-VNet routes, effective NSG deny, IP-flow deny, guest firewall allow, listener, and failed remote TCP test are supplied for one UTC window.
Unknown
NSG business intent and owner approval, application health beyond the listener, behavior from other sources, and whether another fault appears after the demonstrated deny are not established.
8 · Learner tasks
9 · Network-path worksheet
| Layer | Expected behavior | Evidence reviewed | Observed result | Status | What this proves | What this does not prove |
|---|---|---|---|---|---|---|
| DNS | Hostname returns 10.20.2.4 | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| VM and NIC state | Both VMs running; expected addresses and subnets | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| Source policy | Outbound TCP 443 permitted | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| VNet route | VirtualNetwork next hop | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| Destination policy | Inbound TCP 443 permitted at subnet and NIC | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| Guest firewall | Defined source and port permitted | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| Listener | TCP 443 listening | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
| Application health | HTTPS transaction completes | ________________ | ________________ | Supported / Contradicted / Unknown | ________________ | ________________ |
10 · Interpretation questions
DenyAdminHttps reflects intended policy?11 · Final conclusion template
Defined flow: At [UTC time], [source and IP] attempted [protocol and port] to [destination and IP].
Supported layers: [List evidence that matched the expected path.]
Earliest divergence: [Name the first contradicted layer and the exact evidence.]
What remains unknown: [List unverified health, intent, ownership, and downstream behavior.]
Escalation: [Name the accountable owner and the determination needed, without authorizing a change.]
12 · Expandable answer key
Each native disclosure is keyboard accessible and remains readable without JavaScript.
The A record resolves app.lab.example to the destination’s confirmed address, 10.20.2.4. DNS does not test Azure policy, routes, guest policy, a listener, or the HTTPS application.
Both VMs are reported Running, and their provisioning states are Succeeded. Those facts support platform state only; they do not establish guest or application health. Separate guest evidence is supplied.
The source and return evidence show an active 10.20.0.0/16 system route with the expected VirtualNetwork next hop. That supports same-VNet route selection but does not bypass NSGs.
LAB-WEB-01 owns the expected address and a process listens on 0.0.0.0:443. The local test succeeds. This supports listener availability at the guest, not remote reachability or complete application health.
The focused active rule allows inbound TCP 443 from 10.20.1.0/24. That supports the defined guest-policy requirement. It cannot override an Azure NSG deny.
DenyAdminHttps in nsg-lab-app, attached to destination subnet subnet-app, denies inbound TCP 443 from 10.20.1.0/24 to 10.20.2.4. Effective security and IP-flow evidence identify the same rule.
Source state and policy, DNS, address placement, and the expected route are supported before traffic reaches the destination subnet gate. The destination subnet NSG contradicts the expected allow. Later guest evidence may be healthy, but the flow is already denied at that earlier layer.
Confirm the NSG’s accountable owner, intended application-access policy, relevant change history, and whether a later issue appears after an authorized policy determination. Application health beyond the listener also remains unknown.
A technically explanatory rule can still be intentional. Ownership, security intent, business need, approval, change control, rollback, and validation remain outside this evidence packet.
13 · Escalation-quality sample
The defined TCP 443 flow from LAB-ADMIN-01 at 10.20.1.4 to LAB-WEB-01 at 10.20.2.4 resolves correctly and follows the expected VirtualNetwork route. LAB-WEB-01 is running, owns the expected address, and has an HTTPS listener. Effective security and IP-flow evidence identify destination-subnet rule DenyAdminHttps as the earliest demonstrated point blocking the defined flow. The NSG owner must confirm policy intent and authorized application access before any change is proposed.
14 · What the evidence does not prove
Microsoft sources