28
loading...
This website collects cookies to deliver better user experience
Login-AzAccount
resource group
, virtual network
and APIM (internal VNET mode)
by running:##./code/APIM-pre-reqs.ps1
# Variables.
$randomInt = Get-Random -Maximum 9999
$resourceGroupName = "PrivateAPIM"
$vnetName = "MainNet"
$apimSubnetName = "apimSubnet"
$plsSubnetName = "plsSubnet"
$apimName = "apim$randomInt"
$region = "uksouth"
# Create a resource resourceGroupName
New-AzResourceGroup -Name "$resourceGroupName" -Location "$region"
# Create NSG and pls (private link service) subnet.
$plsRule1 = New-AzNetworkSecurityRuleConfig `
-Name "pls-in" `
-Description "PLS inbound" `
-Access "Allow" `
-Protocol "Tcp" `
-Direction "Inbound" `
-Priority 100 `
-SourceAddressPrefix "VirtualNetwork" `
-SourcePortRange "*" `
-DestinationAddressPrefix "VirtualNetwork" `
-DestinationPortRange 443
$plsNsg = New-AzNetworkSecurityGroup `
-ResourceGroupName "$resourceGroupName" `
-Location "$region" `
-Name "NSG-PLS" `
-SecurityRules $plsRule1
$plsSubnet = New-AzVirtualNetworkSubnetConfig `
-Name "$plsSubnetName" `
-NetworkSecurityGroup $plsNsg `
-AddressPrefix 10.0.1.0/24
# Create NSG and APIM subnet subnet.
$apimRule1 = New-AzNetworkSecurityRuleConfig `
-Name "apim-in" `
-Description "APIM inbound" `
-Access "Allow" `
-Protocol "Tcp" `
-Direction "Inbound" `
-Priority 100 `
-SourceAddressPrefix "ApiManagement" `
-SourcePortRange "*" `
-DestinationAddressPrefix "VirtualNetwork" `
-DestinationPortRange 3443
$apimNsg = New-AzNetworkSecurityGroup `
-ResourceGroupName "$resourceGroupName" `
-Location "$region" `
-Name "NSG-APIM" `
-SecurityRules $apimRule1
$apimSubnet = New-AzVirtualNetworkSubnetConfig `
-Name "$apimSubnetName" `
-NetworkSecurityGroup $apimNsg `
-AddressPrefix 10.0.2.0/24
# Create VNET
Write-Output "Creating Virtual Network... Please Wait..."
$vnet = New-AzVirtualNetwork `
-Name "$vnetName" `
-ResourceGroupName "$resourceGroupName" `
-Location "$region" `
-AddressPrefix "10.0.0.0/16" `
-Subnet $plsSubnet,$apimSubnet
#Get APIM subnet ID
$plsSubnetData = $vnet.Subnets[0]
$apimSubnetData = $vnet.Subnets[1]
# Create an API Management service instance. (Developer SKU for this demo... SKUs: Basic, Consumption, Developer, Premium, Standard)
Write-Output "Creating APIM service... Please Wait..."
$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
$apimService = New-AzApiManagement `
-ResourceGroupName "$resourceGroupName" `
-Location "$region" `
-Name "$apimName" `
-Organization "pwd9000" `
-AdminEmail "[email protected]" `
-VirtualNetwork $apimVirtualNetwork `
-VpnType "Internal" -Sku "Developer"
Virtual machine
in the pls subnet, that will be used as a forwarder:##./code/VM-forwarder.ps1
$vmLocalAdmin = "pwd9000admin"
$vmLocalAdminPassword = Read-Host -assecurestring "Please enter your password"
$region = "uksouth"
$resourceGroupName = "PrivateAPIM"
$computerName = "VmPls01"
$vmName = "VmPls01"
$vmSize = "Standard_DS2_V2"
$networkName = "MainNet"
$nicName = "VmPls01-nic"
$vNet = Get-AzVirtualNetwork -Name $NetworkName
$plsSubnetId = ($vnet.Subnets | Where-Object {$_.name -eq "plsSubnet"}).id
$NIC = New-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroupName -Location $region -SubnetId $plsSubnetId -EnableIPForwarding
$Credential = New-Object System.Management.Automation.PSCredential ($vmLocalAdmin, $vmLocalAdminPassword);
$VirtualMachine = New-AzVMConfig -VMName $vmName -VMSize $vmSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $computerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2019-Datacenter' -Version latest
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -StorageAccountType "Standard_LRS" -CreateOption FromImage -Windows | Set-AzVMBootDiagnostic -Disable
New-AzVM -ResourceGroupName $resourceGroupName -Location $region -VM $VirtualMachine -Verbose
// code/VM-forwarder.ps1#L13-L13
$NIC = New-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroupName -Location $region -SubnetId $plsSubnetId -EnableIPForwarding
netsh
.##./code/VM-forwarder-config.ps1
#vars (APIM private IP after APIM created under $apimPrivateIP)
$port = '443'
$localaddress = (Get-NetIPConfiguration | Where-Object {$_.ipv4defaultgateway -ne $null}).IPv4Address.ipaddress
$apimPrivateIP = '10.0.2.5'
#Enable Port Forwarding on VM.
#Enable IP forwarding on Azure for the VM's #network interface as well.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -Name IpEnableRouter -Value 1
#Allow HTTPS(443) traffic inbound
New-NetFirewallRule -DisplayName "HTTPS-443-Inbound" -Direction Inbound -Action Allow -Protocol TCP -LocalPort $port
#Enable port 443 listener and forward
netsh interface portproxy add v4tov4 listenport=$port listenaddress=$localaddress connectport=$port connectaddress=$apimPrivateIP
IP Enable Router
has been activated:##./code/Standard-Load-Balancer.ps1
# Variables.
$resourceGroupName = "PrivateAPIM"
$vnetName = "MainNet"
$plsSubnet = ($vnet.Subnets | Where-Object {$_.name -eq "plsSubnet"}).id
$region = "uksouth"
#Vnet object
$vnet = Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroupName
#load balancer frontend configuration
$feip = New-AzLoadBalancerFrontendIpConfig -Name 'plsFrontEnd' -PrivateIpAddress '10.0.1.5' -SubnetId $plsSubnet
#backend address pool configuration
$bepool = New-AzLoadBalancerBackendAddressPoolConfig -Name 'plsVMforwarderPool'
#health probe
$healthprobe = New-AzLoadBalancerProbeConfig -Name 'Check443' -Protocol 'Tcp' -Port '443' -IntervalInSeconds '360' -ProbeCount '5'
# load balancer rule
$rule = New-AzLoadBalancerRuleConfig -Name 'plsHTTPS' -Protocol 'Tcp' -FrontendPort '443' -BackendPort '443' -IdleTimeoutInMinutes '15' -FrontendIpConfiguration $feip -BackendAddressPool $bepool -EnableTcpReset
## Create the load balancer resource
$loadbalancer = @{
ResourceGroupName = $resourceGroupName
Name = 'PrivateLinkServiceLB'
Location = $region
Sku = 'Standard'
FrontendIpConfiguration = $feip
BackendAddressPool = $bePool
LoadBalancingRule = $rule
Probe = $healthprobe
}
New-AzLoadBalancer @loadbalancer
Private Link
and select + Add
under Private Link Services
.Name | Value |
---|---|
Resource Group | PrivateAPIM |
Name | APIM-PLS |
Region | UK South |
Name | Value |
---|---|
Load Balancer | PrivateLinkServiceLB |
Frontend IP | plsFrontEnd (10.0.1.5) |
Source NAT VNET | MainNet |
Source NAT Subnet | plsSubnet (10.0.1.0/24) |
Enable TCP proxy V2 | No |
Private IP address | Dynamic |
Role-based access control only
, Restricted by subscription
, Anyone with your alias
, see this LINK.Private Link
and select + Add
under Private endpoints
.Name | Value |
---|---|
Resource Group | APIM |
Name | APIM-PE |
Region | East US |
resource ID
or by selecting the following:Name | Value |
---|---|
Subscription | [Subscription hosting PLS] |
Resource Type | Microsoft.Network/privateLinkservices |
Resource | APIM-PLS |
External
):Name | Value |
---|---|
Virtual Network | [external VNET name] |
Subnet | [External VNET subnet] |
192.168.0.6
.192.168.0.4
.28