Hello,
Since you’ve already confirmed that TCP 3389 is allowed in the NSG, the next step is to isolate whether the block is happening at the VM’s Windows Firewall or at the RDP listener itself. Start by checking the effective NSG rules applied to the VM’s NIC and subnet. In Azure, NSG rules are cumulative, and a deny rule at the subnet level can override what you configured at the NIC. Use az network nic effective-nsg list --name <NICName> --resource-group <RGName> to confirm that inbound TCP 3389 is truly allowed from your source IP.
If the NSG looks correct, log into the VM via Azure Serial Console or use Run Command from the portal. Run netstat -an | findstr 3389 to verify that the RDP service is listening on 0.0.0.0:3389. If it is not, check the registry key HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp and confirm the PortNumber value is set to 3389. Also confirm that fDenyTSConnections under HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server is set to 0.
On the Windows Firewall side, ensure the inbound rule for Remote Desktop is enabled. You can check with Get-NetFirewallRule -DisplayGroup "Remote Desktop" | Select Name, Enabled. If the rules are disabled, re-enable them.
Finally, confirm that you are connecting with the correct public IP of the VM. If the VM is behind a load balancer or has a changed IP, the RDP attempt will fail regardless of NSG. You can verify the current public IP in the Azure portal under Networking.
If all of the above checks out, but you still get authentication errors, it may be a case of Network Level Authentication (NLA) mismatch. Ensure your local client supports NLA and that the VM has it enabled under System Properties > Remote.
I hope you've found something useful here. If it helps you get more insight into the issue, it's appreciated to accept the answer. Should you have more questions, feel free to leave a message. Have a nice day!
HP.