Megosztás a következőn keresztül:


Django-webalkalmazás létrehozása és üzembe helyezése az Azure-ban felhasználó által hozzárendelt felügyelt identitással

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.

  1. Klónozza a mintát.

    git clone https://github.com/Azure-Samples/msdocs-django-web-app-managed-identity.git
    
  2. Lé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

  1. Á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_PW kö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.

  2. Hozzon létre egy erőforráscsoportot az az group create paranccsal.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. Hozzon 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.0
    

    A 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: .

  4. 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 User
    
  5. Konfigurá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_ADDRESS
    

    Haszná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 .

  6. Hozzon létre egy adatbázist restaurant az 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.

  1. 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 B1
    

    A 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.

  2. 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 DefaultAzureCredential segí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.

  1. 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 true
    
  2. Hozzon 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 login
    

    Note

    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.

  1. 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_ID
    
  2. Az 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_ID
    
  3. Rendelje 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_ID
    
  4. Az 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.

  1. 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.

  2. 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.

  1. 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.

  2. 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:

    Screenshot of the sample app showing restaurant review functionality using Azure App Service, Azure PostgreSQL Database, and Azure Storage.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.

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övetkező lépések