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.
Ebben az oktatóanyagban egy Django-webalkalmazást helyez üzembe az Azure App Service-ben. A webalkalmazás egy felhasználó által hozzárendelt felügyelt identitást (jelszó nélküli kapcsolatokat) használ az Azure szerepköralapú hozzáférés-vezérlésével az Azure Storage és az Azure Database for PostgreSQL rugalmas kiszolgálói erőforrások eléréséhez. A kód a Pythonhoz készült Azure Identity-ügyfélkódtár DefaultAzureCredential osztályát használja. Az DefaultAzureCredential osztály automatikusan észleli, hogy egy felügyelt identitás létezik az App Service-hez, és más Azure-erőforrások eléréséhez használja.
Ebben az oktatóanyagban létrehoz egy felhasználó által hozzárendelt felügyelt identitást, és hozzárendeli az App Service-hez, hogy hozzáférhessen az adatbázishoz és a tárfiók erőforrásaihoz. A rendszer által hozzárendelt felügyelt identitás használatára példa: Flask Python-webalkalmazás létrehozása és üzembe helyezése az Azure-ban rendszer által hozzárendelt felügyelt identitással. A felhasználó által hozzárendelt felügyelt identitások azért ajánlottak, mert több erőforrás is használhatja őket, és az életciklusuk függetlenítve van attól az erőforrás-életciklustól, amelyhez társítva vannak. A felügyelt identitások használatának ajánlott eljárásairól további információt a felügyelt identitásokkal kapcsolatos ajánlott eljárásokra vonatkozó javaslatokban talál.
Ez az oktatóanyag bemutatja, hogyan helyezheti üzembe a Python-webalkalmazást, és hogyan hozhat létre Azure-erőforrásokat az Azure CLI használatával. Bár az oktatóanyagban szereplő parancsok a Bash-rendszerhéjat használják, az oktatóanyag-parancsokat bármely Bash-környezetben futtathatja a parancssori felület telepítésével, például a helyi környezetben vagy az Azure Cloud Shellben. Bizonyos módosításokkal futtathatja ezeket a parancsokat más környezetekben, például a Windows parancshéjban (például a szintaxis módosítása környezeti változók beállításához és használatához).
A mintaalkalmazás lekérése
A django mintaalkalmazás használatával kövesse ezt az oktatóanyagot. Töltse le vagy klónozza a mintaalkalmazást a fejlesztői környezetbe.
Klónozza a mintát.
git clone https://github.com/Azure-Samples/msdocs-django-web-app-managed-identity.gitLépjen az alkalmazásmappára.
cd msdocs-django-web-app-managed-identity
Hitelesítési kód vizsgálata
A minta webalkalmazásnak két különböző adattárban kell hitelesítenie:
- Az Azure Blob Storage-kiszolgáló, ahol tárolja és lekéri a véleményezők által küldött fényképeket.
- Egy Rugalmas Azure Database for PostgreSQL-adatbázis, amelyben éttermeket és véleményeket tárol.
A DefaultAzureCredential használatával hitelesíti mindkét adattárat. Ezzel DefaultAzureCredentialaz alkalmazás úgy konfigurálható, hogy különböző szolgáltatásnevek identitása alatt fusson, attól függően, hogy milyen környezetben fut, és nem módosítja a kódot. Helyi fejlesztési környezetben például az alkalmazás futtatható az Azure CLI-be bejelentkezett fejlesztő identitása alatt, míg az Azure-ban, mint ebben az oktatóanyagban, egy felhasználó által hozzárendelt felügyelt identitás alatt futtatható.
Az alkalmazás által futtatott biztonsági tagnak mindkét esetben rendelkeznie kell egy szerepkörrel minden olyan Azure-erőforráson, amelyet az alkalmazás használ, és lehetővé teszi, hogy végrehajtsa az alkalmazás által igényelt műveleteket. Ebben az oktatóanyagban Azure CLI-parancsokkal hozhat létre egy felhasználó által hozzárendelt felügyelt identitást, és hozzárendelheti azt az Azure-beli alkalmazásához. Ezt követően manuálisan hozzárendelheti a megfelelő identitás-szerepköröket az Azure Storage-fiókhoz és az Azure Database for PostgreSQL-kiszolgálóhoz. Végül beállítja az AZURE_CLIENT_ID környezeti változót az Azure-beli alkalmazásához úgy, hogy a DefaultAzureCredential a felügyelt identitás használatára legyen konfigurálva.
Miután a felhasználó által hozzárendelt felügyelt identitás konfigurálva lett az alkalmazáson és annak futtatókörnyezetén, és megfelelő szerepkörökhöz lett rendelve az adattárakban, a DefaultAzureCredential szükséges Azure-erőforrásokkal való hitelesítéshez használhatja.
Az alábbi kód egy Blob Storage-ügyfél létrehozásához használható fényképek app.pyfeltöltéséhez. A rendszer egy példányt DefaultAzureCredential ad meg az ügyfélnek, amelyet hozzáférési jogkivonatok beszerzésére használ az Azure Storage-beli műveletek végrehajtásához.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)
Egy példány DefaultAzureCredential arra is használható, hogy lekérjen egy hozzáférési jogkivonatot az Azure Database for PostgreSQL-hez a következőben ./azureproject/get_conn.py: . Ebben az esetben a jogkivonat közvetlenül a hitelesítő példány get_token meghívásával és a megfelelő scope érték átadásával szerezhető be. A jogkivonat ezután a PostgreSQL-kapcsolat URI-jának jelszavának beállítására szolgál.
azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("https://ossrdbms-aad.database.windows.net")
conf.settings.DATABASES['default']['PASSWORD'] = token.token
Ha többet szeretne megtudni az alkalmazások Azure-szolgáltatásokkal való hitelesítéséről, olvassa el a Python-alkalmazások Azure-szolgáltatásokba való hitelesítését az Azure SDK for Python használatával. Ha többet szeretne megtudni arról DefaultAzureCredential, hogy hogyan szabhatja testre a környezetében kiértékelt hitelesítőadat-láncot, tekintse meg a DefaultAzureCredential áttekintését.
Rugalmas Azure PostgreSQL-kiszolgáló létrehozása
Állítsa be az oktatóanyaghoz szükséges környezeti változókat.
LOCATION="eastus" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="ChAnG33#ThsPssWD$RAND_ID" UA_NAME="UAManagedIdentityPythonTest$RAND_ID"Important
A
ADMIN_PWkövetkező kategóriák közül háromnak 8–128 karaktert kell tartalmaznia: angol nagybetűk, angol kisbetűk, számok és nonalphanumerikus karakterek. Felhasználónevek vagy jelszavak létrehozásakor ne használja a karaktert$. Később olyan környezeti változókat hoz létre ezekkel az értékekkel, amelyekben a$karakter speciális jelentéssel rendelkezik a Python-alkalmazások futtatásához használt Linux-tárolóban.Hozzon létre egy erőforráscsoportot az az group create paranccsal.
az group create --location $LOCATION --name $RESOURCE_GROUP_NAMEHozzon létre egy rugalmas PostgreSQL-kiszolgálót az az postgres flexible-server create paranccsal. (Ez és az azt követő parancsok a Bash Shell ('\' ) sor folytatási karakterét használják. Más rendszerhéjak esetében a sorfolytatási karakter módosítása.
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --active-directory-auth Enabled \ --public-access 0.0.0.0A termékváltozat neve a tarifacsomag és a számítási konfiguráció neve. További információkért tekintse meg az Azure Database for PostgreSQL díjszabását. Az elérhető termékváltozatok listázásához használja a következőt
az postgres flexible-server list-skus --location $LOCATION: .Adja hozzá Azure-fiókját Microsoft Entra-rendszergazdaként a kiszolgálóhoz az az postgres flexible-server ad-admin create paranccsal.
ACCOUNT_EMAIL=$(az ad signed-in-user show --query userPrincipalName --output tsv) ACCOUNT_ID=$(az ad signed-in-user show --query id --output tsv) echo $ACCOUNT_EMAIL, $ACCOUNT_ID az postgres flexible-server ad-admin create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name $DB_SERVER_NAME \ --display-name $ACCOUNT_EMAIL \ --object-id $ACCOUNT_ID \ --type UserKonfiguráljon tűzfalszabályt a kiszolgálón az az postgres flexible-server firewall-rule create paranccsal. Ez a szabály lehetővé teszi a helyi környezet számára a kiszolgálóhoz való csatlakozást. (Ha az Azure Cloud Shellt használja, kihagyhatja ezt a lépést.)
IP_ADDRESS=<your IP> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESSHasználjon bármilyen eszközt vagy webhelyet, amely az IP-címét jeleníti meg, hogy azt a
<your IP>helyére helyettesítse a parancsban. Használhatja például a Mi az IP-cím? webhelyet .Hozzon létre egy adatbázist
restaurantaz az postgres flexible-server execute paranccsal.az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Azure-alkalmazás szolgáltatás létrehozása és a kód üzembe helyezése
Az App Service létrehozásához és a kód üzembe helyezéséhez futtassa ezeket a parancsokat a mintaalkalmazás gyökérmappájában.
App service létrehozása az az webapp up paranccsal.
az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1A SKU határozza meg az App Service-csomag méretét (CPU, memória) és költségét. A B1 (alapszintű) szolgáltatáscsomag kis költséget von maga után az Azure-előfizetésben. Az App Service-csomagok teljes listájáért tekintse meg az App Service díjszabási oldalát.
Konfigurálja az App Service-t a tárházban lévő start.sh használatára az az webapp config set parancs segítségével.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Tárfiók és tároló létrehozása
A mintaalkalmazás blobként tárolja a véleményezők által elküldött fényképeket az Azure Storage-ban.
Amikor egy felhasználó feltölt egy fényképet a véleményével, a mintaalkalmazás felügyelt identitással és
DefaultAzureCredentialsegítségével írja a képet a tárfiók tárolójába.Amikor egy felhasználó megtekinti egy étterem véleményeit, az alkalmazás visszaad egy hivatkozást a blobtárolóban lévő fényképre minden olyan véleményhez, amelyhez hozzá van társítva egy. Ahhoz, hogy a böngésző megjeleníthesse a fényképet, hozzá kell tudnia férni a tárfiókban. A blobadatoknak névtelen (hitelesítés nélküli) hozzáféréssel nyilvánosan olvashatónak kell lenniük.
Ebben a szakaszban létrehoz egy tárfiókot és egy tárolót, amely nyilvános olvasási hozzáférést biztosít a tárolóban lévő blobokhoz. A későbbi szakaszokban létrehoz egy felhasználó által hozzárendelt felügyelt identitást, és konfigurálja blobok írására a tárfiókba.
Tárfiók létrehozásához használja az az storage create parancsot.
STORAGE_ACCOUNT_NAME="msdocsstorage$RAND_ID" az storage account create \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --sku Standard_LRS \ --allow-blob-public-access trueHozzon létre egy fényképek nevű tárolót a tárfiókban az az storage container create paranccsal.
az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode loginNote
Lehetséges, hogy a parancs meghiúsul. Előfordulhat például, hogy hibaüzenet jelenik meg, amely azt jelzi, hogy a hálózati szabályok blokkolják a tárfiók létrehozására irányuló kérést. Ha a parancs nem sikerül, adja meg a következő parancsot, és győződjön meg arról, hogy egy Azure-szerepkört rendel hozzá a tárolók Azure-felhasználói fiókjához való létrehozásához szükséges engedéllyel.
az role assignment create --role "Storage Blob Data Contributor" --assignee $ACCOUNT_EMAIL --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"További információ : Rövid útmutató: Blobok létrehozása, letöltése és listázása az Azure CLI-vel. Számos Azure-szerepkör lehetővé teszi tárolók létrehozását egy tárfiókban, beleértve a tulajdonost, a közreműködőt, a storage blobadat-tulajdonost és a storage blobadatok közreműködőit.
Felhasználó által hozzárendelt felügyelt identitás létrehozása
Hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, és rendelje hozzá az App Service-hez. A felügyelt identitás az adatbázishoz és a tárfiókhoz való hozzáférésre szolgál.
Az az identity create paranccsal hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, és adja ki az ügyfél-azonosítót egy változónak későbbi használatra.
UA_CLIENT_ID=$(az identity create --name $UA_NAME --resource-group $RESOURCE_GROUP_NAME --query clientId --output tsv) echo $UA_CLIENT_IDAz az account show paranccsal kérje le az előfizetés azonosítóját, és adja ki egy változónak, amely a felügyelt identitás erőforrás-azonosítójának létrehozásához használható.
SUBSCRIPTION_ID=$(az account show --query id --output tsv) RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$UA_NAME" echo $RESOURCE_IDRendelje hozzá a felügyelt identitást az App Service-hez az az webapp identity assign paranccsal.
export MSYS_NO_PATHCONV=1 az webapp identity assign \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --identities $RESOURCE_IDAz Az webapp config appsettings set paranccsal hozzon létre olyan App Service-alkalmazásbeállításokat, amelyek tartalmazzák a felügyelt identitás ügyfél-azonosítóját és egyéb konfigurációs adatait.
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --settings AZURE_CLIENT_ID=$UA_CLIENT_ID \ STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME \ STORAGE_CONTAINER_NAME=photos \ DBHOST=$DB_SERVER_NAME \ DBNAME=restaurant \ DBUSER=$UA_NAME
A mintaalkalmazás környezeti változókat (alkalmazásbeállításokat) használ az adatbázis és a tárfiók kapcsolati adatainak meghatározásához, de ezek a változók nem tartalmaznak jelszavakat. Ehelyett a hitelesítés jelszó nélküli.DefaultAzureCredential
A mintaalkalmazás kódja az osztálykonstruktort DefaultAzureCredential használja anélkül, hogy átadta a felhasználó által hozzárendelt felügyelt identitás ügyfélazonosítóját a konstruktornak. Ebben a forgatókönyvben a tartalék az alkalmazásbeállításként beállított környezeti változó ellenőrzése AZURE_CLIENT_ID .
Ha a AZURE_CLIENT_ID környezeti változó nem létezik, a rendszer által hozzárendelt felügyelt identitást használja a rendszer, ha konfigurálva van. További információt a DefaultAzureCredential bemutatása című témakörben talál.
Szerepkörök létrehozása a felügyelt identitáshoz
Ebben a szakaszban szerepkör-hozzárendeléseket hoz létre a felügyelt identitáshoz a tárfiókhoz és az adatbázishoz való hozzáférés engedélyezéséhez.
Hozzon létre egy szerepkör-hozzárendelést a felügyelt identitáshoz, amely lehetővé teszi a tárfiókhoz való hozzáférést az az szerepkör-hozzárendelés létrehozási parancsával.
export MSYS_NO_PATHCONV=1 az role assignment create \ --assignee $UA_CLIENT_ID \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCE_GROUP_NAME"A parancs megadja az erőforráscsoporthoz való szerepkör-hozzárendelés hatókörét. További információ: Szerepkör-hozzárendelések ismertetése.
Az az postgres flexible-server execute paranccsal csatlakozzon a Postgres-adatbázishoz, és futtassa ugyanazokat a parancsokat a szerepkörök felügyelt identitáshoz való hozzárendeléséhez.
ACCOUNT_EMAIL_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ACCOUNT_EMAIL \ --admin-password $ACCOUNT_EMAIL_TOKEN \ --database-name postgres \ --querytext "select * from pgaadauth_create_principal('"$UA_NAME"', false, false);select * from pgaadauth_list_principals(false);"Ha problémát tapasztal a parancs futtatásával, győződjön meg arról, hogy a felhasználói fiókját Microsoft Entra-rendszergazdaként adta hozzá a PosgreSQL-kiszolgálóhoz, és engedélyezi az IP-cím elérését a tűzfalszabályokban. További információ: Rugalmas Azure PostgreSQL-kiszolgáló létrehozása.
A Python-webalkalmazás tesztelése az Azure-ban
A minta Python-alkalmazás az azure.identity csomagot és annak osztályát DefaultAzureCredential használja. Amikor az alkalmazás az Azure-ban fut, automatikusan észleli, DefaultAzureCredential hogy létezik-e felügyelt identitás az App Service-hez, és ha igen, más Azure-erőforrások (ebben az esetben a storage és a PostgreSQL) eléréséhez használja. Ezeknek az erőforrásoknak a eléréséhez nem kell megadnia a tárkulcsokat, tanúsítványokat vagy hitelesítő adatokat az App Service-nek.
Keresse meg az üzembe helyezett alkalmazást az URL-címen
http://$APP_SERVICE_NAME.azurewebsites.net.Az alkalmazás indítása akár egy-két percet is igénybe vehet. Ha olyan alapértelmezett alkalmazásoldalt lát, amely nem az alapértelmezett mintaalkalmazáslap, várjon egy percet, és frissítse a böngészőt.
Tesztelje a mintaalkalmazás funkcióit egy étterem hozzáadásával és néhány értékeléssel az étterem fényképeivel.
Az étterem és a felülvizsgálati információk az Azure Database for PostgreSQL-ben, a fényképek pedig az Azure Storage-ban vannak tárolva. Íme egy példa képernyőkép:
Takarítás
Ebben az oktatóanyagban az összes Azure-erőforrás ugyanabban az erőforráscsoportban lett létrehozva. Az erőforráscsoport eltávolítása az az group delete paranccsal eltávolítja az erőforráscsoport összes erőforrását, és ez a leggyorsabb módja az alkalmazáshoz használt összes Azure-erőforrás eltávolításának.
az group delete --name $RESOURCE_GROUP_NAME
Hozzáadhatja az --no-wait argumentumot, hogy a parancs a művelet befejezése előtt visszatérjen.
Képernyőkép a mintaalkalmazásról, amely a Azure-alkalmazás Service, az Azure PostgreSQL Database és az Azure Storage éttermi felülvizsgálati funkcióit mutatja be.