{"id":2526,"date":"2022-02-19T22:28:48","date_gmt":"2022-02-19T22:28:48","guid":{"rendered":"https:\/\/exceedthecloud.com\/?p=2526"},"modified":"2022-02-20T10:00:44","modified_gmt":"2022-02-20T10:00:44","slug":"create-an-azure-private-endpoint-using-azure-powershell","status":"publish","type":"post","link":"https:\/\/exceedthecloud.com\/?p=2526","title":{"rendered":"Create an Azure private endpoint using Azure PowerShell"},"content":{"rendered":"\n<p>Get started with Azure Private Link by using a Private Endpoint to connect securely to an Azure web app. There are many ways to create Endpoints including Portal, CLI, PowerShell etc.<\/p>\n\n\n\n<p>You\u2019ll create a Private Endpoint for an Azure web app and deploy a virtual machine to test the private connection.<\/p>\n\n\n\n<p>Private Endpoints can be created for different kinds of Azure services, such as Azure SQL and Azure Storage.<\/p>\n\n\n\n<p><strong>Prerequisites<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Prerequisites for this labs :\u00a0<a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Account<\/a>\u00a0\/\u00a0<a href=\"https:\/\/github.com\/marcelin-ndjila\/Practical-Labs-Series\/blob\/master\/Azurelabs08.zip\" target=\"_blank\" rel=\"noreferrer noopener\">Download Labs Files here<\/a><\/li><li>An Azure Web App with a PremiumV2-tier or higher app service plan deployed in your Azure subscription.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>Find and open parameters.json in Azurelabs08 folder. Open it in Notepad and find the line \u201cvalue\u201d: \u201cGEN-UNIQUE\u201d. Replace the placeholder GEN-UNIQUE string with a unique value for your webapp name. Save this change.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"883\" height=\"374\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture1-9.png\" alt=\"\" class=\"wp-image-2527\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture1-9.png 883w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture1-9-300x127.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture1-9-768x325.png 768w\" sizes=\"auto, (max-width: 883px) 100vw, 883px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>In the Azure portal, open the <strong>PowerShell<\/strong> session within the <strong>Cloud Shell<\/strong> pane.<\/li><li>In the toolbar of the Cloud Shell pane, click the Upload\/Download files icon, in the drop-down menu, click Upload and upload the following files template.json and parameters.json into the Cloud Shell home directory.<\/li><\/ul>\n\n\n\n<p>If you choose to install and use PowerShell locally, this example requires the Azure PowerShell module version 5.4.1 or later. Run <code>Get-Module -ListAvailable Az<\/code> to find the installed version. If you need to upgrade, see <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/app-service\/quickstart-dotnetcore\" target=\"_blank\" rel=\"noreferrer noopener\">Install Azure PowerShell module<\/a>. If you\u2019re running PowerShell locally, you also need to run <code>Connect-AzAccount<\/code> to create a connection with Azure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"989\" height=\"127\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture2-9.png\" alt=\"\" class=\"wp-image-2528\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture2-9.png 989w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture2-9-300x39.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture2-9-768x99.png 768w\" sizes=\"auto, (max-width: 989px) 100vw, 989px\" \/><\/figure>\n\n\n\n<p>In this exercise, you will:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Task 1: Create a resource group<\/li><li>Task 2: Create a virtual network and bastion host<\/li><li>Task 3: Create a test virtual machine<\/li><li>Task 4: Create a Private Endpoint<\/li><li>Task 5: Configure the private DNS zone<\/li><li>Task 6: Test connectivity to the Private Endpoint<\/li><\/ul>\n\n\n\n<p><strong>Task 1: Create a resource group and deploy the prerequisite web app<\/strong><\/p>\n\n\n\n<p>An Azure resource group is a logical container into which Azure resources are deployed and managed.<\/p>\n\n\n\n<p>Create a resource group with <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/az.resources\/new-azresourcegroup\" target=\"_blank\" rel=\"noreferrer noopener\">New-AzResourceGroup<\/a>:<\/p>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-AzResourceGroup -Name 'CreatePrivateEndpointQS-rg' -Location 'eastus'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1006\" height=\"205\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture3-9.png\" alt=\"\" class=\"wp-image-2529\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture3-9.png 1006w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture3-9-300x61.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture3-9-768x157.png 768w\" sizes=\"auto, (max-width: 1006px) 100vw, 1006px\" \/><\/figure>\n\n\n\n<p>Deploy the following ARM templates to create the PremiumV2-tier Azure Web App needed for this lab:<\/p>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$RGName = \u201cCreatePrivateEndpointQS-rg\u201d\n\n New-AzResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile template.json -TemplateParameterFile parameters.json<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"977\" height=\"401\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture4-9.png\" alt=\"\" class=\"wp-image-2530\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture4-9.png 977w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture4-9-300x123.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture4-9-768x315.png 768w\" sizes=\"auto, (max-width: 977px) 100vw, 977px\" \/><\/figure>\n\n\n\n<p><strong>Task 2: Create a virtual network and bastion host<\/strong><\/p>\n\n\n\n<p>You\u2019ll create a virtual network, subnet, and bastion host.<\/p>\n\n\n\n<p>The bastion host will be used to connect securely to the virtual machine for testing the Private Endpoint.<\/p>\n\n\n\n<p>Create a virtual network and bastion host with:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>New-AzVirtualNetwork<\/li><li>New-AzPublicIpAddress<\/li><li>New-AzBastion<\/li><\/ul>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Create backend subnet config. ##\n\n$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name myBackendSubnet -AddressPrefix 10.0.0.0\/24\n\n## Create Azure Bastion subnet. ##\n\n$bastsubnetConfig = New-AzVirtualNetworkSubnetConfig -Name AzureBastionSubnet -AddressPrefix 10.0.1.0\/24\n\n## Create the virtual network. ##\n\n$parameters1 = @{\n\n Name = 'MyVNet'\n\n ResourceGroupName = 'CreatePrivateEndpointQS-rg'\n\n Location = 'eastus'\n\n AddressPrefix = '10.0.0.0\/16'\n\n Subnet = $subnetConfig, $bastsubnetConfig\n\n}\n\n$vnet = New-AzVirtualNetwork @parameters1\n\n## Create public IP address for bastion host. ##\n\n$parameters2 = @{\n\n Name = 'myBastionIP'\n\n ResourceGroupName = 'CreatePrivateEndpointQS-rg'\n\n Location = 'eastus'\n\n Sku = 'Standard'\n\n AllocationMethod = 'Static'\n\n}\n\n$publicip = New-AzPublicIpAddress @parameters2\n\n## Create bastion host ##\n\n$parameters3 = @{\n\n ResourceGroupName = 'CreatePrivateEndpointQS-rg'\n\n Name = 'myBastion'\n\n PublicIpAddress = $publicip\n\n VirtualNetwork = $vnet\n\n}\n\nNew-AzBastion @parameters3\n<\/code><\/pre>\n\n\n\n<p><strong>Task 3: Create a test virtual machine<\/strong><\/p>\n\n\n\n<p>In this section, you\u2019ll create a virtual machine that will be used to test the Private Endpoint.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Create the virtual machine with:<\/li><li>Get-Credential (Note: when prompted enter a local admin account credentials for the VM (i.e. Student and Pa55w.rd1234)).<\/li><li>New-AzNetworkInterface<\/li><li>New-AzVM<\/li><li>New-AzVMConfig<\/li><li>Set-AzVMOperatingSystem<\/li><li>Set-AzVMSourceImage<\/li><li>Add-AzVMNetworkInterface<\/li><\/ul>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Set credentials for server admin and password. ##\n\n$cred = Get-Credential\n\n## Command to get virtual network configuration. ##\n\n$vnet = Get-AzVirtualNetwork -Name myVNet -ResourceGroupName CreatePrivateEndpointQS-rg\n\n## Command to create network interface for VM ##\n\n$parameters1 = @{\n\n Name = \u2018myNicVM\u2019\n\n ResourceGroupName = \u2018CreatePrivateEndpointQS-rg\u2019\n\n Location = \u2018eastus\u2019\n\n Subnet = $vnet.Subnets&#91;0]\n\n}\n\n$nicVM = New-AzNetworkInterface @parameters1\n\n## Create a virtual machine configuration.##\n\n$parameters2 = @{\n\n VMName = \u2018myVM\u2019\n\n VMSize = \u2018Standard_DS1_v2\u2019\n\n}\n\n$parameters3 = @{\n\n ComputerName = \u2018myVM\u2019\n\n Credential = $cred\n\n}\n\n$parameters4 = @{\n\n PublisherName = \u2018MicrosoftWindowsServer\u2019\n\n Offer = \u2018WindowsServer\u2019\n\n Skus = \u20182019-Datacenter\u2019\n\n Version = \u2018latest\u2019\n\n}\n\n$vmConfig = New-AzVMConfig @parameters2 | Set-AzVMOperatingSystem -Windows @parameters3 | Set-AzVMSourceImage @parameters4 | Add-AzVMNetworkInterface -Id $nicVM.Id\n\n## Create the virtual machine ##\n\nNew-AzVM -ResourceGroupName \u2018CreatePrivateEndpointQS-rg\u2019 -Location \u2018eastus\u2019 -VM $vmConfig<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"990\" height=\"170\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture5-9.png\" alt=\"\" class=\"wp-image-2531\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture5-9.png 990w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture5-9-300x52.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture5-9-768x132.png 768w\" sizes=\"auto, (max-width: 990px) 100vw, 990px\" \/><\/figure>\n\n\n\n<p>Azure provides an ephemeral IP for Azure Virtual Machines which aren\u2019t assigned a public IP address, or are in the backend pool of an internal Basic Azure Load Balancer. The ephemeral IP mechanism provides an outbound IP address that isn\u2019t configurable.<\/p>\n\n\n\n<p>The ephemeral IP is disabled when a public IP address is assigned to the virtual machine or the virtual machine is placed in the backend pool of a Standard Load Balancer with or without outbound rules. If a Azure Virtual Network NAT gateway resource is assigned to the subnet of the virtual machine, the ephemeral IP is disabled.<\/p>\n\n\n\n<p>For more information on outbound connections in Azure, see Using Source Network Address Translation (SNAT) for outbound connections.<\/p>\n\n\n\n<p><strong>Task 4: Create a Private Endpoint<\/strong><\/p>\n\n\n\n<p>In this section, you\u2019ll create the Private Endpoint and connection using:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>New-AzPrivateLinkServiceConnection<\/li><li>New-AzPrivateEndpoint<\/li><\/ul>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Place web app into variable. This assumes that only one web app exists in the resource group. ##\n\n$webapp = Get-AzWebApp -ResourceGroupName CreatePrivateEndpointQS-rg\n\n## Create Private Endpoint connection. ##\n\n$parameters1 = @{\n\n Name = \u2018myConnection\u2019\n\n PrivateLinkServiceId = $webapp.ID\n\n GroupID = \u2018sites\u2019\n\n}\n\n$privateEndpointConnection = New-AzPrivateLinkServiceConnection @parameters1\n\n## Place virtual network into variable. ##\n\n$vnet = Get-AzVirtualNetwork -ResourceGroupName \u2018CreatePrivateEndpointQS-rg\u2019 -Name \u2018myVNet\u2019\n\n## Disable private endpoint network policy ##\n\n$vnet.Subnets&#91;0].PrivateEndpointNetworkPolicies = \u201cDisabled\u201d\n\n$vnet | Set-AzVirtualNetwork\n\n## Create private endpoint\n\n$parameters2 = @{\n\n ResourceGroupName = \u2018CreatePrivateEndpointQS-rg\u2019\n\n Name = \u2018myPrivateEndpoint\u2019\n\n Location = \u2018eastus\u2019\n\n Subnet = $vnet.Subnets&#91;0]\n\n PrivateLinkServiceConnection = $privateEndpointConnection\n\n}\n\nNew-AzPrivateEndpoint @parameters2<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1011\" height=\"364\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture6-8.png\" alt=\"\" class=\"wp-image-2532\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture6-8.png 1011w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture6-8-300x108.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture6-8-768x277.png 768w\" sizes=\"auto, (max-width: 1011px) 100vw, 1011px\" \/><\/figure>\n\n\n\n<p><strong>Task 5: Configure the private DNS zone<\/strong><\/p>\n\n\n\n<p>In this section you\u2019ll create and configure the private DNS zone using:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>New-AzPrivateDnsZone<\/li><li>New-AzPrivateDnsVirtualNetworkLink<\/li><li>New-AzPrivateDnsZoneConfig<\/li><li>New-AzPrivateDnsZoneGroup<\/li><\/ul>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Place virtual network into variable. ##\n\n$vnet = Get-AzVirtualNetwork -ResourceGroupName \u2018CreatePrivateEndpointQS-rg\u2019 -Name \u2018myVNet\u2019\n\n## Create private dns zone. ##\n\n$parameters1 = @{\n\n ResourceGroupName = \u2018CreatePrivateEndpointQS-rg\u2019\n\n Name = \u2018privatelink.azurewebsites.net\u2019\n\n}\n\n$zone = New-AzPrivateDnsZone @parameters1\n\n## Create dns network link. ##\n\n$parameters2 = @{\n\n ResourceGroupName = \u2018CreatePrivateEndpointQS-rg\u2019\n\n ZoneName = \u2018privatelink.azurewebsites.net\u2019\n\n Name = \u2018myLink\u2019\n\n VirtualNetworkId = $vnet.Id\n\n}\n\n$link = New-AzPrivateDnsVirtualNetworkLink @parameters2\n\n## Create DNS configuration ##\n\n$parameters3 = @{\n\n Name = \u2018privatelink.azurewebsites.net\u2019\n\n PrivateDnsZoneId = $zone.ResourceId\n\n}\n\n$config = New-AzPrivateDnsZoneConfig @parameters3\n\n## Create DNS zone group. ##\n\n$parameters4 = @{\n\n ResourceGroupName = \u2018CreatePrivateEndpointQS-rg\u2019\n\n PrivateEndpointName = \u2018myPrivateEndpoint\u2019\n\n Name = \u2018myZoneGroup\u2019\n\n PrivateDnsZoneConfig = $config\n\n}\n\nNew-AzPrivateDnsZoneGroup @parameters4<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1004\" height=\"419\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture7-8.png\" alt=\"\" class=\"wp-image-2533\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture7-8.png 1004w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture7-8-300x125.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture7-8-768x321.png 768w\" sizes=\"auto, (max-width: 1004px) 100vw, 1004px\" \/><\/figure>\n\n\n\n<p><strong>Task 6: Test connectivity to the Private Endpoint<\/strong><\/p>\n\n\n\n<p>In this section, you\u2019ll use the virtual machine you created in the previous step to connect to the SQL server across the Private Endpoint.<\/p>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>Sign in to the <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure portal<\/a><\/li><li>Select <strong>Resource groups<\/strong> in the left-hand navigation pane.<\/li><li>Select <strong>CreatePrivateEndpointQS-rg<\/strong>.<\/li><li>Select <strong>myVM<\/strong>.<\/li><li>On the overview page for <strong>myVM<\/strong>, select <strong>Connect<\/strong> then <strong>Bastion<\/strong>.<\/li><li>Select the blue <strong>Use Bastion<\/strong> button.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"380\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture8-7-1024x380.png\" alt=\"\" class=\"wp-image-2534\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture8-7-1024x380.png 1024w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture8-7-300x111.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture8-7-768x285.png 768w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture8-7.png 1298w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>Enter the username and password that you entered during the virtual machine creation.<\/li><li>Open Windows PowerShell on the server after you connect.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"974\" height=\"459\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture9-7.png\" alt=\"\" class=\"wp-image-2535\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture9-7.png 974w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture9-7-300x141.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture9-7-768x362.png 768w\" sizes=\"auto, (max-width: 974px) 100vw, 974px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>Enter <code>nslookup webapp-exceedlabs19022022.azurewebsites.net<\/code>. Replace &lt;your-webapp-name&gt; with the name of the web app you created in the previous steps. You\u2019ll receive a message similar to what is displayed below:<\/li><\/ul>\n\n\n\n<p>code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS C:\\Users\\Student&gt; nslookup webapp-exceedlabs19022022.azurewebsites.net\nServer:  UnKnown\nAddress:  168.63.129.16\n\nNon-authoritative answer:\nName:    webapp-exceedlabs19022022.privatelink.azurewebsites.net\nAddress:  10.0.0.5\nAliases:  webapp-exceedlabs19022022.azurewebsites.net\n<\/code><\/pre>\n\n\n\n<p>app name. This address is in the subnet of the virtual network you created previously.<\/p>\n\n\n\n<ul class=\"wp-block-list\" type=\"1\"><li>In the bastion connection to <strong>myVM<\/strong>, open Internet Explorer.<\/li><li>Enter the url of your web app, <strong>https:\/\/<\/strong> webapp-exceedlabs19022022.azurewebsites.net<\/li><li>You\u2019ll receive the default web app page if your application hasn\u2019t been deployed:<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"841\" height=\"568\" src=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture10-5.png\" alt=\"\" class=\"wp-image-2536\" srcset=\"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture10-5.png 841w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture10-5-300x203.png 300w, https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/picture10-5-768x519.png 768w\" sizes=\"auto, (max-width: 841px) 100vw, 841px\" \/><\/figure>\n\n\n\n<p>Close the connection to <strong>myVM<\/strong>.<\/p>\n\n\n\n<p>Congratulations! You have created and tested an Azure private endpoint using PowerShell.<\/p>\n\n\n\n<p><mark class=\"kt-highlight\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-virtue-primary-color\">Reminder: Don&#8217;t forget to delete or shutdown all unused Azure resources after your labs for cost saving<\/mark><\/mark><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Get started with Azure Private Link by using a Private Endpoint to connect securely to an Azure web app. There are many ways to create Endpoints including Portal, CLI, PowerShell etc. You\u2019ll create a Private Endpoint for an Azure web &hellip; <a href=\"https:\/\/exceedthecloud.com\/?p=2526\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":2540,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"kt_blocks_editor_width":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[17,98,4,18,19,26],"tags":[8,99,35,31,54],"class_list":["post-2526","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networking","category-powershell","category-practical-labs-series","category-security","category-virtual-machines","category-web","tag-azure","tag-powershell","tag-virtual-machines","tag-virtual-network","tag-visual-studio-code"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/exceedthecloud.com\/wp-content\/uploads\/2022\/02\/istockphoto-1048305332-612x612-1.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2526"}],"version-history":[{"count":12,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2526\/revisions"}],"predecessor-version":[{"id":2555,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2526\/revisions\/2555"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=\/wp\/v2\/media\/2540"}],"wp:attachment":[{"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exceedthecloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}