Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule skonfigurujesz aplikację App Service z bezpieczną, sieciowo izolowaną komunikacją z usługami zaplecza. Przykładowy scenariusz jest użyty w Tutorial: Bezpieczne połączenie usługi Cognitive Service z usługi App Service z wykorzystaniem Key Vault. Po zakończeniu masz aplikację usługi App Service, która uzyskuje dostęp zarówno do usługi Key Vault, jak i narzędzi foundry za pośrednictwem sieci wirtualnej platformy Azure. Żaden inny ruch nie może mieć dostępu do tych zasobów backendowych. Cały ruch będzie izolowany w sieci wirtualnej za pośrednictwem integracji sieci wirtualnej i prywatnych punktów końcowych.
W usługach wielodostępnych ruch sieciowy wychodzący z aplikacji App Service do innych usług Azure dzieli to samo środowisko z innymi aplikacjami lub nawet innymi subskrypcjami. Mimo że sam ruch może być zaszyfrowany, niektóre scenariusze mogą wymagać dodatkowego poziomu zabezpieczeń poprzez izolację komunikacji zaplecza z innego ruchu sieciowego. Te scenariusze są zazwyczaj dostępne dla dużych przedsiębiorstw o wysokim poziomie wiedzy, ale usługa App Service udostępnia je dzięki integracji z siecią wirtualną.
W tej architekturze:
- Ruch publiczny do usług zaplecza jest blokowany.
- Ruch wychodzący z usługi App Service jest kierowany do sieci wirtualnej i może uzyskiwać dostęp do usług zaplecza.
- Usługa App Service może wykonywać rozpoznawanie nazw DNS w usługach zaplecza za pośrednictwem prywatnych stref DNS.
Czego nauczysz się:
- Tworzenie sieci wirtualnej i podsieci na potrzeby integracji z siecią wirtualną usługi App Service
- Tworzenie prywatnych stref DNS
- Tworzenie prywatnych punktów końcowych
- Konfigurowanie integracji sieci wirtualnej w usłudze App Service
Wymagania wstępne
Kompletny samouczek: zabezpieczanie połączenia usługi Cognitive Service z usługi App Service przy użyciu usługi Key Vault i tworzenie aplikacji do wykrywania języka.
Pamiętaj, aby ustawić następujące zmienne środowiskowe z Samouczka: Zabezpieczanie połączenia usługi Cognitive Service z App Service przy użyciu Key Vault:
groupName=myKVResourceGroup region=canadacentral csResourceName=<cs-resource-name> appName=<app-name> vaultName=<vault-name> planName=<plan-name> csResourceKVUri=<cs-resource-kv-uri> csKeyKVUri=<cs-key-kv-uri>
Tworzenie sieci wirtualnej i podsieci
Utwórz sieć prywatną. Zastąp "nazwa-sieci-wirtualnej" unikatową nazwą.
# Save the virtual network name as a variable for convenience vnetName=<virtual-network-name> az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16Utwórz podsieć dla integracji sieci wirtualnej usługi App Service.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms --private-endpoint-network-policies EnabledW przypadku usługi App Service zaleca się, aby podsieć integracji sieci wirtualnej miała co najmniej blok
/26CIDR. (Zobacz Wymagania dotyczące podsieci integracji sieci wirtualnej)./24jest więcej niż wystarczające.--delegations Microsoft.Web/serverfarmsokreśla, że podsieć jest delegowana na potrzeby integracji sieci wirtualnej usługi App Service.Utwórz kolejną podsieć dla prywatnych punktów końcowych.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --private-endpoint-network-policies DisabledW przypadku podsieci prywatnych punktów końcowych należy wyłączyć zasady sieci prywatnego punktu końcowego.
Tworzenie prywatnych stref DNS
Ponieważ zasoby usługi Key Vault i narzędzi Foundry znajdują się za prywatnymi punktami końcowymi, należy zdefiniować dla nich prywatne strefy DNS . Te strefy są używane do hostowania rekordów DNS dla prywatnych punktów końcowych i umożliwiają klientom znajdowanie usług zaplecza według nazwy.
Utwórz dwie prywatne strefy DNS— jedną dla zasobu narzędzia Foundry Tools i jedną dla magazynu kluczy.
az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.netAby uzyskać więcej informacji na temat tych ustawień, zobacz Konfiguracja usługi DNS prywatnego punktu końcowego platformy Azure.
Połącz prywatne strefy DNS z siecią wirtualną.
az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
Tworzenie prywatnych punktów końcowych
W podsieci prywatnego punktu końcowego sieci wirtualnej utwórz prywatny punkt końcowy dla zasobu narzędzia Foundry Tools.
# Get Foundry Tools resource ID csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnetUtwórz grupę stref DNS dla prywatnego punktu końcowego narzędzi Foundry Tools. Grupa stref DNS jest połączeniem między prywatną strefą DNS a prywatnym punktem końcowym. Ten link ułatwia automatyczne aktualizowanie prywatnej strefy DNS w przypadku aktualizacji prywatnego punktu końcowego.
az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.comBlokuj ruch publiczny do zasobu narzędzia Foundry Tools.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat the following command until the output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateUwaga / Notatka
Upewnij się, że stan aprowizacji zmiany to
"Succeeded". Następnie możesz zaobserwować zmianę zachowania w przykładowej aplikacji. Nadal możesz załadować aplikację, ale jeśli spróbujesz wybrać przycisk Wykryj , zostanie wyświetlonyHTTP 500błąd. Aplikacja utraciła łączność z zasobem Narzędzi Foundry za pomocą współdzielonej sieci.Powtórz poprzednie kroki dla magazynu kluczy.
# Create a private endpoint for the key vault vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet # Create a DNS zone group for the endpoint az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net # Block public traffic to the key vault az keyvault update --name $vaultName --default-action DenyWymusić natychmiastowe ponowne pobieranie odwołań do magazynu kluczy w aplikacji przez zresetowanie ustawień aplikacji. (Aby uzyskać więcej informacji, zobacz Rotacja).
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"Uwaga / Notatka
Ponownie możesz zaobserwować zmianę zachowania w przykładowej aplikacji. Nie można już załadować aplikacji, ponieważ nie może już uzyskać dostępu do odwołań do magazynu kluczy. Aplikacja utraciła łączność ze skarbcem kluczy przez współdzieloną sieć.
Dwa prywatne punkty końcowe są dostępne tylko dla klientów w utworzonej sieci wirtualnej. Nie można nawet uzyskać dostępu do sekretów w magazynie kluczy ze strony Sekrety w Azure Portal, ponieważ portal łączy się z nimi przez publiczny internet. (Zobacz Zarządzanie zablokowanymi zasobami).
Konfigurowanie integracji sieci wirtualnej w aplikacji
Skaluj aplikację do obsługiwanej warstwy cenowej. (Zobacz Integrowanie aplikacji z siecią wirtualną platformy Azure).
az appservice plan update --name $planName --resource-group $groupName --sku S1Wymuszanie protokołu HTTPS dla żądań przychodzących. (Ten krok nie jest związany z bieżącym scenariuszem, ale jest ważny).
az webapp update --resource-group $groupName --name $appName --https-onlyWłącz integrację sieci wirtualnej w aplikacji.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetIntegracja z siecią wirtualną umożliwia przepływ ruchu wychodzącego bezpośrednio do sieci wirtualnej. Domyślnie tylko lokalny ruch IP zdefiniowany w dokumencie RFC-1918 jest kierowany do sieci wirtualnej, co jest potrzebne w przypadku prywatnych punktów końcowych. Aby uzyskać informacje o routingu całego ruchu do sieci wirtualnej, zobacz Zarządzanie routingiem integracji sieci wirtualnej. Możesz również kierować cały ruch, jeśli chcesz kierować ruch internetowy przez sieć wirtualną, na przykład za pośrednictwem usługi Azure NAT Gateway lub Azure Firewall.
W przeglądarce przejdź na
<app-name>.azurewebsites.neti poczekaj, aż integracja zacznie działać. Jeśli wystąpi błąd HTTP 500, zaczekaj kilka minut i spróbuj ponownie. Jeśli możesz załadować stronę i uzyskać wyniki wykrywania, łączysz się z punktem końcowym narzędzi Foundry Tools przy użyciu odwołań do magazynu kluczy.Uwaga / Notatka
Jeśli przez długi czas otrzymujesz błędy HTTP 500, może być pomocne wymuszenie ponownego pobrania danych referencji magazynu kluczy:
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
Zarządzanie zablokowanymi zasobami
W zależności od scenariuszy zarządzanie zasobami chronionymi przez prywatny punkt końcowy może nie być możliwe za pośrednictwem witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell (na przykład usługi Key Vault). Wszystkie te narzędzia wykonują wywołania interfejsu API REST w celu uzyskania dostępu do zasobów za pośrednictwem publicznego internetu i są blokowane przez konfigurację. Poniżej przedstawiono kilka opcji uzyskiwania dostępu do zablokowanych zasobów:
- W przypadku usługi Key Vault dodaj publiczny adres IP swojej lokalnej maszyny, aby wyświetlić lub zaktualizować sekrety chronione przez prywatne punkty końcowe.
- Jeśli sieć lokalna zostanie rozszerzona do sieci wirtualnej platformy Azure za pośrednictwem bramy sieci VPN lub usługi Azure ExpressRoute, możesz zarządzać zasobami chronionymi przez prywatny punkt końcowy bezpośrednio z sieci lokalnej.
- Zarządzanie zasobami chronionymi przez prywatne punkty końcowe z serwera skokowego w sieci wirtualnej.
- Deploy Cloud Shell do sieci wirtualnej.
Uprzątnij zasoby
W poprzednich krokach utworzono zasoby Azure w grupie zasobów. Jeśli nie oczekujesz, że te zasoby będą potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w Cloud Shell:
az group delete --name $groupName
Uruchomienie tego polecenia może potrwać minutę.