Mengintegrasikan API Management pada jaringan virtual internal dengan Application Gateway

BERLAKU UNTUK: Pengembang | Premium

Anda dapat mengonfigurasi Azure API Management pada jaringan virtual dalam mode internal, sehingga membuatnya agar hanya dapat diakses dari dalam jaringan virtual. Azure Application Gateway adalah platform as a service (PaaS) yang bertindak sebagai penyeimbang muatan Layer-7. Platform ini bertindak sebagai layanan proksi terbalik dan menyajikan Azure Web Application Firewall (WAF) sebagai salah satu penawarannya.

Dengan menggabungkan API Management yang diprovisikan pada jaringan virtual internal dengan ujung depan Application Gateway, Anda dapat:

  • Gunakan sumber daya API Management yang sama untuk konsumsi oleh konsumen internal dan konsumen eksternal.
  • Gunakan satu sumber daya API Management dan memiliki subkumpulan API yang ditentukan dalam API Management yang tersedia untuk konsumen eksternal.
  • Menyediakan cara cepat mengaktifkan dan menonaktifkan akses ke API Management dari internet publik.

Untuk panduan arsitektur, lihat:

Catatan

Artikel ini telah diperbarui untuk menggunakan Application Gateway WAF_v2 SKU.

Prasyarat

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Untuk melakukan langkah-langkah yang dijelaskan dalam artikel ini, Anda harus memiliki:

Skenario

Di artikel ini, Anda akan mempelajari cara menggunakan satu instans API Management bagi pelanggan internal dan eksternal dan membuatnya agar bertindak sebagai satu front end untuk API lokal dan cloud. Anda membuat instans API Management dari jenis penyewa tunggal versi 2 (stv2) yang lebih baru. Anda mempelajari cara menggunakan listener publik dan privat di Application Gateway. Anda memahami cara mengekspos hanya subset API Anda untuk konsumsi eksternal dengan menggunakan fungsi perutean yang tersedia di Application Gateway. Dalam contoh tersebut, API disorot dengan warna hijau.

Pada contoh pengaturan pertama, semua API Anda dikelola hanya dari dalam jaringan virtual. Konsumen internal dapat mengakses semua API internal dan eksternal Anda. Lalu lintas tidak pernah keluar ke internet. Konektivitas dengan performa yang tinggi dapat dicapai melalui sirkuit Azure ExpressRoute. Dalam contoh tersebut, konsumen internal disorot dengan warna oranye.

Diagram yang menampilkan rute URL.

Apa yang diperlukan untuk mengintegrasikan API Management dan Application Gateway?

  • Kluster server back-end: Kluster server ini adalah alamat IP virtual internal API Management.
  • Pengaturan kluster server back-end: Setiap kumpulan memiliki pengaturan seperti port, protokol, dan afinitas berbasis cookie. Pengaturan ini diterapkan ke semua server di dalam kumpulan.
  • Port front-end: Port publik ini dibuka pada gateway aplikasi. Lalu lintas yang menuju ke port tersebut akan dialihkan ke salah satu server back-end.
  • Listener: Listener memiliki port front-end, protokol (Http atau Https, nilai-nilai ini peka huruf besar/kecil), dan nama sertifikat Transport Layer Security (TLS) (jika mengonfigurasi offload TLS).
  • Aturan: Aturan ini mengikat pendengar ke kluster server back-end.
  • Probe kesehatan kustom: Secara default, Application Gateway menggunakan probe berbasis alamat IP untuk mengetahui server mana di BackendAddressPool yang aktif. Probe default gagal karena API Management hanya menanggapi permintaan dengan header host yang benar. Anda menentukan probe kesehatan kustom untuk membantu gateway aplikasi untuk menentukan bahwa layanan tersebut memang aktif dan harus meneruskan permintaan.
  • Sertifikat domain kustom: Untuk mengakses API Management dari internet, buat catatan Sistem Nama Domain (DNS) untuk memetakan nama hostnya ke alamat IP front-end Application Gateway. Pemetaan ini memastikan header dan sertifikat Host yang dikirim ke API Management valid. Dalam contoh ini, kita menggunakan tiga sertifikat. Sertifikat tersebut ditujukan untuk gateway API Management (back-end), portal pengembang, serta titik akhir manajemen.

Mengekspos portal pengembang dan titik akhir manajemen secara eksternal melalui Application Gateway

Pada artikel ini, kami juga akan menunjukkan portal pengembang dan titik akhir manajemen ke audiens eksternal melalui gateway aplikasi. Langkah tambahan diperlukan untuk membuat pendengar, probe, pengaturan, dan aturan untuk setiap titik akhir. Semua detail telah disediakan dalam setiap langkahnya.

Jika Anda menggunakan ID Microsoft Entra atau autentikasi pihak ketiga, aktifkan fitur afinitas sesi berbasis cookie di Application Gateway.

Peringatan

Untuk mencegah WAF Application Gateway agar tidak memutuskan pengunduhan spesifikasi OpenAPI pada portal pengembang, nonaktifkan aturan firewall 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination".

Aturan WAF Application Gateway yang dapat memutuskan fungsionalitas portal antara lain:

  • 920300, 920330, 931130, 942100, 942110, 942180, 942200, 942260, 942340, 942370 untuk mode administratif
  • 942200, 942260, 942370, 942430, 942440 untuk portal yang diterbitkan

Mengatur Variabel

Sepanjang panduan ini, Anda perlu menentukan beberapa variabel. Penamaan didasarkan pada panduan singkatan Cloud Adoption Framework.

# These variables must be changed.
$subscriptionId = "00000000-0000-0000-0000-000000000000"      # GUID of your Azure subscription
$domain = "contoso.net"                                       # The custom domain for your certificate
$apimServiceName = "apim-contoso"                             # API Management service instance name, must be globally unique    
$apimDomainNameLabel = $apimServiceName                       # Domain name label for API Management's public IP address, must be globally unique
$apimAdminEmail = "admin@contoso.net"                         # Administrator's email address - use your email address

$gatewayHostname = "api.$domain"                              # API gateway host
$portalHostname = "portal.$domain"                            # API developer portal host
$managementHostname = "management.$domain"                    # API management endpoint host

$baseCertPath = "C:\Users\Contoso\"                           # The base path where all certificates are stored
$trustedRootCertCerPath = "${baseCertPath}trustedroot.cer"    # Full path to contoso.net trusted root .cer file
$gatewayCertPfxPath = "${baseCertPath}gateway.pfx"            # Full path to api.contoso.net .pfx file
$portalCertPfxPath = "${baseCertPath}portal.pfx"              # Full path to portal.contoso.net .pfx file
$managementCertPfxPath = "${baseCertPath}management.pfx"      # Full path to management.contoso.net .pfx file

$gatewayCertPfxPassword = "certificatePassword123"            # Password for api.contoso.net pfx certificate
$portalCertPfxPassword = "certificatePassword123"             # Password for portal.contoso.net pfx certificate
$managementCertPfxPassword = "certificatePassword123"         # Password for management.contoso.net pfx certificate

# These variables may be changed.
$resGroupName = "rg-apim-agw"                                 # Resource group name that will hold all assets
$location = "West US"                                         # Azure region that will hold all assets
$apimOrganization = "Contoso"                                 # Organization name    
$appgwName = "agw-contoso"                                    # The name of the Application Gateway

Membuat grup sumber daya untuk Resource Manager

Cara membuat grup sumber daya untuk Azure Resource Manager:

  1. Masuk ke Azure.

    Connect-AzAccount
    
  2. Autentikasi dengan kredensial Anda.

  3. Pilih langganan yang ingin Anda gunakan.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Buat grup sumber daya. Anda bisa melewati langkah ini jika Anda menggunakan grup sumber daya yang sudah ada.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Resource Manager mengharuskan agar senya grup sumber daya menentukan lokasi. Lokasi ini akan digunakan sebagai lokasi default sumber daya yang dibuat di grup sumber daya tersebut. Pastikan semua perintah untuk membuat gateway aplikasi menggunakan grup sumber daya yang sama.

Membuat jaringan virtual dan subnet untuk gateway aplikasi

Contoh berikut menjelaskan cara membuat jaringan virtual dengan menggunakan Resource Manager. Jaringan virtual pada contoh ini terdiri dari subnet terpisah untuk Application Gateway dan API Management.

  1. Atur alamat IP Application Gateway.

    Catatan

    Karena akan ada pendengar publik dan privat, kami memerlukan alamat IP publik dan privat. Alamat IP publik statis harus dibuat sedangkan alamat IP privat harus dipilih dari subnet yang terkait dengan gateway aplikasi. Alamat IP privat telah dipilih secara segan-segan.

    $appGatewayExternalIP = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-ag" -location $location -AllocationMethod Static -Sku Standard -Force
    $appGatewayInternalIP = "10.0.0.100"
    
    [String[]]$appGwNsgDestIPs = $appGatewayInternalIP, $appGatewayExternalIP.IpAddress
    
  2. Buat aturan kelompok keamanan jaringan (NSG) dan NSG untuk subnet Application Gateway.

    $appGwRule1 = New-AzNetworkSecurityRuleConfig -Name appgw-in -Description "AppGw inbound" `
        -Access Allow -Protocol * -Direction Inbound -Priority 100 -SourceAddressPrefix `
        GatewayManager -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 65200-65535
    
    $appGwRule2 = New-AzNetworkSecurityRuleConfig -Name appgw-in-internet -Description "AppGw inbound Internet" `
        -Access Allow -Protocol "TCP" -Direction Inbound -Priority 110 -SourceAddressPrefix `
        Internet -SourcePortRange * -DestinationAddressPrefix $appGwNsgDestIPs -DestinationPortRange 443
    
    $appGwNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name `
        "nsg-agw" -SecurityRules $appGwRule1, $appGwRule2
    
  3. Buat aturan kelompok keamanan jaringan (NSG) dan NSG untuk subnet API Management. API Management stv2 memerlukan beberapa aturan NSG tertentu.

    $apimRule1 = New-AzNetworkSecurityRuleConfig -Name APIM-Management -Description "APIM inbound" `
        -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix ApiManagement `
        -SourcePortRange * -DestinationAddressPrefix VirtualNetwork -DestinationPortRange 3443
    
    $apimRule2 = New-AzNetworkSecurityRuleConfig -Name AllowAppGatewayToAPIM -Description "Allows inbound App Gateway traffic to APIM" `
        -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 -SourceAddressPrefix "10.0.0.0/24" `
        -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 443
    
    $apimRule3 = New-AzNetworkSecurityRuleConfig -Name AllowAzureLoadBalancer -Description "Allows inbound Azure Infrastructure Load Balancer traffic to APIM" `
        -Access Allow -Protocol Tcp -Direction Inbound -Priority 120 -SourceAddressPrefix AzureLoadBalancer `
        -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 6390
    
    $apimRule4 = New-AzNetworkSecurityRuleConfig -Name AllowKeyVault -Description "Allows outbound traffic to Azure Key Vault" `
        -Access Allow -Protocol Tcp -Direction Outbound -Priority 100 -SourceAddressPrefix "10.0.1.0/24" `
        -SourcePortRange * -DestinationAddressPrefix AzureKeyVault -DestinationPortRange 443
    
    $apimNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name `
        "nsg-apim" -SecurityRules $apimRule1, $apimRule2, $apimRule3, $apimRule4
    
  4. Tetapkan rentang alamat 10.0.0.0/24 ke variabel subnet agar digunakan oleh Application Gateway saat Anda membuat jaringan virtual.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Tetapkan rentang alamat 10.0.1.0/24 ke variabel subnet agar digunakan oleh API Management saat Anda membuat jaringan virtual.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Buat jaringan virtual bernama vnet-contoso. Gunakan awalan 10.0.0.0/16 dengan subnet 10.0.0.0/24 dan 10.0.1.0/24.

    $vnet = New-AzVirtualNetwork -Name "vnet-contoso" -ResourceGroupName $resGroupName `
      -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $appGatewaySubnet,$apimSubnet
    
  7. Tetapkan variabel subnet untuk langkah selanjutnya.

    $appGatewaySubnetData = $vnet.Subnets[0]
    $apimSubnetData = $vnet.Subnets[1]
    

Membuat instans API Management di dalam jaringan virtual

Contoh berikut menunjukkan cara membuat instans API Management dalam jaringan virtual yang dikonfigurasi khusus untuk akses internal.

  1. API Management stv2 memerlukan IP publik dengan DomainNameLabelunik .

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Buat objek jaringan virtual API Management dengan menggunakan subnet $apimSubnetData yang telah Anda buat.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Buat instans API Management di dalam jaringan virtual. Contoh ini membuat layanan pada tingkat layanan Pengembang. Ganti nama unik instans API Management Anda.

    $apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization `
        -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
    

Dibutuhkan waktu antara 30 dan 40 menit untuk membuat dan mengaktifkan instans API Management di tingkat ini. Setelah perintah sebelumnya berhasil, lihat Konfigurasi DNS yang diperlukan untuk mengakses jaringan virtual internal layanan API Management untuk memastikan aksesnya.

Mengatur nama domain kustom pada API Management

Cara menyiapkan nama domain kustom di API Management:

  1. Menginisialisasi variabel berikut dengan detail sertifikat yang memiliki kunci pribadi untuk domain dan sertifikat root yang tepercaya. Pada contoh berikut, kami menggunakan mapi.contoso.net, portal.contoso.net, dan management.contoso.net.

    $certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force
    $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force
    $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
    
  2. Buat dan atur objek konfigurasi Hostname untuk titik akhir API Management.

    $gatewayHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $gatewayHostname `
      -HostnameType Proxy -PfxPath $gatewayCertPfxPath -PfxPassword $certGatewayPwd
    
    $portalHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $portalHostname `
      -HostnameType DeveloperPortal -PfxPath $portalCertPfxPath -PfxPassword $certPortalPwd
    
    $managementHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $managementHostname `
      -HostnameType Management -PfxPath $managementCertPfxPath -PfxPassword $certManagementPwd
    
    $apimService.ProxyCustomHostnameConfiguration = $gatewayHostnameConfig
    $apimService.PortalCustomHostnameConfiguration = $portalHostnameConfig
    $apimService.ManagementCustomHostnameConfiguration = $managementHostnameConfig
    
    Set-AzApiManagement -InputObject $apimService
    

Mengonfigurasi zona pribadi untuk resolusi DNS pada jaringan virtual

Cara mengonfigurasi zona DNS privat untuk resolusi DNS pada jaringan virtual:

  1. Membuat zona DNS pribadi dan menautkan jaringan virtual.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Buat catatan-A untuk nama host domain kustom yang memetakan ke alamat IP privat API Management.

    $apimIP = $apimService.PrivateIPAddresses[0]
    
    New-AzPrivateDnsRecordSet -Name api -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    
    New-AzPrivateDnsRecordSet -Name portal -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    
    New-AzPrivateDnsRecordSet -Name management -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    

Membuat konfigurasi gateway aplikasi

Semua item konfigurasi harus disiapkan sebelum membuat gateway aplikasi. Langkah-langkah berikut bertujuan untuk membuat item konfigurasi yang diperlukan untuk sumber daya Application Gateway.

  1. Buat konfigurasi IP Application Gateway yang diberi nama gatewayIP01. Saat Application Gateway dimulai, Application Gateway akan mengambil alamat IP dari subnet yang dikonfigurasi dan merutekan lalu lintas ke alamat IP di kumpulan IP back-end. Perlu diingat bahwa setiap instans mengambil satu alamat IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Konfigurasikan port frontend yang sama untuk titik akhir IP publik dan privat. Port ini adalah port yang digunakan oleh pengguna untuk tersambung. Dengan menggunakan port yang sama untuk keduanya, kami memastikan bahwa permintaan internal dan eksternal dapat dibuat ke port yang sama.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Konfigurasikan dua alamat IP frontend - satu publik dan satu privat. Alamat IP privat diambil dari subnet gateway aplikasi, yang merupakan yang pertama dibuat pada indeks 0.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Konfigurasikan sertifikat untuk gateway aplikasi. Sertifikat tersebut akan digunakan untuk membatalkan enkripsi dan mendekripsi ulang lalu lintas yang melewatinya.

    Catatan

    Application Gateway mendukung penentuan opsi TLS kustom, menonaktifkan versi protokol TLS tertentu, dan menentukan suite cipher serta urutan preferensi. Untuk mempelajari lebih lanjut tentang opsi TLS yang dapat dikonfigurasi, lihat ikhtisar kebijakan TLS.

    $certGateway = New-AzApplicationGatewaySslCertificate -Name "gatewaycert" `
      -CertificateFile $gatewayCertPfxPath -Password $certGatewayPwd
    
    $certPortal = New-AzApplicationGatewaySslCertificate -Name "portalcert" `
      -CertificateFile $portalCertPfxPath -Password $certPortalPwd
    
    $certManagement = New-AzApplicationGatewaySslCertificate -Name "managementcert" `
      -CertificateFile $managementCertPfxPath -Password $certManagementPwd
    
  5. Buat pendengar HTTP untuk gateway aplikasi. Tetapkan konfigurasi IP front-end, port, dan sertifikat TLS/SSL untuk digunakan.

    # Public/external listeners
    $gatewayListener = New-AzApplicationGatewayHttpListener -Name "gatewaylistener" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 `
      -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true
    
    $portalListener = New-AzApplicationGatewayHttpListener -Name "portallistener" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 `
      -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true
    
    $managementListener = New-AzApplicationGatewayHttpListener -Name "managementlistener" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 `
      -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true
    
    # Private/internal listeners
    $gatewayListenerPrivate = New-AzApplicationGatewayHttpListener -Name "gatewaylistener-private" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 `
      -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true
    
    $portalListenerPrivate = New-AzApplicationGatewayHttpListener -Name "portallistener-private" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 `
      -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true
    
    $managementListenerPrivate = New-AzApplicationGatewayHttpListener -Name "managementlistener-private" `
      -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 `
      -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true
    
  6. Buat probe kustom ke titik akhir domain gateway ContosoApi API Management. Jalur /status-0123456789abcdef adalah titik akhir kesehatan default yang dihosting di semua instans API Management. Atur api.contoso.net sebagai nama host probe kustom untuk mengamankannya dengan sertifikat TLS/SSL.

    Catatan

    Nama host contosoapi.azure-api.net adalah nama host proksi default yang dikonfigurasi saat layanan bernama contosoapi dibuat di Azure publik.

    $apimGatewayProbe = New-AzApplicationGatewayProbeConfig -Name "apimgatewayprobe" `
      -Protocol "Https" -HostName $gatewayHostname -Path "/status-0123456789abcdef" `
      -Interval 30 -Timeout 120 -UnhealthyThreshold 8
    
    $apimPortalProbe = New-AzApplicationGatewayProbeConfig -Name "apimportalprobe" `
      -Protocol "Https" -HostName $portalHostname -Path "/signin" `
      -Interval 60 -Timeout 300 -UnhealthyThreshold 8
    
    $apimManagementProbe = New-AzApplicationGatewayProbeConfig -Name "apimmanagementprobe" `
      -Protocol "Https" -HostName $managementHostname -Path "/ServiceStatus" `
      -Interval 60 -Timeout 300 -UnhealthyThreshold 8
    
  7. Konfigurasikan sertifikat akar tepercaya sertifikat backend. Sertifikat ini memverifikasi keaslian sertifikat backend.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Konfigurasikan pengaturan backend HTTP untuk gateway aplikasi, termasuk batas waktu habis untuk permintaan backend, setelah itu mereka dibatalkan. Nilai ini berbeda dengan waktu habis probe.

    $apimPoolGatewaySetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolGatewaySetting" `
      -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimGatewayProbe `
      -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180
    
    $apimPoolPortalSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolPortalSetting" `
      -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimPortalProbe `
      -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180
    
    $apimPoolManagementSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolManagementSetting" `
      -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimManagementProbe `
      -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180
    
  9. Konfigurasikan kumpulan alamat IP backend untuk setiap titik akhir API Management dengan menggunakan nama domain masing-masing.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Buat aturan perutean untuk gateway aplikasi untuk menggunakan perutean dasar.

    # Public/external gateway rules
    $gatewayRule = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule" `
      -RuleType Basic -HttpListener $gatewayListener -BackendAddressPool $apimGatewayBackendPool `
      -BackendHttpSettings $apimPoolGatewaySetting -Priority 10
    
    $portalRule = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule" `
      -RuleType Basic -HttpListener $portalListener -BackendAddressPool $apimPortalBackendPool `
      -BackendHttpSettings $apimPoolPortalSetting -Priority 20
    
    $managementRule = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule" `
      -RuleType Basic -HttpListener $managementListener -BackendAddressPool $apimManagementBackendPool `
      -BackendHttpSettings $apimPoolManagementSetting -Priority 30
    
    # Private/internal gateway rules
    $gatewayRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule-private" `
      -RuleType Basic -HttpListener $gatewayListenerPrivate -BackendAddressPool $apimGatewayBackendPool `
      -BackendHttpSettings $apimPoolGatewaySetting -Priority 11
    
    $portalRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule-private" `
      -RuleType Basic -HttpListener $portalListenerPrivate -BackendAddressPool $apimPortalBackendPool `
      -BackendHttpSettings $apimPoolPortalSetting -Priority 21
    
    $managementRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule-private" `
      -RuleType Basic -HttpListener $managementListenerPrivate -BackendAddressPool $apimManagementBackendPool `
      -BackendHttpSettings $apimPoolManagementSetting -Priority 31
    

    Tip

    Ubah -RuleType dan perutean untuk membatasi akses ke halaman portal pengembang tertentu.

  11. Mengonfigurasi jumlah instans dan ukuran untuk gateway aplikasi. Pada contoh berikut, kita menggunakan SKU WAF_v2 untuk tingkat keamanan yang lebih tinggi pada sumber daya API Management.

    Gunakan minimal dua instans (Kapasitas) untuk beban kerja produksi. Anda mungkin hanya ingin menggunakan satu instans untuk skenario nonproduksi atau untuk eksperimen umum. Untuk informasi lebih lanjut, lihat Harga Azure Application Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Konfigurasikan mode WAF.

    Tip

    Untuk jangka waktu singkat selama penyiapan dan untuk menguji aturan firewall, Anda mungkin ingin mengonfigurasi mode "Deteksi", yang memantau dan mencatat pemberitahuan ancaman tetapi tidak memblokir lalu lintas. Anda kemudian dapat membuat pembaruan apa pun pada aturan firewall sebelum beralih ke mode "Pencegahan", yang memblokir gangguan dan serangan yang dideteksi aturan.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Karena dafault-nya saat ini adalah TLS 1.0, atur gateway aplikasi agar menggunakan salah satu dari kebijakan TLS 1.2 terbaru.

    $policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
    

Membuat gateway aplikasi

  1. Buat gateway aplikasi dengan semua objek konfigurasi dari langkah-langkah sebelumnya. Dibutuhkan waktu 15 menit untuk membuat instans.

    $appgw = New-AzApplicationGateway `
      -Name $appgwName `
      -ResourceGroupName $resGroupName `
      -Location $location `
      -Sku $sku `
      -SslPolicy $policy `
      -SslCertificates $certGateway, $certPortal, $certManagement `
      -TrustedRootCertificate $trustedRootCert `
      -BackendAddressPools $apimGatewayBackendPool, $apimPortalBackendPool, $apimManagementBackendPool `
      -BackendHttpSettingsCollection $apimPoolGatewaySetting, $apimPoolPortalSetting, $apimPoolManagementSetting `
      -GatewayIpConfigurations $gipconfig `
      -FrontendIpConfigurations $fipconfig01, $fipconfig02 `
      -FrontendPorts $fp01 `
      -HttpListeners $gatewayListener, $portalListener, $managementListener, $gatewayListenerPrivate, $portalListenerPrivate, $managementListenerPrivate `
      -RequestRoutingRules $gatewayRule, $portalRule, $managementRule, $gatewayRulePrivate, $portalRulePrivate, $managementRulePrivate `
      -Probes $apimGatewayProbe, $apimPortalProbe, $apimManagementProbe `
      -WebApplicationFirewallConfig $config
    
  2. Konfirmasikan status kesehatan back end API Management.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Pastikan bahwa status kesehatan setiap kumpulan backend memang Sehat. Jika Anda perlu memecahkan masalah terkait backend yang tidak sehat atau backend dengan status kesehatan yang tidak diketahui, lihat Memecahkan masalah terkait kesehatan backend pada Application Gateway.

Membuat rekaman DNS untuk mengakses titik akhir API Management dari internet

Setelah gateway aplikasi dibuat, konfigurasikan komunikasi ke API Management dari internet. Buat rekaman A DNS yang memetakan setiap nama host titik akhir API Management yang Anda konfigurasikan ke alamat IP publik statik gateway aplikasi. Dalam artikel ini, contoh nama host adalah api.contoso.net, portal.contoso.net, dan management.contoso.net.

verifikasi Koneksi ivitas

Untuk tujuan pengujian cepat, pertimbangkan untuk sementara mengubah file host komputer Anda dengan entri yang memetakan alamat IP publik gateway aplikasi ke nama host titik akhir API Management:

  1. Ubah file host. Misalnya, jika IP publik gateway aplikasi adalah 172.203.129.101, entrinya mungkin 172.203.129.101 api.contoso.net.
  2. Jalankan perintah curl terhadap titik akhir status API Management (jalur yang sama yang digunakan untuk pemeriksaan kesehatan sebelumnya): curl -v https://api.contoso.net/status-0123456789abcdef Ini harus mengembalikan 200 Service Operational status, yang menunjukkan keberhasilan komunikasi ke API Management melalui Application Gateway.

Pertimbangan DNS

Application Gateway sekarang memiliki jalur privat dan publik. Menggunakan domain dan port yang sama membuat situasi DNS split-brain di mana pemecah masalah DNS eksternal harus diatur untuk menyelesaikan api.contoso.net ke alamat IP eksternal gateway aplikasi sedangkan pemecah masalah DNS internal harus menyelesaikan domain yang sama ke alamat IP internal gateway aplikasi. Penyiapan ini memberikan keuntungan dalam aplikasi tersebut tidak perlu mengubah domain atau port untuk penargetan internal atau eksternal aplikasi dan API. Tanggung jawab untuk penargetan ditangguhkan dengan tepat kepada pemecah masalah DNS.

Ringkasan

API Management yang dikonfigurasikan dalam jaringan virtual memberikan satu antarmuka gateway untuk semua API yang dikonfigurasikan, baik yang dihosting secara lokal maupun di cloud. Integrasi Application Gateway dengan API Management memberi Anda fleksibilitas yang secara selektif mengaktifkan agar API tertentu dapat diakses di internet. Integrasi juga menyediakan WAF sebagai front end instans API Management Anda.

Langkah berikutnya