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 Azure virtuelles Netzwerk auf Key Vault- und Foundry-Tools zugreift und kein anderer Datenverkehr auf diese Back-End-Ressourcen zugreifen darf. Der gesamte Datenverkehr wird in Ihrem virtuellen Netzwerk mithilfe der Integration des virtuellen Netzwerks und privater Endpunkte isoliert.
Als mehrinstanzenbasierter Dienst teilen sich ausgehender Netzwerkdatenverkehr von Ihrer App Service-App zu anderen Azure Diensten dieselbe Umgebung mit anderen Apps oder sogar anderen Abonnements. Während der Datenverkehr selbst verschlüsselt werden kann, erfordern bestimmte Szenarien möglicherweise eine zusätzliche Sicherheitsstufe, indem die Back-End-Kommunikation von einem anderen Netzwerkdatenverkehr getrennt wird. 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.
Bei dieser Architektur:
- 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.
- App Service ist in der Lage, die DNS-Auflösung für die Back-End-Dienste über die privaten DNS-Zonen durchzuführen.
Sie lernen Folgendes:
- 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
Im Lernprogramm wird davon ausgegangen, dass Sie die Tutorial: Secure Cognitive Service-Verbindung von App Service mithilfe von Key Vault befolgt und die Sprachdetektor-App erstellt haben.
Das Lernprogramm verwendet weiterhin die folgenden Umgebungsvariablen aus dem vorherigen Lernprogramm. Stellen Sie sicher, dass Sie sie ordnungsgemäß festlegen.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
planName=<plan-name>
csResourceKVUri=<cs-resource-kv-uri>
csKeyKVUri=<cs-key-kv-uri>
Erstellen von virtuellen Netzwerken und Subnetzen
Erstellen Sie ein virtuelles Netzwerk. Ersetzen Sie <den Namen des virtuellen Netzwerks> durch einen eindeutigen Namen.
# Save vnet name as 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 wird empfohlen, dass das Subnetz für die virtuelle Netzwerkintegration mindestens einen CIDR-Block aufweist
/26(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 Endpunkt-Subnetze müssen Sie private Endpunktnetzwerkrichtlinien deaktivieren.
Erstellen privater DNS-Zonen
Da ihre Key Vault und Azure AI services Ressourcen hinter Private-Endpunkten liegen, müssen Sie private DNS-Zonen 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 Azure AI services-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 Azure Private Endpoint DNS-Konfiguration
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 subnetz des privaten Endpunkts Ihres virtuellen Netzwerks einen privaten Endpunkt für Ihren Cognitive Service.
# Get Cognitive Services 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 Azure AI Services-Endpunkt. Die 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.com** Blockieren des öffentlichen Datenverkehrs zu der Azure AI-Dienste-Ressource.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat following command until 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, auf die Schaltfläche " Erkennen " zu klicken, wird eineHTTP 500Fehlermeldung angezeigt. Die App hat ihre Verbindung mit der Azure AI services Ressource über das freigegebene Netzwerk verloren.Wiederholen Sie die angegebenen Schritte für den Schlüsseltresor.
# Create private endpoint for 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 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 key vault az keyvault update --name $vaultName --default-action DenyErzwingen Sie ein sofortiges erneutes Abrufen 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 virtuellen Netzwerks zugänglich, das erstellt wurde. Sie können nicht einmal über Secrets Seite im Azure-Portal auf die geheimen Schlüssel im Schlüsseltresor zugreifen, da das Portal über das öffentliche Internet auf sie zugreift (siehe Manage der gesperrten Ressourcen).
Konfigurieren Sie die Integration virtueller Netzwerke in Ihrer App
Skalieren Sie die App auf ein unterstütztes Preisniveau (siehe Integrieren Sie Ihre App mit einem Azure virtuellen Netzwerk).
az appservice plan update --name $planName --resource-group $groupName --sku S1Zwar nicht im direkten Zusammenhang mit unserem Szenario, ist es jedoch auch wichtig, HTTPS für eingehende Anforderungen zu erzwingen.
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 Weiterleiten des gesamten Datenverkehrs an das virtuelle Netzwerk finden Sie unter Verwalten des Routings der Integration virtueller Netzwerke. Das Routing des gesamten Datenverkehrs kann auch verwendet werden, wenn Sie Internetdatenverkehr über Ihr virtuelles Netzwerk weiterleiten möchten, z. B. über eine Azure Virtual Network NAT oder eine Azure Firewall.
Navigieren Sie im Browser zu
<app-name>.azurewebsites.neterneut, und 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 und Erkennungsresultate erhalten können, dann verbinden Sie sich mit dem Azure AI Services-Endpunkt und verwenden Key Vault-Referenzen.Hinweis
Wenn HTTP 500-Fehler nach langer Zeit weiterhin angezeigt werden, kann es helfen, die Schlüsseltresorverweise erneut abzurufen, z. B.:
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 Szenario können Sie die geschützten Ressourcen des privaten Endpunkts möglicherweise nicht über das Azure Portal, 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 geschützten geheimen Schlüssel des privaten Endpunkts anzuzeigen oder zu aktualisieren.
- Wenn Ihr lokales Netzwerk über ein VPN-Gateway oder ExpressRoute in das Azure-virtuelle Netzwerk erweitert wird, können Sie die geschützten Ressourcen des privaten Endpunkts direkt von Ihrem lokalen Netzwerk aus verwalten.
- Verwalten Sie die durch private Endpunkte geschützten Ressourcen von einem Jump-Server 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 eine Minute in Anspruch nehmen.