Uwierzytelnianie aplikacji języka Python w usługach platformy Azure przy użyciu zestawu Azure SDK dla języka Python

Jeśli aplikacja musi uzyskać dostęp do zasobu platformy Azure, takiego jak Azure Storage, Azure Key Vault lub usługi Azure AI, aplikacja musi zostać uwierzytelniona na platformie Azure. To wymaganie dotyczy wszystkich aplikacji, niezależnie od tego, czy są wdrażane na platformie Azure, wdrażane lokalnie, czy w ramach programowania na lokalnej stacji roboczej dewelopera. W tym artykule opisano zalecane podejścia do uwierzytelniania aplikacji na platformie Azure podczas korzystania z zestawu Azure SDK dla języka Python.

Użyj uwierzytelniania opartego na tokenach, a nie parametry połączenia dla aplikacji podczas uwierzytelniania w zasobach platformy Azure. Zestaw Azure SDK dla języka Python udostępnia klasy, które obsługują uwierzytelnianie oparte na tokenach. Aplikacje mogą bezproblemowo uwierzytelniać się w zasobach platformy Azure niezależnie od tego, czy aplikacja jest w środowisku lokalnym, wdrożona na platformie Azure, czy wdrożona na serwerze lokalnym.

Określony typ uwierzytelniania opartego na tokenach używany przez aplikację do uwierzytelniania w zasobach platformy Azure zależy od tego, gdzie jest uruchamiana aplikacja. Typy uwierzytelniania opartego na tokenach przedstawiono na poniższym diagramie.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • Gdy deweloper uruchamia aplikację podczas programowania lokalnego: aplikacja uwierzytelnia się na platformie Azure przy użyciu jednostki usługi aplikacji na potrzeby lokalnego programowania lub poświadczeń platformy Azure dewelopera. Te opcje zostały omówione w sekcji Uwierzytelnianie podczas programowania lokalnego.
  • Gdy aplikacja jest hostowana na platformie Azure: aplikacja uwierzytelnia się w zasobach platformy Azure przy użyciu tożsamości zarządzanej. Ta opcja jest omówiona w sekcji Uwierzytelnianie w środowiskach serwera.
  • Gdy aplikacja jest hostowana i wdrażana lokalnie: aplikacja uwierzytelnia się w zasobach platformy Azure przy użyciu jednostki usługi aplikacji. Ta opcja jest omówiona w sekcji Uwierzytelnianie w środowiskach serwera.

Wartość domyślnaAzureCredential

Klasa DefaultAzureCredential udostępniana przez zestaw Azure SDK umożliwia aplikacjom korzystanie z różnych metod uwierzytelniania w zależności od środowiska, w którym są uruchamiane. W ten sposób aplikacje mogą być promowane z lokalnego programowania do środowisk testowych do środowiska produkcyjnego bez zmian kodu.

Należy skonfigurować odpowiednią metodę uwierzytelniania dla każdego środowiska i DefaultAzureCredential automatycznie wykrywać i używać tej metody uwierzytelniania. Użycie funkcji jest preferowane w przypadku ręcznego DefaultAzureCredential kodowania logiki warunkowej lub flag funkcji do używania różnych metod uwierzytelniania w różnych środowiskach.

Szczegółowe informacje o korzystaniu z DefaultAzureCredential klasy zostały omówione w sekcji Use DefaultAzureCredential in an application (Użyj wartości domyślnejAzureCredential w aplikacji).

Zalety uwierzytelniania opartego na tokenach

Użyj uwierzytelniania opartego na tokenach zamiast używania parametry połączenia podczas tworzenia aplikacji dla platformy Azure. Uwierzytelnianie oparte na tokenach oferuje następujące korzyści wynikające z uwierzytelniania za pomocą parametry połączenia:

  • Metody uwierzytelniania oparte na tokenach opisane w tym artykule umożliwiają ustanowienie określonych uprawnień wymaganych przez aplikację w zasobie platformy Azure. Ta praktyka jest zgodna z zasadą najniższych uprawnień. Natomiast parametry połączenia przyznaje pełne prawa do zasobu platformy Azure.
  • Każda osoba lub dowolna aplikacja z parametry połączenia może połączyć się z zasobem platformy Azure, ale metody uwierzytelniania oparte na tokenach mają dostęp do zasobu tylko do aplikacji przeznaczonych do uzyskania dostępu do zasobu.
  • W przypadku tożsamości zarządzanej nie ma wpisu tajnego aplikacji do przechowywania. Aplikacja jest bezpieczniejsza, ponieważ nie ma parametry połączenia ani wpisu tajnego aplikacji, który może zostać naruszony.
  • Pakiet azure.identity w zestawie Azure SDK zarządza tokenami za kulisami. Tokeny zarządzane umożliwiają używanie uwierzytelniania opartego na tokenach jako łatwego w użyciu jako parametry połączenia.

Ogranicz użycie parametry połączenia do początkowych aplikacji weryfikacji koncepcji lub prototypów programistycznych, które nie uzyskują dostępu do danych produkcyjnych ani poufnych. W przeciwnym razie klasy uwierzytelniania oparte na tokenach dostępne w zestawie Azure SDK są zawsze preferowane podczas uwierzytelniania w zasobach platformy Azure.

Uwierzytelnianie w środowiskach serwera

Podczas hostowania w środowisku serwera każda aplikacja ma przypisaną unikatową tożsamość aplikacji na środowisko, w którym działa aplikacja. Na platformie Azure tożsamość aplikacji jest reprezentowana przez jednostkę usługi. Ten specjalny typ podmiotu zabezpieczeń identyfikuje i uwierzytelnia aplikacje na platformie Azure. Typ jednostki usługi używanej dla aplikacji zależy od tego, gdzie aplikacja jest uruchomiona:

Metoda uwierzytelniania opis
Aplikacje hostowane na platformie Azure Aplikacje hostowane na platformie Azure powinny używać jednostki usługi tożsamości zarządzanej. Tożsamości zarządzane są przeznaczone do reprezentowania tożsamości aplikacji hostowanej na platformie Azure i mogą być używane tylko z aplikacjami hostowanymi na platformie Azure.

Na przykład aplikacja internetowa Django hostowana w usłudze aplikacja systemu Azure ma przypisaną tożsamość zarządzaną. Tożsamość zarządzana przypisana do aplikacji będzie następnie używana do uwierzytelniania aplikacji w innych usługach platformy Azure.

Aplikacje działające w usłudze Azure Kubernetes Service (AKS) mogą używać poświadczeń tożsamości obciążenia. To poświadczenie jest oparte na tożsamości zarządzanej, która ma relację zaufania z kontem usługi AKS.
,
Aplikacje hostowane poza platformą Azure
(na przykład aplikacje lokalne)
Aplikacje hostowane poza platformą Azure (na przykład aplikacje lokalne), które muszą łączyć się z usługami platformy Azure, powinny używać jednostki usługi aplikacji. Jednostka usługi aplikacji reprezentuje tożsamość aplikacji na platformie Azure i jest tworzona za pośrednictwem procesu rejestracji aplikacji.

Rozważmy na przykład aplikację internetową Django hostowaną lokalnie, która korzysta z usługi Azure Blob Storage. Należy utworzyć jednostkę usługi aplikacji dla aplikacji przy użyciu procesu rejestracji aplikacji. Wszystkie AZURE_CLIENT_IDwartości , AZURE_TENANT_IDi AZURE_CLIENT_SECRET będą przechowywane jako zmienne środowiskowe, które mają być odczytywane przez aplikację w czasie wykonywania i umożliwiają aplikacji uwierzytelnianie na platformie Azure przy użyciu jednostki usługi aplikacji.

Uwierzytelnianie podczas programowania lokalnego

Gdy aplikacja działa na stacji roboczej dewelopera podczas programowania lokalnego, nadal musi uwierzytelniać się w dowolnych usługach platformy Azure używanych przez aplikację. Istnieją dwie główne strategie uwierzytelniania aplikacji na platformie Azure podczas programowania lokalnego:

Metoda uwierzytelniania opis
Utwórz obiekty jednostki usługi dedykowanej aplikacji, które mają być używane podczas tworzenia lokalnego. W tej metodzie obiekty jednostki usługi dedykowanej aplikacji są konfigurowane przy użyciu procesu rejestracji aplikacji do użycia podczas tworzenia lokalnego. Tożsamość jednostki usługi jest następnie przechowywana jako zmienne środowiskowe, które mają być dostępne przez aplikację podczas jej uruchamiania w środowisku lokalnym.

Ta metoda umożliwia przypisanie określonych uprawnień zasobów wymaganych przez aplikację do obiektów jednostki usługi używanych przez deweloperów podczas programowania lokalnego. Dzięki temu aplikacja ma dostęp tylko do określonych potrzebnych zasobów i replikuje uprawnienia, które aplikacja będzie miała w środowisku produkcyjnym.

Wadą tego podejścia jest potrzeba utworzenia oddzielnych obiektów jednostki usługi dla każdego dewelopera, który pracuje nad aplikacją.

Uwierzytelnij aplikację na platformie Azure przy użyciu poświadczeń dewelopera podczas programowania lokalnego. W tej metodzie deweloper musi zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub interfejsu wiersza polecenia dla deweloperów platformy Azure na lokalnej stacji roboczej. Następnie aplikacja może uzyskiwać dostęp do poświadczeń dewelopera z magazynu poświadczeń i używać tych poświadczeń do uzyskiwania dostępu do zasobów platformy Azure z aplikacji.

Ta metoda ma zaletę łatwiejszej konfiguracji, ponieważ deweloper musi zalogować się tylko do swojego konta platformy Azure za pomocą jednego z wyżej wymienionych narzędzi deweloperskich. Wadą tego podejścia jest to, że konto dewelopera prawdopodobnie ma więcej uprawnień niż wymagane przez aplikację. W związku z tym aplikacja nie replikuje dokładnie uprawnień, z których będzie działać w środowisku produkcyjnym.

Używanie wartości defaultAzureCredential w aplikacji

Aby użyć wartości DefaultAzureCredential w aplikacji języka Python, dodaj pakiet azure.identity do aplikacji.

pip install azure-identity

W poniższym przykładzie kodu pokazano, jak utworzyć DefaultAzureCredential wystąpienie obiektu i użyć go z klasą klienta zestawu Azure SDK. W tym przypadku jest BlobServiceClient to obiekt używany do uzyskiwania dostępu do usługi Azure Blob Storage.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

Obiekt DefaultAzureCredential automatycznie wykrywa mechanizm uwierzytelniania skonfigurowany dla aplikacji i uzyskuje tokeny niezbędne do uwierzytelniania aplikacji na platformie Azure. Jeśli aplikacja korzysta z więcej niż jednego klienta zestawu SDK, możesz użyć tego samego obiektu poświadczeń z każdym obiektem klienta zestawu SDK.

Sekwencja metod uwierzytelniania w przypadku używania metody DefaultAzureCredential

DefaultAzureCredential Wewnętrznie implementuje łańcuch dostawców poświadczeń na potrzeby uwierzytelniania aplikacji w zasobach platformy Azure. Każdy dostawca poświadczeń może wykryć, czy poświadczenia tego typu są skonfigurowane dla aplikacji. Obiekt DefaultAzureCredential sekwencyjnie sprawdza każdego dostawcę w kolejności i używa poświadczeń od pierwszego dostawcy, który ma skonfigurowane poświadczenia.

Kolejność, w której DefaultAzureCredential szuka poświadczeń, jest pokazana na poniższym diagramie i tabeli:

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

Typ poświadczeń opis
Środowisko Obiekt DefaultAzureCredential odczytuje zestaw zmiennych środowiskowych w celu określenia, czy dla aplikacji została ustawiona jednostka usługi aplikacji (użytkownik aplikacji). Jeśli tak, DefaultAzureCredential użyj tych wartości do uwierzytelniania aplikacji na platformie Azure.

Ta metoda jest najczęściej używana w środowiskach serwera, ale można jej również używać podczas opracowywania lokalnie.
Tożsamość obciążenia Jeśli aplikacja jest wdrażana w usłudze Azure Kubernetes Service (AKS) z włączoną tożsamością zarządzaną, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tej tożsamości zarządzanej. Tożsamość obciążenia reprezentuje relację zaufania między tożsamością zarządzaną przypisaną przez użytkownika a kontem usługi AKS. Uwierzytelnianie przy użyciu tożsamości obciążenia zostało omówione w artykule AKS Use Tożsamość obciążeń Microsoft Entra with Azure Kubernetes Service (Używanie Tożsamość obciążeń Microsoft Entra z usługą Azure Kubernetes Service).
Tożsamość zarządzana Jeśli aplikacja jest wdrażana na hoście platformy Azure z włączoną tożsamością zarządzaną, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tej tożsamości zarządzanej. Uwierzytelnianie przy użyciu tożsamości zarządzanej zostało omówione w sekcji Uwierzytelnianie w środowiskach serwera.

Ta metoda jest dostępna tylko wtedy, gdy aplikacja jest hostowana na platformie Azure przy użyciu usługi, takiej jak aplikacja systemu Azure Service, Azure Functions lub Azure Virtual Machines.
Interfejs wiersza polecenia platformy Azure Jeśli uwierzytelniono się na platformie Azure przy użyciu az login polecenia w interfejsie wiersza polecenia platformy Azure, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tego samego konta.
Azure PowerShell Jeśli uwierzytelniono się na platformie Azure przy użyciu Connect-AzAccount polecenia cmdlet z poziomu programu Azure PowerShell, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tego samego konta.
Azure Developer CLI Jeśli uwierzytelniono się na platformie Azure przy użyciu azd auth login polecenia w interfejsie wiersza polecenia dla deweloperów platformy Azure, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tego samego konta.
Interakcyjny Jeśli ta opcja jest włączona, DefaultAzureCredential interakcyjnie uwierzytelnia Cię za pośrednictwem domyślnej przeglądarki bieżącego systemu. Domyślnie ta opcja jest wyłączona.

Uwaga

Ze względu na znany problem został VisualStudioCodeCredential usunięty z łańcucha tokenów DefaultAzureCredential . Po rozwiązaniu problemu w przyszłej wersji ta zmiana zostanie przywrócona. Aby uzyskać więcej informacji, zobacz Biblioteka klienta usługi Azure Identity dla języka Python.