プライベートリンクサービスで安全な内部のapimにアクセスしてください
42126 ワード
Azureプライベートリンクサービスは何ですか?
Azure Private Link service Azureプライベートリンクによって供給されるあなた自身のサービスへの参照です.Azure Standard Load Balancerの背後で実行されているサービスは、プライベートリンクへのアクセスを可能にすることができます.そのため、お客様のサービスに対する消費者は自分のVNETから個人的にアクセスすることができます.お客様は、VNET内のプライベートエンドポイントを作成し、このサービスにマップすることができます.
外部の非peed vnetからのプライベートリンクサービスで安全な内部API管理サービスにアクセスする
今日のチュートリアルでは、このサービスの興味深いユースケースを見ています.外部ソースを接続して外部の非ピアネットからのAPI管理サービス(内部VNETモード)を消費する方法について説明します.次の図に示すように、
注:私たちのプライベートエンドポイントを置くソースまたはエントリポイントは完全に異なる地域、テナントまたはサブスクリプションにあるネットワークにすることができます.
我々が始める前に、ちょうど我々がなぜこれをしたいかについて考えましょう?
APIM(内部VNETモード):API管理が内部のVNETモードで展開するとき、あなたはあなたがコントロールするアクセスのVNETの中でサービス終点を見ることができるだけです.攻撃表面積を減らすために、すべてのITエンドポイント(例えばゲートウェイ、APIMポータルと管理終点)でAPIMを構成することは内部のVNETの範囲内で保護されて、公共のインターネットからどんな潜在的脅威からでも直接アクセスすることができません.サービスは、我々のAPNETサービスをホストしている我々のVnetに接続性を持っているpeered vnetsからのみアクセスすることができます.
これは良いセキュリティの練習ですが、私たちが私たちのAPIを使用する必要がある消費者を持っている要件を持っている場合は、どのような場合は、おそらくIPアドレス空間に重複する別のVNetに位置し、ピアまたは私たちのAPNETサービスをホストする当社のVNETに接続することはできませんか?または、我々は完全に別の地域、テナントとサブスクリプションでVNETを持っている消費者がいる場合はどうですか?どのように我々はAPI管理サービスを消費できるようにすることができますし、すべての内部と安全を同時に維持しますか?
幸いにも、この問題声明の解決策があります、そして、それはAzureプライベートリンクサービスです.Azureプライベートリンクサービスでは、我々の内部のAPIMにIP/ポート推進を使用しているリレーとして機能する仮想マシンまたは仮想マシンスケールセットに接続される標準的なロードバランサを作成することができます.
何が必要ですか?
Azure仮想ネットワーク:我々は、我々の個人的なリンクサービスとAPIMのために2つのサブネットで新しいか既存のVNETを必要とします.
apim ( internal vnet mode ):このチュートリアルでは、internal APIM .
VMまたはVMMS :このチュートリアルでは、単一のWindows VMを作成し、内部のAPIMへのフォワーダとして設定します.(仮想マシンスケールセット( VMSS )を使うこともできます.
標準ロードバランサ:プライベートリンクサービスで使用されるVM/VMSSの前に標準負荷バランサを使用します.
プライベートリンクサービス:私たちはプライベートリンクサービスを作成し、我々のロードバランサでそれをリンクします.
プライベートエンドポイント:私たちは、外部Vnetのプライベートエンドポイントを作成し、非ピアネットワークからの内部のAPIMに接続をテストします.
Login-AzAccount
次に、私たちはresource group
, virtual network
and APIM (internal VNET mode)
走ること##./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"
注:このチュートリアルの新しいAPIMサービスを作成しているので、上記のPowerShellコードは10 - 20分の間に何かを取ることができます.私たちのapimが作成された後、APIMプライベートIPのノートを作ります.
次に、私たちは
Virtual machine
PLSサブネットでは、フォワーダとして使用されます.##./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
注意: IPフォワーディングはVMのネットワークインターフェースで有効になっています.// code/VM-forwarder.ps1#L13-L13
$NIC = New-AzNetworkInterface -Name $nicName -ResourceGroupName $resourceGroupName -Location $region -SubnetId $plsSubnetId -EnableIPForwarding
VMが作成された後、いくつかのコマンドをVM上で実行する必要があります.最初に我々はVMレジストリでIPルータを有効にし、HTTPS(TCPポート443)のトラフィックを許容するためにファイアウォールルールを作成し、最後にnetsh
.新しく作成されたVMに以下のPowerShellコマンドを実行します.
##./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
が有効になっている:すべての設定が正しいと確認した後、VMを再起動し、標準の負荷バランサを設定するには次の手順に進みます.
##./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
ロードバランサが作成された後に、私たちはVMをPLSVmForderderPoolと呼ばれているバックエンドプールに加えることができます.数分後に、我々の健康調査が定期的に我々の推進器VMでポート443をチェックするように働いているのを見ます.
次に、私たちが作成したロードバランサを使用してプライベートリンクサービスを作成します.また、外部の非ピアネットで実行しているテストVMからプライベートエンドポイントを使用してAPIMに到達できることをテストします.
Azure入口で
Private Link
と選択+ Add
下Private Link Services
.基本ブレードの下で次のように追加します.
名称
値
リソースグループ
私立
名称
京大理
地域
英国南部
アウトバウンド設定ブレードの下で次のように追加します.
名称
値
ロードバランサ
プライベートサービス
フロントエンドIP
plsfrontend ( 10.0.1.5 )
ソースナット
メインネット
ソースNATサブネット
plssubnet ( 10.0.1.0/24 )
プロキシの有効化
なし
プライベートIPアドレス
ダイナミック
アクセスセキュリティブレードの下では、2つのサブスクリプションのリストを使用してサブスクリプションで制限されます.アクセスの種類の詳細については
Role-based access control only
, Restricted by subscription
, Anyone with your alias
, 参照LINK .必要に応じて任意のタグを追加し、プライベートリンクサービスを作成します.
プライベートリンクサービスが作成されたので、別のサブスクリプションに移動します.そこで私はイーストエンド地域に存在する外部の非peed vnetにプライベートエンドポイントを作成してリンクします.別の領域に新しいvnetを作成することで、同じことを行うことができます.
Azure入口で
Private Link
と選択+ Add
下Private endpoints
.基本的なブレードの下で、サブスクリプションを選択し、外部のVNETが存在する領域を選択します(私の場合はイーストUSにあります).
名称
値
リソースグループ
アピール
名称
京大理
地域
東米国
リソースブレードの下で、PLSサービスに接続できます
resource ID
または次のいずれかを選択します.名称
値
購読
[サブスクリプションホスティング]
リソース型
マイクロソフト.ネットワーク/プライベートサービス
リソース
京大理
設定ブレードの下で、外部の仮想ネットワークを選択します(私の場合は東アメリカでホストされ、私のvnetは
External
):名称
値
仮想ネットワーク
[外部VNet名]
サブネット
[外部vnetサブネット]
必要に応じて任意のタグを追加し、プライベートエンドポイントを作成します.
そして、それは我々が今すぐに正常に東米国でホストされていない非公開外部Vnetから私たちのプライベートAPIMサービスにアクセスするために安全なエントリポイントを作成しました.私は私たちが作成したプライベートエンドポイントを介して私たちの接続性をテストすることができます私たち東米国外VネットでVMを実行している.私の場合、APIM - PEに割り当てられているプライベートエンドポイントIPは以下の通りです.
192.168.0.6
.私の外部VNETでテストしているテストVMは以下のIPアドレスです.
192.168.0.4
.私のapimに接続性をテストするために、私は私のapim終点を必要とします、そして、このテストのために、私はちょうどローカルホストファイルを使用している私のテストマシンの上で私の終点を設定します、しかし、私のapim終点をapim - PE(我々がつくった個人的な終点)にポイントしてください.
我々の接続性が働いているかどうか見ましょう:
あなたがこのポストを楽しんで、新しい何かを学んだことを願っています.また、このブログ記事で使用されているコードサンプルを見つけることができますGithub ページ.❤️
著者
閉じるこの動画はお気に入りから削除されています🐙 GitHub | 🐧 | 👾
・・・アクションボタン
背景色:1 .重要
色:千円!重要
ボーダーカラー:くぼんだ0 cbb 58!重要
}
マルセル.エルフォロー
Cloud Solutions & DevOps Architect.
Reference
この問題について(プライベートリンクサービスで安全な内部のapimにアクセスしてください), 我々は、より多くの情報をここで見つけました https://dev.to/pwd9000/access-internal-apim-securely-with-private-link-service-313oテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol