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ývojáři často potřebují při vytváření cloudových aplikací 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.
Služby vyhrazené aplikace pro místní vývoj se řídí principem nejnižších oprávnění. Udělují přístup jenom k prostředkům Azure, které aplikace potřebuje během vývoje. Tento omezený přístup snižuje riziko neúmyslného dosažení jiných prostředků. Pomáhá také zabránit chybám souvisejícím s oprávněními při přesunu do produkčního prostředí, kdy širší oprávnění můžou způsobovat problémy.
Při registraci aplikací pro místní vývoj v Azure:
- Vytvořte pro každého vývojáře samostatné registrace aplikací: Tento přístup poskytuje každému vývojáři vlastního služebního uživatele, čímž se zabrání nutnosti sdílet přihlašovací údaje a umožňuje podrobnější řízení přístupu.
- Vytvoření samostatných registrací aplikací pro každou aplikaci: Tento přístup zajišťuje, že každá aplikace má jenom potřebná oprávnění a snižuje potenciální prostor pro útoky.
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.
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 a vygeneruje hlavní objekt služby pro danou 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. Při spuštění aplikace načte tento soubor .env a nastaví proměnné prostředí, které sada Azure SDK pro Python používá k autentizaci 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)
Vytvoření skupiny zabezpečení Microsoft Entra pro místní vývoj
Vzhledem k tomu, že na stejné aplikaci obvykle pracuje více vývojářů, je lepší spravovat oprávnění prostřednictvím skupiny zabezpečení Microsoft Entra. Vytvořte skupinu zabezpečení, která obsahuje role potřebné pro místní vývoj aplikace, namísto přiřazování rolí jednotlivě k služebním účtům každého vývojáře. Použití skupiny zabezpečení 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 omezuje sloupce jenom na sloupce, které vás zajímají.
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.
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ů.
az role assignment create Pomocí příkazu přiřaďte roli uživateli, skupině nebo instančnímu objektu aplikace. 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.
Nastavení proměnných místního vývojového prostředí
Objekt DefaultAzureCredential vyhledá informace o hlavním uživateli služby v sadě proměnných prostředí během spuštění. Vzhledem k tomu, že většina vývojářů pracuje na více aplikacích, použijte balíček jako python-dotenv pro přístup k prostředí ze souboru .env uloženého v adresáři aplikace během vývoje. Toto nastavení definuje proměnné prostředí tak, aby je k ověření v Azure mohly používat jenom 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")
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 zjistí, že proměnné prostředí AZURE_CLIENT_ID, AZURE_TENANT_ID a AZURE_CLIENT_SECRET jsou nastaveny, a načte tyto proměnné, aby získal informace o aplikačním service principal pro připojení k Azure.
Začněte přidáním balíčku azure.identity do aplikace.
pip install azure-identity
Dále pro libovolný kód Pythonu, který ve vaší aplikaci vytvoří objekt klienta sady Azure SDK:
- Naimportujte třídu
DefaultAzureCredentialzazure.identitymodulu. - Vytvoření objektu
DefaultAzureCredential -
DefaultAzureCredentialPř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)