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.
Naklonujte ukázku v relaci Azure Cloud Shellu.
git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
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 DefaultAzureCredential
se 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 DefaultAzureCredential
tom, 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
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.Vytvořte skupinu prostředků pomocí příkazu az group create.
az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
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
.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
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.
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.
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
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.
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.
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.
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č.
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:
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.