Sdílet prostřednictvím


Vytvoření a nasazení webové aplikace Flask Python do Azure se spravovanou identitou přiřazenou systémem

V tomto kurzu nasadíte kód Python Flask pro vytvoření a nasazení webové aplikace spuštěné ve službě Aplikace Azure Service. Webová aplikace používá spravovanou identitu přiřazenou systémem (bez hesla) s řízením přístupu na základě role v Azure pro přístup k prostředkům flexibilního serveru Azure Storage a Azure Database for PostgreSQL. Kód používá defaultAzureCredential třídy klientské knihovny Azure Identity pro Python. Třída DefaultAzureCredential automaticky zjistí, že spravovaná identita existuje pro službu App Service a používá ji pro přístup k dalším prostředkům Azure.

Pomocí konektoru Service Connector můžete nakonfigurovat připojení bez hesla ke službám Azure nebo je můžete nakonfigurovat ručně. V tomto kurzu se dozvíte, jak používat konektor Service Connector. Další informace o připojeních bez hesel najdete v tématu Připojení bez hesla pro služby Azure. Informace o konektoru služby najdete v dokumentaci ke konektoru služby.

V tomto kurzu se dozvíte, jak vytvořit a nasadit webovou aplikaci v Pythonu pomocí Azure CLI. Příkazy v tomto kurzu se zapisují tak, aby se spouštěly v prostředí Bash. Příkazy kurzu můžete spouštět v jakémkoli prostředí Bash s nainstalovaným rozhraním příkazového řádku, jako je místní prostředí nebo Azure Cloud Shell. S některými úpravami – například nastavením a používáním proměnných prostředí – můžete tyto příkazy spustit v jiných prostředích, jako je příkazové prostředí Windows. Příklady použití spravované identity přiřazené uživatelem najdete v tématu Vytvoření a nasazení webové aplikace Django do Azure pomocí spravované identity přiřazené uživatelem.

Získání ukázkové aplikace

K dispozici je ukázková aplikace Pythonu využívající architekturu Flask, která vám pomůže postupovat podle tohoto kurzu. Stáhněte nebo naklonujte jednu z ukázkových aplikací do místní pracovní stanice.

  1. Naklonujte ukázku v relaci Azure Cloud Shellu.

    git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
    
  2. Přejděte do složky aplikace.

    cd msdocs-flask-web-app-managed-identity
    

Prozkoumání ověřovacího kódu

Ukázková webová aplikace se musí ověřit ve dvou různých úložištích dat:

  • Azure Blob Storage Server, do kterého ukládá a načítá fotky odeslané revidujícím.
  • Databáze flexibilního serveru Azure Database for PostgreSQL, ve které ukládá restaurace a recenze.

K ověření v obou úložištích dat používá DefaultAzureCredential . Aplikace DefaultAzureCredentialse dá nakonfigurovat tak, aby běžela pod identitou různých instančních objektů v závislosti na prostředí, ve kterém je spuštěná, bez nutnosti provádět změny kódu. Například v místním vývojovém prostředí může aplikace běžet pod identitou vývojáře přihlášeného k Azure CLI, zatímco v Azure, jak je uvedeno v tomto kurzu, může běžet pod spravovanou identitou přiřazenou systémem.

V obou případech musí mít objekt zabezpečení, pod kterým aplikace běží, roli pro každý prostředek Azure, který aplikace používá, aby prováděla akce s prostředkem, který aplikace vyžaduje. V tomto kurzu použijete konektory služeb k automatickému povolení spravované identity přiřazené systémem ve vaší aplikaci v Azure a k přiřazení příslušných rolí identity na vašem účtu úložiště Azure a serveru Azure Database for PostgreSQL.

Po povolení spravované identity přiřazené systémem a přiřazení odpovídajících rolí v úložištích dat můžete použít DefaultAzureCredential k ověření s požadovanými prostředky Azure.

Následující kód slouží k vytvoření klienta úložiště objektů blob pro nahrání fotek do app.py. Instance DefaultAzureCredential je poskytována klientovi, který používá k získání přístupových tokenů k provádění operací s úložištěm Azure.

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)

Instance se také používá k získání přístupového DefaultAzureCredential tokenu pro Službu Azure Database for PostgreSQL v ./azureproject/get_conn.py. V tomto případě se token získá přímo voláním get_token instance přihlašovacích údajů a předáním příslušné scope hodnoty. Token se pak použije místo hesla v identifikátoru URI připojení PostgreSQL vráceného volajícímu.

azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("https://ossrdbms-aad.database.windows.net")
conn = str(current_app.config.get('DATABASE_URI')).replace('PASSWORDORTOKEN', token.token)

Další informace o ověřování aplikací pomocí služeb Azure najdete v tématu Ověřování aplikací Pythonu ve službách Azure pomocí sady Azure SDK pro Python. Další informace o DefaultAzureCredentialtom, včetně toho, jak přizpůsobit řetěz přihlašovacích údajů, který vyhodnotí pro vaše prostředí, najdete v přehledu DefaultAzureCredential.

Vytvoření serveru Azure PostgreSQL

  1. Nastavte proměnné prostředí potřebné pro kurz.

    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"
    

    Důležité

    Musí ADMIN_PW obsahovat 8 až 128 znaků ze tří z následujících kategorií: velká písmena anglické abecedy, malá písmena anglické abecedy, číslice a neosamocené znaky. Při vytváření uživatelských jmen nebo hesel znak nepoužívejte$. Později vytvoříte proměnné prostředí s těmito hodnotami, ve kterých $ má znak speciální význam v kontejneru Linuxu, který se používá ke spouštění aplikací v Pythonu.

  2. Vytvořte skupinu prostředků pomocí příkazu az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. Vytvořte server PostgreSQL pomocí příkazu az postgres flexible-server create . (Tento a další příkazy používají znak pokračování řádku pro prostředí Bash ('\'). V případě potřeby změňte znak pokračování řádku pro prostředí.)

    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
    

    Název skladové položky je název cenové úrovně a konfigurace výpočetních prostředků. Další informace najdete v tématu o cenách služby Azure Database for PostgreSQL. Pokud chcete zobrazit seznam dostupných skladových položek, použijte az postgres flexible-server list-skus --location $LOCATION.

  4. Vytvořte databázi s názvem restaurant pomocí příkazu az postgres flexible-server execute .

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

Vytvoření služby Aplikace Azure a nasazení kódu

  1. Vytvořte službu App Service pomocí příkazu az webapp up .

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.9 \
      --sku B1
    

    Skladová položka definuje velikost (procesor, paměť) a náklady na plán služby App Service. Za plán služby B1 (Basic) se ve vašem předplatném Azure účtují malé náklady. Úplný seznam plánů služby App Service najdete na stránce s cenami služby App Service.

  2. Nakonfigurujte službu App Service tak, aby používala start.sh v úložišti pomocí příkazu az webapp config set.

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Vytváření konektorů bez hesel pro prostředky Azure

Příkazy konektoru služeb konfiguruje prostředky Azure Storage a Azure Database for PostgreSQL tak, aby používaly spravovanou identitu a řízení přístupu na základě role v Azure. Příkazy vytvoří nastavení aplikace ve službě App Service, která k těmto prostředkům připojí vaši webovou aplikaci. Výstup z příkazů uvádí akce konektoru služby, které se provedly za účelem povolení funkce bez hesla.

  1. Přidejte konektor služby PostgreSQL pomocí příkazu az webapp connection create postgres-flexible . Spravovaná identita přiřazená systémem se v tomto případě používá k ověření webové aplikace v cílovém prostředku PostgreSQL.

    az webapp connection create postgres-flexible \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --server $DB_SERVER_NAME \
      --database restaurant \
      --client-type python \
      --system-identity
    
  2. Přidejte konektor služby storage pomocí příkazu az webapp connection create storage-blob .

    Tento příkaz také přidá účet úložiště a přidá webovou aplikaci s rolí Přispěvatel dat objektů blob služby Storage do účtu úložiště.

    STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \
      --new true \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --client-type python \
      --system-identity \
      --query configurations[].value \
      --output tsv)
    STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
    

Vytvoření kontejneru v účtu úložiště

Ukázková aplikace v Pythonu ukládá fotky odeslané revidujícím jako objekty blob v kontejneru ve vašem účtu úložiště.

  • Když uživatel odešle fotku se svou kontrolou, ukázková aplikace zapíše image do kontejneru pomocí spravované identity přiřazené systémem pro ověřování a autorizaci. Tuto funkci jste nakonfigurovali v poslední části.

  • Když uživatel zobrazí recenze restaurace, vrátí aplikace odkaz na fotku v úložišti objektů blob pro každou recenzi, která má přidruženou k ní. Aby se fotka zobrazila v prohlížeči, musí k ní mít přístup ve vašem účtu úložiště. Data objektu blob musí být k dispozici pro čtení veřejně prostřednictvím anonymního (neověřeného) přístupu.

Pro zvýšení zabezpečení se účty úložiště vytvářejí s anonymním přístupem k datům objektů blob zakázaným ve výchozím nastavení. V této části povolíte anonymní přístup pro čtení v účtu úložiště a pak vytvoříte kontejner s názvem fotky , které poskytují veřejný (anonymní) přístup k jeho objektům blob.

  1. Aktualizujte účet úložiště tak, aby umožňoval anonymní přístup pro čtení k objektům blob pomocí příkazu az storage account update .

    az storage account update \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP_NAME \
      --allow-blob-public-access true
    

    Povolení anonymního přístupu v účtu úložiště nemá vliv na přístup pro jednotlivé objekty blob. Veřejný přístup k objektům blob musíte explicitně povolit na úrovni kontejneru.

  2. Pomocí příkazu az storage container create vytvořte kontejner s názvem fotky v účtu úložiště. Povolit anonymní přístup pro čtení (veřejný) k objektům blob v nově vytvořeném kontejneru.

    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \
          --query [0].value --output tsv) 
    

    Poznámka:

    Pro stručnost tento příkaz používá klíč účtu úložiště k autorizaci s účtem úložiště. Pro většinu scénářů doporučuje Microsoft používat role Microsoft Entra ID a Azure (RBAC). Rychlý start: Vytvoření, stažení a výpis objektů blob pomocí Azure CLI najdete v rychlém startu. Všimněte si, že několik rolí Azure umožňuje vytvářet kontejnery v účtu úložiště, včetně vlastníka, přispěvatele, vlastníka dat objektů blob úložiště a přispěvatele dat objektů blob úložiště.

Další informace o anonymním přístupu pro čtení k datům objektů blob najdete v tématu Konfigurace anonymního přístupu pro čtení pro kontejnery a objekty blob.

Testování webové aplikace v Pythonu v Azure

Ukázková aplikace v Pythonu používá balíček azure.identity a její DefaultAzureCredential třídu. Když je aplikace spuštěná v Azure, automaticky zjistí, DefaultAzureCredential jestli pro službu App Service existuje spravovaná identita, a pokud ano, použije ji pro přístup k dalším prostředkům Azure (v tomto případě úložiště a PostgreSQL). Pro přístup k těmto prostředkům nemusíte zadávat klíče úložiště, certifikáty ani přihlašovací údaje služby App Service.

  1. Přejděte na nasazenou aplikaci na adrese URL http://$APP_SERVICE_NAME.azurewebsites.net.

    Spuštění aplikace může trvat minutu nebo dvě. Pokud se zobrazí výchozí stránka aplikace, která není výchozí stránkou ukázkové aplikace, počkejte minutu a aktualizujte prohlížeč.

  2. Otestujte funkčnost ukázkové aplikace přidáním restaurace a několika recenzemi s fotkami pro restauraci.

    Restaurace a kontrola informací se ukládají ve službě Azure Database for PostgreSQL a fotky se ukládají ve službě Azure Storage. Tady je příklad snímku obrazovky:

    Screenshot of the sample app showing restaurant review functionality using Azure App Service, Azure PostgreSQL Database, and Azure Storage.Snímek obrazovky ukázkové aplikace zobrazující funkce kontroly restaurace pomocí služby Aplikace Azure Service, Azure PostgreSQL Database a Azure Storage

Vyčištění

V tomto kurzu byly všechny prostředky Azure vytvořeny ve stejné skupině prostředků. Odebrání skupiny prostředků odebere příkazem az group delete všechny prostředky ve skupině prostředků a je nejrychlejší způsob, jak odebrat všechny prostředky Azure používané pro vaši aplikaci.

az group delete  --name $RESOURCE_GROUP_NAME 

Volitelně můžete přidat --no-wait argument, který umožní, aby se příkaz vrátil před dokončením operace.

Další kroky