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.
Při vytváření cloudových aplikací potřebují vývojáři často spouštět a testovat své aplikace místně. I během místního vývoje se aplikace musí ověřit ve všech službách Azure, se kterými komunikuje. Tento článek vysvětluje, jak nakonfigurovat vyhrazené identity služby určené pro použití během místního vývoje.
Instanční objekty vyhrazených aplikací pro místní vývoj podporují princip nejnižších oprávnění omezením přístupu pouze k prostředkům Azure vyžadovaným aplikací během vývoje. Použití vyhrazeného instančního objektu aplikace snižuje riziko nezamýšleného přístupu k jiným prostředkům a pomáhá zabránit chybám souvisejícím s oprávněními při přechodu do produkčního prostředí, kdy širší oprávnění můžou vést k problémům.
Při registraci aplikací pro místní vývoj v Azure se doporučuje:
- Vytvořte pro každého vývojáře samostatné registrace aplikací: Toto poskytuje každému vývojáři jeho vlastní služební hlavní komponentu, což eliminuje potřebu sdílet přihlašovací údaje a umožňuje podrobnější řízení přístupu.
- Vytvořte pro každou aplikaci samostatnou registraci aplikací: Tím se zajistí, že každá aplikace bude mít jenom potřebná oprávnění, což snižuje potenciální prostor pro útok.
Pokud chcete povolit ověřování během místního vývoje, nastavte proměnné prostředí pomocí přihlašovacích údajů instančního objektu aplikace. Sada Azure SDK pro Python tyto proměnné detekuje a používá je k ověřování požadavků na služby Azure.
1. Registrace aplikace v Azure
Objekty hlavní služby aplikace se vytvoří, když zaregistrujete aplikaci v Azure. Tuto registraci je možné provést pomocí webu Azure Portal nebo Azure CLI. Proces registrace vytvoří registraci aplikace v Microsoft Entra ID (dříve Azure Active Directory) a vygeneruje objekt hlavního poskytovatele služeb pro aplikaci. Objekt služebního principalu se používá k autentizaci aplikace ve službách Azure.
Proces registrace aplikace také vygeneruje tajný klíč klienta (heslo) pro aplikaci. Tento tajný klíč slouží k ověření aplikace ve službách Azure. Tajný klíč klienta není nikdy uložen ve správě zdrojového kódu, ale spíše v .env
souboru v adresáři aplikace. Soubor .env
přečte aplikace za běhu a nastaví proměnné prostředí, které sada Azure SDK pro Python používá k ověření aplikace.
Následující kroky ukazují, jak zaregistrovat aplikaci v Azure a vytvořit instanční objekt pro aplikaci. Postup se zobrazí jak pro Azure CLI, tak pro Azure Portal.
Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI.
Nejprve pomocí příkazu az ad sp create-for-rbac vytvořte pro aplikaci nový instanční objekt. Příkaz také vytvoří registraci aplikace pro aplikaci ve stejnou dobu.
SERVICE_PRINCIPAL_NAME=<service-principal-name>
az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME
Výstup tohoto příkazu je podobný následujícímu. Poznamenejte si tyto hodnoty nebo nechte toto okno otevřené, protože je budete potřebovat v dalších krocích a nebudete moct znovu zobrazit hodnotu hesla (tajný klíč klienta). Nové heslo ale můžete později přidat bez zneplatnění instančního objektu nebo stávajících hesel v případě potřeby.
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "<service-principal-name>",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
Dále potřebujete získat appID
hodnotu a uložit ji do proměnné. Tato hodnota slouží k nastavení proměnných prostředí ve vašem místním vývojovém prostředí, aby se Azure SDK pro Python mohlo ověřit v Azure pomocí služebního účtu.
APP_ID=$(az ad sp list \
--all \
--query "[?displayName=='$SERVICE_PRINCIPAL_NAME'].appId | [0]" \
--output tsv)
2. Vytvoření skupiny zabezpečení Microsoft Entra pro místní vývoj
Vzhledem k tomu, že aplikace pracuje obvykle více vývojářů, doporučuje se vytvořit skupinu zabezpečení Microsoft Entra, která zapouzdří role (oprávnění) potřeb aplikace v místním vývoji, a ne přiřazovat role jednotlivým objektům instančního objektu. Nabízí následující výhody:
- Každý vývojář má jistotu, že má přiřazené stejné role, protože role jsou přiřazené na úrovni skupiny.
- Pokud je pro aplikaci potřeba nová role, stačí ji přidat jenom do skupiny Microsoft Entra pro aplikaci.
- Pokud se nový vývojář připojí k týmu, vytvoří se nový instanční objekt aplikace pro vývojáře a přidá se do skupiny, aby vývojář získal správná oprávnění pro práci s aplikací.
Příkaz az ad group create slouží k vytvoření skupin zabezpečení v Microsoft Entra ID. Parametry --display-name
a --main-nickname
jsou povinné. Název dané skupiny by měl vycházet z názvu aplikace. Je také užitečné zahrnout do názvu skupiny frázi jako local-dev, která označuje účel skupiny.
GROUP_DISPLAY_NAME="<group-name>"
GROUP_MAIL_NICKNAME="<group-mail-nickname>"
GROUP_DESCRIPTION="<group-description>"
az ad group create \
--display-name $GROUP_DISPLAY_NAME \
--mail-nickname $GROUP_MAIL_NICKNAME \
--description $GROUP_DESCRIPTION
Pokud chcete do skupiny přidat členy, potřebujete ID objektu instančního objektu aplikace, který se liší od ID aplikace.
Pomocí příkazu az ad sp list vypíšete dostupné instanční objekty. Příkaz --filter
parametru přijímá filtry stylu OData a lze ho použít k filtrování seznamu, jak je znázorněno. Parametr --query
je omezen pouze na sloupce, které mají zájem.
SP_OBJECT_ID=$(az ad sp list \
--filter "startswith(displayName,'$GROUP_DISPLAY_NAME')" \
--query "[0].id" \
--output tsv)
Příkaz az ad group member add se pak dá použít k přidání členů do skupin.
az ad group member add \
--group $GROUP_DISPLAY_NAME \
--member-id $SP_OBJECT_ID
Poznámka:
Ve výchozím nastavení je vytváření skupin zabezpečení Microsoft Entra omezené na určité privilegované role v adresáři. Pokud nemůžete vytvořit skupinu, obraťte se na správce vašeho adresáře. Pokud nemůžete přidat členy do existující skupiny, obraťte se na vlastníka skupiny nebo správce adresáře. Další informace najdete v tématu Správa skupin a členství ve skupinách Microsoft Entra.
3. Přiřazení rolí k aplikaci
Dále musíte určit, jaké role (oprávnění) vaše aplikace potřebuje k jakým prostředkům, a přiřadit tyto role k aplikaci. V tomto příkladu jsou role přiřazeny ke skupině Microsoft Entra vytvořené v kroku 2. Role je možné přiřadit v oboru prostředku, skupiny prostředků nebo předplatného. Tento příklad ukazuje, jak přiřadit role v oboru skupiny prostředků, protože většina aplikací seskupuje všechny prostředky Azure do jedné skupiny prostředků.
Uživateli, skupině nebo instančnímu objektu aplikace je přiřazena role v Azure pomocí příkazu az role assignment create . Můžete zadat skupinu s ID objektu. Instanční objekt aplikace můžete zadat pomocí id aplikace.
RESOURCE_GROUP_NAME=<resource-group-name>
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ROLE_NAME=<role-name>
az role assignment create \
--assignee "$APP_ID" \
--scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \
--role "$ROLE_NAME"
![!POZNÁMKA] Pokud nechcete, aby Git Bash nezacházel s /subscriptions/... jako s cestou k souboru, přidejte před řetězec parametru
scope
"./" a použijte dvojité uvozovky kolem celého řetězce.
Pokud chcete získat názvy rolí, které je možné přiřadit, použijte příkaz az role definition list .
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Pokud chcete například povolit instančnímu objektu aplikace s ID 00001111-aaaa-2222-bbbb-3333cccc4444
čtení, zápisu a odstranění přístupu ke kontejnerům objektů blob a datům služby Azure Storage ve všech účtech úložiště ve skupině prostředků msdocs-python-sdk-auth-example v předplatném s ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
, přiřadili byste instanční objekt aplikace k roli Přispěvatel dat objektů blob služby Storage pomocí následujícího příkazu.
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--scope "./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example" \
--role "Storage Blob Data Contributor"
Informace o přiřazování oprávnění na úrovni prostředku nebo předplatného pomocí Azure CLI najdete v článku Přiřazení rolí Azure pomocí Azure CLI.
4. Nastavení proměnných místního vývojového prostředí
Objekt DefaultAzureCredential
vyhledá informace instančního objektu v sadě proměnných prostředí za běhu. Vzhledem k tomu, že většina vývojářů pracuje na více aplikacích, doporučuje se použít balíček, jako je python-dotenv , pro přístup k prostředí ze .env
souboru uloženého v adresáři aplikace během vývoje. Tím se vymenou proměnné prostředí používané k ověření aplikace v Azure tak, aby je mohly používat pouze tato aplikace.
Soubor .env
se nikdy nezaškrtá do správy zdrojového kódu, protože obsahuje tajný klíč aplikace pro Azure. Standardní soubor .gitignore pro Python automaticky vyloučí .env
soubor z vrácení se změnami.
Pokud chcete použít balíček python-dotenv, nejprve nainstalujte balíček do aplikace.
pip install python-dotenv
Potom vytvořte soubor v kořenovém .env
adresáři aplikace. Nastavte hodnoty proměnných prostředí s hodnotami získanými z procesu registrace aplikace následujícím způsobem:
-
AZURE_CLIENT_ID
→ hodnota ID aplikace. -
AZURE_TENANT_ID
→ hodnota ID tenanta. -
AZURE_CLIENT_SECRET
→ heslo nebo přihlašovací údaje vygenerované pro aplikaci.
AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_SECRET=Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6
Nakonec v spouštěcím kódu pro vaši aplikaci použijte knihovnu python-dotenv
ke čtení proměnných prostředí ze .env
souboru při spuštění.
from dotenv import load_dotenv
if ( os.environ['ENVIRONMENT'] == 'development'):
print("Loading environment variables from .env file")
load_dotenv(".env")
5. Implementace defaultAzureCredential ve vaší aplikaci
K ověřování klientských objektů sady Azure SDK v Azure by vaše aplikace měla používat DefaultAzureCredential
třídu z azure.identity
balíčku. V tomto scénáři DefaultAzureCredential
rozpozná proměnné AZURE_CLIENT_ID
AZURE_TENANT_ID
prostředí a nastaví a AZURE_CLIENT_SECRET
přečte tyto proměnné, aby získaly informace o instančním objektu aplikace pro připojení k Azure.
Začněte přidáním balíčku azure.identity do aplikace.
pip install azure-identity
V dalším kroku pro libovolný kód Pythonu, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK, budete chtít:
- Naimportujte třídu
DefaultAzureCredential
zazure.identity
modulu. - Vytvoření objektu
DefaultAzureCredential
-
DefaultAzureCredential
Předejte objekt konstruktoru klientského objektu sady Azure SDK.
Příklad je znázorněn v následujícím segmentu kódu.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)