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

Gdy aplikacja musi uzyskać dostęp do zasobu platformy Azure, takiego jak Azure Storage, Azure Key Vault lub Azure Cognitive Services, aplikacja musi zostać uwierzytelniona na platformie Azure. To wymaganie dotyczy wszystkich aplikacji, zarówno wdrożonych na platformie Azure, wdrożonych lokalnie, jak i w ramach programowania na lokalnej stacji roboczej deweloperów. 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 parametrów połączenia dla aplikacji podczas uwierzytelniania w zasobach platformy Azure. Zestaw Azure SDK dla języka Python udostępnia klasy obsługujące 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 opracowywania 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 opracowywania 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 omawiana 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 omawiana w sekcji Uwierzytelnianie w środowiskach serwera.

Wartość domyślnaAzureCredential

Klasa DefaultAzureCredential udostępniona 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 jest preferowane w przypadku ręcznego DefaultAzureCredential kodowania logiki warunkowej lub flag funkcji do korzystania z 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żywać parametrów połączenia podczas tworzenia aplikacji dla platformy Azure. Uwierzytelnianie oparte na tokenach zapewnia następujące korzyści wynikające z uwierzytelniania za pomocą parametrów 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 udziela pełnych praw do zasobu platformy Azure.
  • Każda osoba lub dowolna aplikacja z parametry połączenia może nawiązać połączenie 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 ułatwiają korzystanie z uwierzytelniania opartego na tokenach jako parametry połączenia.

Ogranicz użycie parametrów 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 dla każdego środowiska, 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 działa aplikacja:

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 Django aplikacji internetowej hostowanej w Azure App Service zostanie przypisana tożsamość zarządzana. Tożsamość zarządzana przypisana do aplikacji będzie następnie używana do uwierzytelniania aplikacji w innych usługach platformy Azure.

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 Django aplikację internetową hostowaną lokalnie, która korzysta z Azure Blob Storage. Należy utworzyć jednostkę usługi aplikacji dla aplikacji przy użyciu procesu rejestracji aplikacji. Element AZURE_CLIENT_ID, AZURE_TENANT_IDi AZURE_CLIENT_SECRET wszystkie 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 opracowywania lokalnego

Gdy aplikacja działa na stacji roboczej dewelopera podczas tworzenia 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 opracowywania 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 tworzenia lokalnego. Dzięki temu aplikacja ma dostęp tylko do określonych zasobów, których potrzebuje, 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ą.

Uwierzytelnianie aplikacji na platformie Azure przy użyciu poświadczeń dewelopera podczas programowania lokalnego. W tej metodzie deweloper musi zalogować się do platformy Azure z rozszerzenia Azure Tools dla Visual Studio Code, interfejsu wiersza polecenia platformy Azure lub Azure PowerShell 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 konta platformy Azure z poziomu Visual Studio Code lub interfejsu wiersza polecenia platformy Azure. 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 dokładnie replikuje uprawnień, z których będzie działać w środowisku produkcyjnym.

Użyj wartości domyślnejAzureCredential w aplikacji

Aby użyć polecenia 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ć wystąpienie DefaultAzureCredential 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 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)

DefaultAzureCredential Obiekt automatycznie wykrywa mechanizm uwierzytelniania skonfigurowany dla aplikacji i uzyskuje niezbędne tokeny 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 podczas 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ń, znajduje się 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
Jednostka usługi aplikacji Obiekt DefaultAzureCredential odczytuje zestaw zmiennych środowiskowych, aby określić, czy jednostka usługi aplikacji (użytkownik aplikacji) została ustawiona dla aplikacji. Jeśli tak, użyj tych wartości do DefaultAzureCredential uwierzytelnienia aplikacji na platformie Azure.

Ta metoda jest najczęściej używana w środowiskach serwera, ale można jej również używać podczas tworzenia lokalnie.
Tożsamość zarządzana Jeśli aplikacja zostanie wdrożona 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 omówiono 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 Azure App Service, Azure Functions lub Azure Virtual Machines.
Visual Studio Code Jeśli uwierzytelniono się na platformie Azure przy użyciu wtyczki Visual Studio Code konta platformy Azure, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tego samego konta.
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 Azure PowerShell, DefaultAzureCredential uwierzytelnia aplikację na platformie Azure przy użyciu tego samego konta.
Interaktywne Jeśli to ustawienie jest włączone, DefaultAzureCredential interakcyjnie uwierzytelnia Cię za pośrednictwem domyślnej przeglądarki bieżącego systemu. Domyślnie ta opcja jest wyłączona.