Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az oktatóanyag-sorozat jelen részében megtudhatja, hogyan helyezhet üzembe egy tárolóalapú Python-webalkalmazást az Azure App Service Web App for Containersben. Ez a teljes körűen felügyelt szolgáltatás lehetővé teszi a tárolóalapú alkalmazások futtatását anélkül, hogy saját tárolóvezénylőt kellene fenntartania.
Az App Service a Docker Hub, az Azure Container Registry, az Azure Key Vault és más DevOps-eszközök használatával működő folyamatos integrációs/folyamatos üzembe helyezési (CI/CD) folyamatokkal egyszerűsíti az üzembe helyezést. Ez az oktatóanyag egy 5 részes oktatóanyag-sorozat 4. része.
A cikk végén egy biztonságos, éles üzemre kész App Service-webalkalmazással rendelkezik, amely egy Docker-tárolórendszerképből fut. Az alkalmazás rendszer által hozzárendelt felügyelt identitással kéri le a rendszerképet az Azure Container Registryből, és titkos kulcsokat kér le az Azure Key Vaultból.
Ez a szolgáltatásdiagram a cikkben tárgyalt összetevőket emeli ki.
Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy helyi gépen, amelyen telepítve van az Azure CLI.
Fontos
Javasoljuk, hogy az oktatóanyag összes CLI-alapú lépéséhez használja az Azure Cloud Shellt , mert:
- Az Azure-fiókjával már előre hitelesítve van, így elkerülheti a bejelentkezési problémákat.
- A dobozon kívül található összes szükséges Azure CLI-bővítményt tartalmazza
- Konzisztens működést biztosít a helyi operációs rendszertől vagy környezettől függetlenül
- Nincs szükség helyi telepítésre, ideális rendszergazdai jogosultságokkal nem rendelkező felhasználók számára
- Közvetlen hozzáférést biztosít az Azure-szolgáltatásokhoz a portálról – nincs szükség helyi Dockerre vagy hálózatbeállításra
- Elkerüli a helyi tűzfal- vagy hálózati konfigurációs problémákat
Key Vault létrehozása RBAC-hitelesítéssel
Az Azure Key Vault egy biztonságos szolgáltatás titkos kulcsok, API-kulcsok, kapcsolati sztringek és tanúsítványok tárolására. Ebben a szkriptben a MongoDB kapcsolati sztringet és a webalkalmazás SECRET_KEY elemét tárolja.
A Key Vault úgy van konfigurálva, hogy a hagyományos hozzáférési szabályzatok helyett szerepköralapú hozzáférés-vezérlést (RBAC) használjon a hozzáférés Azure-szerepkörökön keresztüli kezelésére. A webalkalmazás a rendszer által hozzárendelt felügyelt identitással kéri le a titkos kulcsokat biztonságosan futásidőben.
Jegyzet
A Key Vault korai létrehozása biztosítja, hogy a szerepkörök a titkos kulcsokhoz való hozzáférés bármilyen kísérlete előtt hozzárendelhetők legyenek. Emellett segít elkerülni a szerepkör-hozzárendelések propagálási késését. Mivel a Key Vault nem az App Service-től függ, a korai üzembe helyezés javítja a megbízhatóságot és a szekvenálást.
Ebben a lépésben az az keyvault create paranccsal hozhat létre egy Azure Key Vaultot, amelyen engedélyezve van az RBAC.
#!/bin/bash RESOURCE_GROUP_NAME="msdocs-web-app-rg" LOCATION="westus" KEYVAULT_NAME="${RESOURCE_GROUP_NAME}-kv" az keyvault create \ --name "$KEYVAULT_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --location "$LOCATION" \ --enable-rbac-authorization true
Az App Service-csomag és a webalkalmazás létrehozása
Az App Service-csomag határozza meg a webalkalmazás számítási erőforrásait, tarifacsomagját és régióját. A webalkalmazás futtatja a tárolóalapú alkalmazást, és egy rendszer által hozzárendelt felügyelt identitással van kiépítve, amely az Azure Container Registry (ACR) és az Azure Key Vault biztonságos hitelesítésére szolgál.
Ebben a lépésben a következő feladatokat hajtja végre:
- App Service-csomag létrehozása
- A webalkalmazás létrehozása a felügyelt identitással
- A webalkalmazás konfigurálása egy adott tárolórendszerkép használatával történő üzembe helyezésre
- Felkészülés a folyamatos üzembe helyezésre az ACR-en keresztül
Jegyzet
A webalkalmazást az ACR-hez vagy a Key Vaulthoz való hozzáférés hozzárendelése előtt kell létrehozni, mert a felügyelt identitás csak az üzembe helyezéskor jön létre. Emellett a tárolólemezkép hozzárendelése a létrehozás során biztosítja, hogy az alkalmazás megfelelően induljon el a kívánt konfigurációval.
Ebben a lépésben az az appservice plan create paranccsal hozza létre az alkalmazás számítási környezetét.
#!/bin/bash APP_SERVICE_PLAN_NAME="msdocs-web-app-plan" az appservice plan create \ --name "$APP_SERVICE_PLAN_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --sku B1 \ --is-linuxEbben a lépésben az az webapp create paranccsal hozza létre a webalkalmazást. Ez a parancs egy rendszer által hozzárendelt felügyelt identitást is lehetővé tesz, és beállítja az alkalmazás által futtatott tárolórendszerképet.
#!/bin/bash APP_SERVICE_NAME="msdocs-website-name" #APP_SERVICE_NAME must be globally unique as it becomes the website name in the URL `https://<website-name>.azurewebsites.net`. # Use the same registry name as in part 2 of this tutorial series. REGISTRY_NAME="msdocscontainerregistryname" #REGISTRY_NAME is the registry name you used in part 2 of this tutorial. CONTAINER_NAME="$REGISTRY_NAME.azurecr.io/msdocspythoncontainerwebapp:latest" #CONTAINER_NAME is of the form "yourregistryname.azurecr.io/repo_name:tag". az webapp create \ --resource-group "$RESOURCE_GROUP_NAME" \ --plan "$APP_SERVICE_PLAN_NAME" \ --name "$APP_SERVICE_NAME" \ --assign-identity '[system]' \ --deployment-container-image-name "$CONTAINER_NAME"Jegyzet
A parancs futtatásakor a következő hibaüzenet jelenhet meg:
No credential was provided to access Azure Container Registry. Trying to look up... Retrieving credentials failed with an exception:'Failed to retrieve container registry credentials. Please either provide the credentials or run 'az acr update -n msdocscontainerregistryname --admin-enabled true' to enable admin first.'Ez a hiba azért fordul elő, mert a webalkalmazás rendszergazdai hitelesítő adatokkal próbál hozzáférni az ACR-hez, amelyek alapértelmezés szerint le vannak tiltva. Nyugodtan figyelmen kívül hagyhatja ezt az üzenetet: a következő lépés úgy konfigurálja a webalkalmazást, hogy a felügyelt identitását használja az ACR-hitelesítéshez.
Titkos kódokért felelős tisztviselői szerepkör biztosítása bejelentkezett felhasználónak
Ha titkos kulcsokat szeretne tárolni az Azure Key Vaultban, a szkriptet futtató felhasználónak rendelkeznie kell a Key Vault titkos kulcskezelő szerepkörével. Ez a szerepkör lehetővé teszi a titkos kulcsok létrehozását és kezelését a tárolóban.
Ebben a lépésben a szkript hozzárendeli ezt a szerepkört az aktuálisan bejelentkezett felhasználóhoz. Ez a felhasználó ezután biztonságosan tárolhatja az alkalmazás titkos kulcsát, például a MongoDB kapcsolati sztringjét és az alkalmazás titkos kódját SECRET_KEY.
Ez a szerepkör-hozzárendelés a Key Vaulthoz kapcsolódó két szerepkör-hozzárendelés közül az első. Később a webalkalmazás rendszer által hozzárendelt felügyelt identitása hozzáférést kap a titkos kódok lekéréséhez a tárolóból.
Az Azure RBAC használata biztosítja az identitáson alapuló biztonságos, naplózható hozzáférést, így nincs szükség szigorúan kódolt hitelesítő adatokra.
Jegyzet
Mielőtt megkísérli tárolni a titkokat a kulcstartóban, a felhasználónak hozzá kell rendelnie a Key Vault titkos kulcskezelőszerepkörét. Ez a feladat a Key Vault hatókörébe tartozó az szerepkör-hozzárendelés létrehozása parancs segítségével történik.
Ebben a lépésben az az role assignment create paranccsal rendeli hozzá a szerepkört a Key Vault hatóköréhez.
#!/bin/bash CALLER_ID=$(az ad signed-in-user show --query id -o tsv) echo $CALLER_ID # Verify this value retrieved successfully. In production, poll to verify this value is retrieved successfully. az role assignment create \ --role "Key Vault Secrets Officer" \ --assignee "$CALLER_ID" \ --scope "/subscriptions/$(az account show --query id -o tsv)/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.KeyVault/vaults/$KEYVAULT_NAME"
Webes hozzáférés biztosítása az ACR-hez felügyelt identitás használatával
Az Azure Container Registry (ACR) rendszerképeinek biztonságos lekéréséhez a webalkalmazást úgy kell konfigurálni, hogy a rendszer által hozzárendelt felügyelt identitást használja. A felügyelt identitás használata elkerüli a rendszergazdai hitelesítő adatok szükségességét, és támogatja a biztonságos, hitelesítő adatok nélküli üzembe helyezést.
Ez a folyamat két fő műveletből áll:
- A webalkalmazás felügyelt identitásának engedélyezése az ACR elérésekor
- Az AcrPull-szerepkör hozzárendelése ehhez az identitáshoz a cél ACR-en
Ebben a lépésben lekéri a webalkalmazás felügyelt identitásának egyszerű azonosítóját (egyedi objektumazonosítóját) az az webapp identity show paranccsal. Ezután engedélyezi a felügyelt identitás használatát az ACR-hitelesítéshez azzal, hogy az
acrUseManagedIdentityCredstulajdonságot beállítjatruehasználatára, az az webapp config set parancs segítségével. Ezután az az szerepkör-hozzárendelés létrehozási parancsával hozzárendelheti az AcrPull-szerepkört a webalkalmazás felügyelt identitásához. Ez a szerepkör engedélyezi a webalkalmazásnak, hogy képeket kérjen le a beállításjegyzékből.#!/bin/bash PRINCIPAL_ID=$(az webapp identity show \ --name "$APP_SERVICE_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --query principalId \ -o tsv) echo $PRINCIPAL_ID # Verify this value retrieved successfully. In production, poll for successful 'AcrPull' role assignment using `az role assignment list`. az webapp config set \ --resource-group "$RESOURCE_GROUP_NAME" \ --name "$APP_SERVICE_NAME" \ --generic-configurations '{"acrUseManagedIdentityCreds": true}' az role assignment create \ --role "AcrPull" \ --assignee "$PRINCIPAL_ID" \ --scope "/subscriptions/$(az account show --query id -o tsv)/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ContainerRegistry/registries/$REGISTRY_NAME"
Kulcstartó-hozzáférés biztosítása a webalkalmazás felügyelt identitásához
A webalkalmazásnak engedélyre van szüksége olyan titkos kódok eléréséhez, mint a MongoDB kapcsolati sztring és a SECRET_KEY. Az engedélyek megadásához hozzá kell rendelnie a Key Vault titkos kulcsfelhasználói szerepkörét a webalkalmazás rendszer által hozzárendelt felügyelt identitásához.
Ebben a lépésben a webalkalmazás rendszer által hozzárendelt felügyelt identitásának egyedi azonosítójával (egyszerű azonosítójával) biztosít hozzáférést a webalkalmazásnak a Key Vaulthoz a Key Vault titkos kulcsfelhasználói szerepkörével az az role assignment create paranccsal.
#!/bin/bash az role assignment create \ --role "Key Vault Secrets User" \ --assignee "$PRINCIPAL_ID" \ --scope "/subscriptions/$(az account show --query id -o tsv)/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.KeyVault/vaults/$KEYVAULT_NAME"
Titkos kulcsok tárolása a Key Vaultban
A titkok kemény kódolásának elkerülése érdekében ez a lépés az MongoDB kapcsolati sztringjét és a webalkalmazás titkos kulcsát az Azure Key Vault-ban tárolja. Ezeket a titkos kulcsokat ezután a webalkalmazás biztonságosan elérheti futtatókörnyezetben a felügyelt identitásán keresztül anélkül, hogy a hitelesítő adatokat kódban vagy konfigurációban kellene tárolnia.
Jegyzet
Bár ez az oktatóanyag csak a kapcsolati sztringet és a titkos kulcsot tárolja a kulcstartóban, más alkalmazásbeállításokat is tárolhat, például a MongoDB-adatbázis nevét vagy a gyűjtemény nevét a Key Vaultban.
Ebben a lépésben az az cosmosdb keys list paranccsal kéri le a MongoDB kapcsolati sztringet. Ezután az az keyvault titkos kulcskészlet parancsával a kapcsolati sztringet és a véletlenszerűen létrehozott titkos kulcsot is tárolhatja a Key Vaultban.
#!/bin/bash ACCOUNT_NAME="msdocs-cosmos-db-account-name" MONGO_CONNECTION_STRING=$(az cosmosdb keys list \ --name "$ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --type connection-strings \ --query "connectionStrings[?description=='Primary MongoDB Connection String'].connectionString" -o tsv) SECRET_KEY=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9') # This key is cryptographically secure, using OpenSSL’s strong random number generator. az keyvault secret set \ --vault-name "$KEYVAULT_NAME" \ --name "MongoConnectionString" \ --value "$MONGO_CONNECTION_STRING" az keyvault secret set \ --vault-name "$KEYVAULT_NAME" \ --name "MongoSecretKey" \ --value "$SECRET_KEY"
Webalkalmazás konfigurálása Kay Vault-titkos kódok használatára
A titkos kódok futásidőben történő biztonságos eléréséhez a webalkalmazást úgy kell konfigurálni, hogy hivatkozzon az Azure Key Vaultban tárolt titkos kódokra. Ez a lépés Key Vault-referenciák használatával történik, amelyek a rendszer által hozzárendelt felügyelt identitáson keresztül injektálják a titkos értékeket az alkalmazás környezetébe.
Ez a megközelítés elkerüli a titkos kódok korlátozását, és lehetővé teszi, hogy az alkalmazás biztonságosan lekérje az olyan bizalmas értékeket, mint a MongoDB kapcsolati sztring és a titkos kulcs a végrehajtás során.
Ebben a lépésben az az webapp config appsettings set paranccsal adja hozzá a Key Vault titkos kulcsokra hivatkozó alkalmazásbeállításokat. Az
MongoConnectionStringésMongoSecretKeyalkalmazásbeállításokat úgy állítja be, hogy a Key Vaultban tárolt megfelelő titkokra hivatkozzanak.#!/bin/bash MONGODB_NAME="restaurants_reviews" MONGODB_COLLECTION_NAME="restaurants_reviews" az webapp config appsettings set \ --resource-group "$RESOURCE_GROUP_NAME" \ --name "$APP_SERVICE_NAME" \ --settings \ CONNECTION_STRING="@Microsoft.KeyVault(SecretUri=https://$KEYVAULT_NAME.vault.azure.net/secrets/MongoConnectionString)" \ SECRET_KEY="@Microsoft.KeyVault(SecretUri=https://$KEYVAULT_NAME.vault.azure.net/secrets/MongoSecretKey)" \ DB_NAME="$MONGODB_NAME" \ COLLECTION_NAME="$MONGODB_COLLECTION_NAME"
Folyamatos üzembe helyezés engedélyezése az ACR-ből
A folyamatos üzembe helyezés engedélyezése lehetővé teszi, hogy a webalkalmazás automatikusan lekérje és futtassa a legújabb tárolórendszerképet, amikor egy leküldés történik az Azure Container Registrybe (ACR). Ez csökkenti a manuális üzembe helyezés lépéseit, és segít biztosítani, hogy az alkalmazás naprakész maradjon.
Jegyzet
A következő lépésben regisztrál egy webhookot az ACR-ben, hogy értesítést küldjön a webalkalmazásnak, amikor új képet töltenek fel.
Ebben a lépésben az az webapp deployment container config paranccsal engedélyezheti a folyamatos üzembe helyezést az ACR-ből a webalkalmazásba.
#!/bin/bash az webapp deployment container config \ --name "$APP_SERVICE_NAME" \ --resource-group "$RESOURCE_GROUP_NAME" \ --enable-cd true
ACR Webhook regisztrálása folyamatos üzembe helyezéshez
Az üzembe helyezés automatizálásához regisztráljon egy webhookot az Azure Container Registryben (ACR), amely értesíti a webalkalmazást, amikor új tárolórendszerképet küld le. A webhook lehetővé teszi, hogy az alkalmazás automatikusan lekérje és futtassa a legújabb verziót.
Az Azure Container Registryben (ACR) konfigurált webhook POST-kérést küld a webalkalmazás SCM-végpontjának (SERVICE_URI), amikor egy új rendszerképet küld az msdocspythoncontainerwebapp-adattárba. Ez a művelet elindítja a webalkalmazást a frissített rendszerkép lekéréséhez és üzembe helyezéséhez, és befejezi a folyamatos üzembe helyezési folyamatot az ACR és az Azure App Service között.
Jegyzet
A webhook URI-jának a következő formátumot kell követnie:
https://<app-name>.scm.azurewebsites.net/api/registry/webhook
Ennek ponttal kell végződnie/api/registry/webhook. Ha URI-hibát kap, ellenőrizze, hogy az elérési út helyes-e.
Ebben a lépésben az az acr webhook create paranccsal regisztrálja a webhookot, és konfigurálja, hogy az
pusheseményekre legyen aktiválva.#!/bin/bash CREDENTIAL=$(az webapp deployment list-publishing-credentials \ --resource-group "$RESOURCE_GROUP_NAME" \ --name "$APP_SERVICE_NAME" \ --query publishingPassword --output tsv) # Web app publishing credentials may not be available immediately. In production, poll until non-empty. SERVICE_URI="https://$APP_SERVICE_NAME:$CREDENTIAL@$APP_SERVICE_NAME.scm.azurewebsites.net/api/registry/webhook" az acr webhook create \ --name webhookforwebapp \ --registry "$REGISTRY_NAME" \ --scope msdocspythoncontainerwebapp:* \ --uri "$SERVICE_URI" \ --actions push
Tallózás a webhelyen
Annak ellenőrzéséhez, hogy a webalkalmazás fut-e, nyissa meg a https://<website-name>.azurewebsites.net-t, és cserélje le a <website-name> helyére az App Service nevét. Nézd meg az étteremértékelő mintapéldány alkalmazást. Az első betöltés néhány percet is igénybe vehet.
A webhely megjelenése után próbáljon meg hozzáadni egy éttermet, és küldjön be egy felülvizsgálatot annak ellenőrzéséhez, hogy az alkalmazás megfelelően működik-e.
Jegyzet
A az webapp browse parancs nem támogatott a Cloud Shellben. Ha Cloud Shellt használ, nyisson meg manuálisan egy böngészőt, és keresse meg a webhely URL-címét.
Ha helyileg használja az Azure CLI-t, az az webapp tallózási parancsával megnyithatja a webhelyet az alapértelmezett böngészőben:
az webapp browse --name $APP_SERVICE_NAME --resource-group $RESOURCE_GROUP_NAME
Jegyzet
A az webapp browse parancs nem támogatott a Cloud Shellben. Nyisson meg egy böngészőablakot, és keresse meg helyette a webhely URL-címét.
Hibaelhárítás az üzembe helyezés során
Ha nem látja a mintaalkalmazást, próbálkozzon az alábbi lépésekkel.
- A tároló üzembe helyezésével és az App Service szolgáltatással mindig ellenőrizze a Deployment Center / Naplók oldalát az Azure Portalon. Kérjük, ellenőrizze, hogy a konténer le lett-e húzva, és fut-e. A konténer kezdeti lekérése és futtatása eltarthat néhány pillanatig.
- Próbálja meg újraindítani az App Service-t, és ellenőrizze, hogy ez megoldja-e a problémát.
- Programozási hibák esetén ezek a hibák megjelennek az alkalmazásnaplókban. Az Azure Portal oldalán az App Service-hez válassza a
"Problémák diagnosztizálása és megoldása", majd az "Alkalmazásnaplók" lehetőséget. - A mintaalkalmazás a MongoDB-hez készült Azure Cosmos DB-hez való kapcsolatra támaszkodik. Ellenőrizze, hogy az App Service rendelkezik-e a megfelelő kapcsolati adatokkal rendelkező alkalmazásbeállításokkal.
- Győződjön meg arról, hogy a felügyelt identitás engedélyezve van az App Service-ben, és az üzembe helyezési központban van használatban. Az App Service Azure Portal lapján nyissa meg az App Service Deployment Center erőforrást, és ellenőrizze, hogy a Hitelesítésfelügyelt identitásravan-e beállítva.
- Ellenőrizze, hogy a webhook definiálva van-e az Azure Container Registryben. A webhook lehetővé teszi, hogy az App Service lekérje a tárolórendszerképet. Különösen ellenőrizze, hogy a szolgáltatás URI-ja "/api/registry/webhook" végződésű-e. Ha nem, adja hozzá.
- Különböző Azure Container Registry-termékváltozatok különböző funkciókkal rendelkeznek, beleértve a webhookok számát. Ha újrahasznál egy meglévő beállításjegyzéket, a következő üzenet jelenik meg: "A beállításjegyzék alapszintű termékváltozatához tartozó erőforrástípus-webhookok kvótája túllépte a kvótát. További információ a különböző termékváltozatkvótákról és a frissítési folyamatról: https://aka.ms/acr/tiers". Ha megjelenik ez az üzenet, használjon új beállításjegyzéket, vagy csökkentse a használatban lévő beállításjegyzék-webhookok számát.