Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu nasadíte webovou aplikaci Django na Azure App Service. Webová aplikace používá uživatelem přiřazenou spravovanou identitu (bez hesla) s řízením přístupu na základě role v Azure k přístupu k prostředkům Azure Storage a Azure Database for PostgreSQL - Flexible Server. Kód používá třídu DefaultAzureCredential z 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.
V tomto kurzu vytvoříte spravovanou identitu přiřazenou uživatelem a přiřadíte ji službě App Service, aby získal přístup k prostředkům databáze a účtu úložiště. Příklad použití spravované identity přiřazené systémem najdete v tématu Vytvoření a nasazení webové aplikace Flask Python do Azure se spravovanou identitou přiřazenou systémem. Spravované identity přiřazené uživatelem se doporučují, protože je můžou používat více prostředků a jejich životní cykly jsou oddělené od životních cyklů prostředků, ke kterým jsou přidružené. Další informace o osvědčených postupech pro používání spravovaných identit najdete v doporučeních osvědčených postupů pro spravovanou identitu.
Tento návod ukazuje, jak nasadit webovou aplikaci Python a vytvořit prostředky Azure pomocí Azure CLI. Příkazy v tomto kurzu používají prostředí Bash, ale 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 vaše místní prostředí nebo Azure Cloud Shell. S některými úpravami můžete tyto příkazy spouštět v jiných prostředích, jako je příkazové prostředí Windows (např. úprava syntaxe pro nastavení a použití proměnných prostředí).
Získání ukázkové aplikace
Pomocí ukázkové aplikace Django můžete postupovat společně s tímto tutoriálem. Stáhněte nebo naklonujte ukázkovou aplikaci do vývojového prostředí.
Naklonujte ukázku.
git clone https://github.com/Azure-Samples/msdocs-django-web-app-managed-identity.gitPřejděte do složky aplikace.
cd msdocs-django-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 autentizaci v obou úložištích dat používá DefaultAzureCredential. S DefaultAzureCredential se aplikace dá nakonfigurovat tak, aby běžela pod identitou různých služeb 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 uživatelem.
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 pomocí příkazů Azure CLI vytvoříte spravovanou identitu přiřazenou uživatelem a přiřadíte ji k aplikaci v Azure. Potom ručně přiřadíte příslušné role identity na vašem účtu úložiště Azure a serveru Azure Database for PostgreSQL. Nakonec nastavíte proměnnou prostředí pro vaši aplikaci v Azure, aby se nakonfigurovala k použití spravované identity.
Jakmile je spravovaná identita přiřazená uživatelem nakonfigurovaná ve vaší aplikaci a jejím runtime prostředí a jsou přiřazeny příslušné role v úložištích dat, můžete použít DefaultAzureCredential k autentizaci 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 v ./restaurant_review/views.py. Instance DefaultAzureCredential je poskytována klientovi, který ji používá k získání přístupových tokenů pro 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 DefaultAzureCredential se také používá k získání přístupového tokenu pro Azure Database for PostgreSQL v ./azureproject/get_conn.py. V tomto případě se token získá přímo voláním get_token na instanci přihlašovacích údajů a předáním odpovídající hodnoty scope. Token se pak použije k nastavení hesla v URI připojení PostgreSQL.
azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("https://ossrdbms-aad.database.windows.net")
conf.settings.DATABASES['default']['PASSWORD'] = token.token
Chcete-li se dozvědět více o ověřování vašich aplikací pomocí služeb Azure, podívejte se na Ověřování aplikací v Pythonu ve službách Azure pomocí sady Azure SDK pro Python. Pro více informací o DefaultAzureCredential, včetně toho, jak přizpůsobit řetězec přihlašovacích údajů pro vaše prostředí, naleznete v přehledu DefaultAzureCredential.
Vytvoření flexibilního 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" UA_NAME="UAManagedIdentityPythonTest$RAND_ID"Důležité
ADMIN_PWmusí 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 nealfanumerické znaky. Při vytváření uživatelských jmen nebo hesel nepoužívejte znak$. Později vytvoříte proměnné prostředí s těmito hodnotami, kde znak$má zvláštní význam v kontejneru Linuxu, který se používá pro spouštění aplikací Python.Vytvořte skupinu prostředků pomocí příkazu az group create.
az group create --location $LOCATION --name $RESOURCE_GROUP_NAMEVytvořte flexibilní 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 ('\'). Změňte znak pokračování řádku pro ostatní shelly.
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.0Název sku-name je jméno cenové úrovně a konfigurace výpočetních prostředků. Pro více informací se podívejte na cenové informace 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.Přidejte svůj účet Azure jako správce Microsoft Entra pro server pomocí příkazu az postgres flexible-server ad-admin create.
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 UserNakonfigurujte pravidlo brány firewall na vašem serveru pomocí příkazu az postgres flexible-server firewall-rule create. Toto pravidlo umožňuje místnímu prostředí přístup k serveru. (Pokud používáte Azure Cloud Shell, můžete tento krok přeskočit.)
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_ADDRESSPoužijte jakýkoli nástroj nebo web, který zobrazuje vaši IP adresu, abyste nahradili
<your IP>v příkazu. Například můžete použít What's My IP Address? web.Vytvořte databázi s názvem
restaurantpomocí 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
Pokud chcete vytvořit službu App Service a nasadit kód, spusťte tyto příkazy v kořenové složce ukázkové aplikace.
Vytvořte službu App Service pomocí příkazu az webapp up.
az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1sku definuje velikost (CPU, 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. Pro úplný seznam plánů služby App Service si zobrazte Stránka s cenami služby App Service.
Nakonfigurujte službu App Service tak, aby používala start.sh v ukázkovém repozitáři pomocí příkazu az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Vytvoření účtu úložiště a kontejneru
Ukázková aplikace ukládá fotky odeslané revidujícím jako objekty blob ve službě Azure Storage.
Když uživatel nahraje fotku ke své recenzi, ukázková aplikace uloží obrázek do kontejneru pomocí spravované identity a `
DefaultAzureCredential` pro přístup k účtu úložiště.Když uživatel zobrazuje recenze pro restauraci, aplikace vrátí odkaz na fotografii uloženou v blobovém úložišti pro každou recenzi, která ji má přiřazenou. 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.
V této části vytvoříte účet úložiště a kontejner, který umožňuje veřejný přístup pro čtení k objektům blob v kontejneru. V pozdějších částech vytvoříte spravovanou identitu přiřazenou uživatelem a nakonfigurujete ji pro zápis objektů blob do účtu úložiště.
Pomocí příkazu az storage create vytvořte účet úložiště.
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 trueVytvořte kontejner s názvem fotky v účtu úložiště pomocí příkazu az storage container create.
az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode loginPoznámka:
Je možné, že příkaz selže. Může se například zobrazit chyba oznamující, že pravidla sítě blokují požadavek na vytvoření účtu úložiště. Pokud příkaz selže, zadejte následující příkaz, abyste měli jistotu, že přiřadíte roli Azure s oprávněním vytvářet kontejnery k vašemu uživatelskému účtu Azure.
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"Další informace najdete v tématu Rychlý start: Vytvoření, stažení a výpis objektů blob pomocí Azure CLI. 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ě.
Vytvořte spravovanou identitu přiřazenou uživatelem
Vytvořte spravovanou identitu přiřazenou uživatelem a přiřaďte ji ke službě App Service. Spravovaná identita se používá pro přístup k databázi a účtu úložiště.
Použijte příkaz az identity create k vytvoření spravované identity přiřazené uživatelem a k uložení ID klienta do proměnné pro pozdější použití.
UA_CLIENT_ID=$(az identity create --name $UA_NAME --resource-group $RESOURCE_GROUP_NAME --query clientId --output tsv) echo $UA_CLIENT_IDPoužijte příkaz az account show k získání vašeho ID předplatného a výsledek uložte do proměnné, které lze použít k vytvoření ID prostředku spravované identity.
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_IDPomocí příkazu az webapp identity assign přiřaďte spravovanou identitu ke službě App Service.
export MSYS_NO_PATHCONV=1 az webapp identity assign \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --identities $RESOURCE_IDPomocí příkazu az webapp config appsettings set vytvořte nastavení aplikace App Service, která obsahují ID klienta spravované identity a další konfigurační informace.
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
Ukázková aplikace používá proměnné prostředí (nastavení aplikace) k definování informací o připojení pro databázi a účet úložiště, ale tyto proměnné neobsahují hesla. Namísto toho se ověřování provádí bez hesla pomocí DefaultAzureCredential.
Kód ukázkové aplikace používá konstruktor třídy DefaultAzureCredential bez předání uživatelsky přiřazeného ID klienta spravované identity. V tomto scénáři je záložním řešením zkontrolovat proměnnou prostředí AZURE_CLIENT_ID, kterou jste nastavili jako nastavení aplikace.
AZURE_CLIENT_ID Pokud proměnná prostředí neexistuje, použije se spravovaná identita přiřazená systémem, pokud je nakonfigurovaná. Další informace naleznete v tématu Představujeme DefaultAzureCredential.
Vytvoření rolí pro spravovanou identitu
V této části vytvoříte přiřazení rolí pro spravovanou identitu, která umožní přístup k účtu úložiště a databázi.
Vytvořte přiřazení role pro spravovanou identitu a umožněte přístup k účtu úložiště pomocí příkazu az role assignment create.
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"Příkaz určuje rozsah přiřazení role ke skupině prostředků. Další informace najdete v části Pochopení přiřazení rolí.
Použijte příkaz az postgres flexible-server execute pro připojení k databázi Postgres a spusťte stejné příkazy k přiřazení rolí spravované identitě.
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);"Pokud máte potíže se spuštěním příkazu, ujistěte se, že jste uživatelský účet přidali jako správce Microsoft Entra pro server PosgreSQL a že v pravidlech brány firewall povolíte přístup k vaší IP adrese. Další informace najdete v části Vytvoření flexibilního serveru Azure PostgreSQL.
Testování webové aplikace v Pythonu v Azure
Ukázková aplikace v Pythonu používá balíček azure.identity a jeho DefaultAzureCredential třídu. Když je aplikace spuštěná v Azure, DefaultAzureCredential automaticky zjistí, 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.
Informace o restauracích a recenzích 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:
```cs-CZ Snímek obrazovky ukázkové aplikace zobrazující funkce hodnocení restaurací pomocí Azure App 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ů pomocí příkazu az group delete odstraní všechny prostředky ve skupině prostředků a je to nejrychlejší způsob, jak odstranit všechny prostředky Azure používané pro vaši aplikaci.
az group delete --name $RESOURCE_GROUP_NAME
Volitelně můžete přidat argument --no-wait, který umožní příkazu vrátit se před dokončením operace.
Další kroky
Vytvořte a nasaďte webovou aplikaci Flask do Azure s identitou spravovanou systémem.
Nasazení webové aplikace Python (Django nebo Flask) s PostgreSQL v Azure App Service