Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel konfigurieren Sie eine App Service-App mit sicherer, netzwerkisolativer Kommunikation mit Back-End-Diensten. Das Beispielszenario stammt aus Anleitung: Sichere Verbindung zu Cognitive Services von App Service mithilfe von Key Vault. Wenn Sie fertig sind, verfügen Sie über eine App Service-App, die über ein virtuelles Azure-Netzwerk auf Key Vault- und Foundry-Tools zugreift. Auf diese Back-End-Ressourcen darf kein anderer Datenverkehr zugreifen. Der gesamte Datenverkehr wird innerhalb Ihres virtuellen Netzwerks über die Integration des virtuellen Netzwerks und private Endpunkte isoliert.
In einem multi-tenant Dienst nutzt der ausgehende Netzwerkdatenverkehr von Ihrer App Service-App zu anderen Azure-Diensten dieselbe Umgebung wie andere Apps oder sogar andere Abonnements. Obwohl der Datenverkehr selbst verschlüsselt werden kann, erfordern bestimmte Szenarien möglicherweise eine zusätzliche Sicherheitsstufe über die Isolierung der Back-End-Kommunikation von anderen Netzwerkdatenverkehr. Diese Szenarien sind in der Regel für große Unternehmen mit einem hohen Know-how zugänglich, aber App Service versetzt sie in Reichweite mit der Integration des virtuellen Netzwerks.
In diesem Architekturmodell:
- Der öffentliche Datenverkehr zu den Back-End-Diensten wird blockiert.
- Ausgehender Datenverkehr von App Service wird an das virtuelle Netzwerk weitergeleitet und kann die Back-End-Dienste erreichen.
- Der App-Dienst kann die DNS-Auflösung für die Back-End-Dienste über die privaten DNS-Zonen ausführen.
Was Sie lernen:
- Erstellen eines virtuellen Netzwerks und Subnetze für die Integration des virtuellen App Service-Netzwerks
- Erstellen privater DNS-Zonen
- Erstellen privater Endpunkte
- Konfigurieren der Integration virtueller Netzwerke in App Service
Voraussetzungen
Vollständiges Lernprogramm: Secure Cognitive Service-Verbindung von App Service mit Key Vault und Erstellen der Sprachdetektor-App.
Achten Sie darauf, die folgenden Umgebungsvariablen aus dem Tutorial: Sichere Verbindung des kognitiven Dienstes aus dem App Service mit Key Vault festzulegen:
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>
Erstellen eines virtuellen Netzwerks und der Subnetze
Erstellen Sie ein virtuelles Netzwerk. Ersetzen Sie <den Namen des virtuellen Netzwerks> durch einen eindeutigen Namen.
# 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/16Erstellen Sie ein Subnetz für die Integration des virtuellen App Service-Netzwerks.
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 EnabledFür App Service empfiehlt es sich, dass das Subnetz für die Integration des virtuellen Netzwerks mindestens einen CIDR-Block
/26aufweist. (Siehe Subnetzanforderungen für die Virtuelle Netzwerkintegration.)/24ist mehr als ausreichend.--delegations Microsoft.Web/serverfarmsgibt an, dass das Subnetz für die Integration virtueller Netzwerke in App Service delegiert ist.Erstellen Sie ein weiteres Subnetz für die privaten Endpunkte.
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 DisabledFür private Endpunktsubnetze müssen Sie die Netzwerkrichtlinien für private Endpunkte deaktivieren.
Erstellen privater DNS-Zonen
Da sich Ihre Ressourcen "Key Vault" und "Foundry Tools" hinter privaten Endpunkten befinden, müssen Sie private DNS-Zonen für sie definieren. Diese Zonen werden verwendet, um die DNS-Einträge für private Endpunkte zu hosten und es den Clients zu ermöglichen, die Back-End-Dienste anhand des Namens zu finden.
Erstellen Sie zwei private DNS-Zonen, eine für Ihre Foundry Tools-Ressource und eine für Ihren Schlüsseltresor.
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.netWeitere Informationen zu diesen Einstellungen finden Sie unter DNS-Konfiguration für private Azure-Endpunkte.
Verknüpfen Sie die privaten DNS-Zonen mit dem virtuellen Netzwerk.
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
Erstellen privater Endpunkte
Erstellen Sie im privaten Endpunktsubnetz Ihres virtuellen Netzwerks einen privaten Endpunkt für Ihre Foundry Tools-Ressource.
# 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-subnetErstellen Sie eine DNS-Zonengruppe für den privaten Endpunkt "Foundry Tools". Eine DNS-Zonengruppe ist eine Verbindung zwischen der privaten DNS-Zone und dem privaten Endpunkt. Dieser Link hilft Ihnen, die private DNS-Zone automatisch zu aktualisieren, wenn ein Update auf den privaten Endpunkt vorhanden ist.
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.comBlockieren Sie den öffentlichen Zugriff auf die Ressource "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.provisioningStateHinweis
Stellen Sie sicher, dass der Bereitstellungsstatus Ihrer Änderung lautet
"Succeeded". Anschließend können Sie die Verhaltensänderung in der Beispiel-App beobachten. Sie können die App weiterhin laden, aber wenn Sie versuchen, die Schaltfläche " Erkennen " auszuwählen, wird einHTTP 500Fehler angezeigt. Die App hat ihre Verbindung zur Ressource "Foundry Tools" über das geteilte Netzwerk verloren.Wiederholen Sie die vorherigen Schritte für den Key Vault.
# 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 DenyErzwingen Sie eine sofortige Zurückweisung der Schlüsseltresorverweise in Ihrer App, indem Sie die App-Einstellungen zurücksetzen. (Weitere Informationen finden Sie unter "Rotation".)
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)"Hinweis
Auch hier können Sie die Verhaltensänderung in der Beispiel-App beobachten. Sie können die App nicht mehr laden, da sie nicht mehr auf die Key Vault-Referenzen zugreifen kann. Die Verbindung der App mit dem Schlüsseltresor über das freigegebene Netzwerk wurde getrennt.
Die beiden privaten Endpunkte sind nur für Clients innerhalb des von Ihnen erstellten virtuellen Netzwerks zugänglich. Sie können nicht einmal auf die Geheimnisse im Schlüsseltresor über die Seite "Geheime Schlüssel " im Azure-Portal zugreifen, da das Portal über das öffentliche Internet darauf zugreift. (Siehe Verwalten der gesperrten Ressourcen.)
Konfigurieren Sie die Integration virtueller Netzwerke in Ihrer App
Skalieren Sie die App auf ein unterstütztes Preisniveau. (Siehe Integrieren Ihrer App in ein virtuelles Azure-Netzwerk.)
az appservice plan update --name $planName --resource-group $groupName --sku S1Erzwingen Sie HTTPS für eingehende Anforderungen. (Dieser Schritt bezieht sich nicht auf das aktuelle Szenario, aber es ist wichtig.)
az webapp update --resource-group $groupName --name $appName --https-onlyAktivieren Sie die Integration virtueller Netzwerke in Ihrer App.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetDie Integration virtueller Netzwerke ermöglicht ausgehendem Datenverkehr, direkt in das virtuelle Netzwerk zu fließen. Standardmäßig wird nur der in RFC-1918 definierte lokale IP-Datenverkehr an das virtuelle Netzwerk weitergeleitet, was für die privaten Endpunkte erforderlich ist. Informationen zum Routing ihres gesamten Datenverkehrs an das virtuelle Netzwerk finden Sie unter Verwalten des Routings für die Integration virtueller Netzwerke.For information about routing all your traffic to the virtual network, see Manage virtual network integration routing. Sie können auch den gesamten Datenverkehr weiterleiten, wenn Sie Internetdatenverkehr über Ihr virtuelles Netzwerk weiterleiten möchten, z. B. über das Azure NAT-Gateway oder die Azure Firewall.
Gehen Sie in einem Browser zu
<app-name>.azurewebsites.netund warten Sie, bis die Integration wirksam wird. Wenn ein HTTP 500-Fehler angezeigt wird, warten Sie einige Minuten, und versuchen Sie es erneut. Wenn Sie die Seite laden können und Erkennungsergebnisse erhalten, verbinden Sie sich mit dem "Foundry Tools"-Endpunkt unter Verwendung von Key Vault-Referenzen.Hinweis
Wenn Sie über einen längeren Zeitraum wiederholt HTTP 500-Fehler erhalten, könnte es helfen, die Schlüsseltresor-Verweise erneut abzurufen.
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)"
Verwalten der gesperrten Ressourcen
Je nach Ihren Szenarien können Sie die privaten endpunktgeschützten Ressourcen möglicherweise nicht über das Azure-Portal, die Azure CLI oder Azure PowerShell (z. B. Key Vault) verwalten. Diese Tools führen alle REST-API-Aufrufe für den Zugriff auf die Ressourcen über das öffentliche Internet durch und werden von Ihrer Konfiguration blockiert. Hier sind einige Optionen für den Zugriff auf die gesperrten Ressourcen:
- Fügen Sie für Key Vault die öffentliche IP Ihres lokalen Computers hinzu, um die geheimen Schlüssel anzuzeigen oder zu aktualisieren, die durch private Endpunkte geschützt sind.
- Wenn Ihr lokales Netzwerk über ein VPN-Gateway oder Azure ExpressRoute in das virtuelle Azure-Netzwerk erweitert wird, können Sie die privaten endpunktgeschützten Ressourcen direkt über Ihr lokales Netzwerk verwalten.
- Verwalten Sie die privaten endpunktgeschützten Ressourcen von einem Sprungserver im virtuellen Netzwerk.
- Deploy Cloud Shell in das virtuelle Netzwerk.
Bereinigen von Ressourcen
In den vorherigen Schritten haben Sie Azure Ressourcen in einer Ressourcengruppe erstellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in der Cloud Shell ausführen:
az group delete --name $groupName
Die Ausführung dieses Befehls kann einige Minuten in Anspruch nehmen.