Oktatóanyag: Háttérbeli kommunikáció elkülönítése Azure App Service Virtual Network integrációval
Ebben a cikkben egy App Service alkalmazást konfigurálunk, amely biztonságos, hálózatra elkülönített kommunikációt biztosít a háttérszolgáltatások felé. A példaforgatókönyv az Oktatóanyag: A Cognitive Service-kapcsolat biztonságossá tételét App Service Key Vault használatával című témakörben talál. Ha végzett, rendelkezik egy App Service alkalmazással, amely Key Vault és Azure AI-szolgáltatásokat is elér egy Azure-beli virtuális hálózaton keresztül, és más forgalom nem férhet hozzá ezekhez a háttérerőforrásokhoz. Az összes forgalom el lesz különítve a virtuális hálózaton belül a virtuális hálózati integráció és a privát végpontok használatával.
Több-bérlős szolgáltatásként a App Service alkalmazásból más Azure-szolgáltatásokba irányuló kimenő hálózati forgalom ugyanazt a környezetet más alkalmazásokkal vagy akár más előfizetésekkel is megosztja. Bár maga a forgalom titkosítható, bizonyos forgatókönyvek további biztonsági szintet igényelhetnek azáltal, hogy elkülönítik a háttérbeli kommunikációt más hálózati forgalomtól. Ezek a forgatókönyvek általában magas szintű szakértelemmel rendelkező nagyvállalatok számára érhetők el, de App Service elérhetővé teszi a virtuális hálózati integrációval.
Ezzel az architektúrával:
- A háttérszolgáltatások nyilvános forgalma le van tiltva.
- A App Service kimenő forgalmát a rendszer a virtuális hálózatra irányítja, és elérheti a háttérszolgáltatásokat.
- App Service képes DNS-feloldás végrehajtására a háttérszolgáltatásokban a privát DNS-zónákon keresztül.
A következő tudnivalókat fogja elsajátítani:
- Virtuális hálózat és alhálózatok létrehozása App Service virtuális hálózati integrációhoz
- Saját DNS-zónák létrehozása
- Privát végpontok létrehozása
- Virtuális hálózati integráció konfigurálása a App Service
Előfeltételek
Az oktatóanyag feltételezi, hogy követte az Oktatóanyag: A Cognitive Service-kapcsolat biztonságossá tétele App Service a Key Vault használatával, és létrehozta a nyelvérzékelő alkalmazást.
Az oktatóanyag továbbra is az előző oktatóanyag következő környezeti változóit használja. Győződjön meg arról, hogy megfelelően állította be őket.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
Virtuális hálózat és alhálózatok létrehozása
Hozzon létre egy virtuális hálózatot. Cserélje le <a virtuális hálózat nevét> egy egyedi névre.
# 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/16
Hozzon létre egy alhálózatot a App Service virtuális hálózati integrációhoz.
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 --disable-private-endpoint-network-policies false
A App Service esetében a virtuális hálózati integrációs alhálózatnak ajánlott legalább CIDR-blokkot
/26
létrehoznia (lásd: Virtuális hálózati integrációs alhálózat követelményei)./24
több mint elegendő.--delegations Microsoft.Web/serverfarms
megadja, hogy az alhálózat delegálva legyen App Service virtuális hálózati integrációhoz.Hozzon létre egy másik alhálózatot a privát végpontokhoz.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --disable-private-endpoint-network-policies true
A privát végpont alhálózatai esetében le kell tiltania a privát végpont hálózati szabályzatait.
Saját DNS-zónák létrehozása
Mivel a Key Vault és az Azure AI-szolgáltatások erőforrásai privát végpontok mögött fognak ülni, privát DNS-zónákat kell definiálnia hozzájuk. Ezek a zónák a privát végpontok DNS-rekordjainak üzemeltetésére szolgálnak, és lehetővé teszik, hogy az ügyfelek név szerint megtalálják a háttérszolgáltatásokat.
Hozzon létre két privát DNS-zónát, egyet az Azure AI-szolgáltatások erőforrásához, egyet pedig a kulcstartóhoz.
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.net
További információ ezekről a beállításokról: Azure Private Endpoint DNS-konfiguráció
Kapcsolja a privát DNS-zónákat a virtuális hálózathoz.
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
Privát végpontok létrehozása
A virtuális hálózat privát végpont alhálózatában hozzon létre egy privát végpontot a Cognitive Service számára.
# 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-subnet
Hozzon létre egy DNS-zónacsoportot az Azure AI-szolgáltatások privát végpontjához. A DNS-zónacsoport a privát DNS-zóna és a privát végpont közötti kapcsolat. Ez a hivatkozás segít automatikusan frissíteni a privát DNS-zónát a privát végpont frissítésekor.
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
Tiltsa le az Azure AI-szolgáltatások erőforrásának nyilvános forgalmát.
az rest --uri $csResourceId?api-version=2021-04-30 --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.provisioningState
Megjegyzés
Győződjön meg arról, hogy a módosítás kiépítési állapota .
"Succeeded"
Ezután megfigyelheti a viselkedés változását a mintaalkalmazásban. Az alkalmazást továbbra is betöltheti, de ha az Észlelés gombra kattint, hibaüzenet jelenikHTTP 500
meg. Az alkalmazás megszakadt a kapcsolat az Azure AI-szolgáltatások erőforrásával a megosztott hálózatkezelésen keresztül.Ismételje meg a fenti lépéseket a kulcstartó esetében.
# 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 Deny
Az alkalmazás beállításainak alaphelyzetbe állításával kényszerítheti a key vault-referenciák azonnali visszaállítását az alkalmazásban (további információt a Rotáció című témakörben talál).
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)"
Megjegyzés
Ismét megfigyelheti a viselkedésváltozást a mintaalkalmazásban. Az alkalmazás már nem tölthető be, mert már nem fér hozzá a kulcstartó hivatkozásaihoz. Az alkalmazás megszakadt a kulcstartóval való kapcsolata a megosztott hálózatkezelésen keresztül.
A két privát végpont csak a létrehozott virtuális hálózaton belüli ügyfelek számára érhető el. A kulcstartó titkos kulcsai a Azure Portal Titkos kulcsok lapján keresztül sem érhetők el, mert a portál a nyilvános interneten keresztül éri el őket (lásd: Zárolt erőforrások kezelése).
Virtuális hálózati integráció konfigurálása az alkalmazásban
Skálázza fel az alkalmazást egy támogatott tarifacsomagra (lásd : Az alkalmazás integrálása Azure-beli virtuális hálózattal).
az appservice plan update --name $appName --resource-group $groupName --sku S1
Nem kapcsolódik a forgatókönyvünkhöz, de fontos is, hogy https-t kényszerítsen a bejövő kérésekhez.
az webapp update --resource-group $groupName --name $appName --https-only
Engedélyezze a virtuális hálózati integrációt az alkalmazásban.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnet
A virtuális hálózat integrációja lehetővé teszi, hogy a kimenő forgalom közvetlenül a virtuális hálózatba áramoljon. Alapértelmezés szerint csak az RFC-1918-ban meghatározott helyi IP-forgalom lesz átirányítva a virtuális hálózathoz, ami a privát végpontokhoz szükséges. Ha az összes forgalmat a virtuális hálózathoz szeretné irányítani, olvassa el a Virtuális hálózati integrációs útválasztás kezelése című témakört. Az összes forgalom útválasztása akkor is használható, ha az internetes forgalmat a virtuális hálózaton keresztül szeretné irányítani, például egy Azure Virtual Network NAT-on vagy egy Azure Firewall keresztül.
A böngészőben lépjen újra,
<app-name>.azurewebsites.net
és várja meg, amíg az integráció érvénybe lép. Ha HTTP 500-hiba jelenik meg, várjon néhány percet, és próbálkozzon újra. Ha betöltheti az oldalt, és észlelési eredményeket kaphat, akkor kulcstartó-hivatkozásokkal csatlakozik az Azure AI-szolgáltatások végpontjához.Megjegyzés
Ha hosszú idő után is HTTP 500-ra vonatkozó hibákat kap, az segíthet a kulcstartó-referenciák újbóli visszaállításának kényszerítésében, például:
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)"
Zárolt erőforrások kezelése
A forgatókönyvtől függően előfordulhat, hogy nem tudja kezelni a privát végpont által védett erőforrásokat a Azure Portal, az Azure CLI-n vagy a Azure PowerShell (például Key Vault) keresztül. Ezek az eszközök mind REST API-hívásokat kezdeményeznek az erőforrások nyilvános interneten keresztüli eléréséhez, és a konfiguráció letiltja őket. Íme néhány lehetőség a zárolt erőforrások elérésére:
- Key Vault esetén adja hozzá a helyi gép nyilvános IP-címét a privát végpont által védett titkos kódok megtekintéséhez vagy frissítéséhez.
- Ha a helyszíni hálózat vpn-átjárón vagy ExpressRoute-on keresztül van kiterjesztve az Azure-beli virtuális hálózatra, a privát végpont által védett erőforrásokat közvetlenül a helyszíni hálózatról kezelheti.
- Kezelje a privát végpont által védett erőforrásokat a virtuális hálózaton lévő jump serverről .
- Helyezze üzembe Cloud Shell a virtuális hálózaton.
Az erőforrások eltávolítása
Az előző lépésekben Azure-erőforrásokat hozott létre egy erőforráscsoportban. Ha várhatóan nem lesz szüksége ezekre az erőforrásokra a jövőben, törölje az erőforráscsoportot a következő parancs Cloud Shellben történő futtatásával:
az group delete --name $groupName
A parancs futtatása egy percig is eltarthat.