Udostępnij za pośrednictwem


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 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. Biblioteka klienta tożsamości platformy Azure dla języka Python udostępnia klasy, które obsługują uwierzytelnianie oparte na tokenach i umożliwiają aplikacjom bezproblemowe uwierzytelnianie 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.

Diagram przedstawiający zalecane strategie uwierzytelniania oparte na tokenach dla aplikacji w zależności od tego, gdzie jest uruchomiona.

  • 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 bibliotekę klienta tożsamości platformy Azure 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 uzyskuje tokeny microsoft Entra i zarządza nimi. Dzięki temu użycie uwierzytelniania opartego na tokenach jest łatwe 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 bibliotece klienta tożsamości platformy Azure są zawsze preferowane podczas uwierzytelniania w zasobach platformy Azure.

Uwierzytelnianie w środowiskach serwera

W przypadku 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 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

DefaultAzureCredential to uporządkowana sekwencja mechanizmów uwierzytelniania w usłudze Microsoft Entra ID. Każdy mechanizm uwierzytelniania to klasa, która implementuje protokół TokenCredential i jest nazywana poświadczeniami. W czasie wykonywania DefaultAzureCredential próbuje uwierzytelnić się przy użyciu pierwszego poświadczenia. Jeśli to poświadczenie nie może uzyskać tokenu dostępu, zostanie podjęta próba następnego poświadczenia w sekwencji itd., dopóki token dostępu nie zostanie pomyślnie uzyskany. W ten sposób aplikacja może używać różnych poświadczeń w różnych środowiskach bez konieczności pisania kodu specyficznego dla środowiska.

Aby użyć DefaultAzureCredential w aplikacji w języku Python, dodaj pakiet azure-identity do aplikacji.

pip install azure-identity

Dostęp do usług platformy Azure jest uzyskiwany przy użyciu wyspecjalizowanych klas klientów z różnych bibliotek klienckich zestawu Azure SDK. 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)

Po uruchomieniu poprzedniego kodu na lokalnej stacji roboczej programistycznej w zmiennych środowiskowych dla jednostki usługi aplikacji lub w lokalnie zainstalowanych narzędziach deweloperskich, takich jak interfejs wiersza polecenia platformy Azure, dla zestawu poświadczeń dewelopera. Jedną z metod można użyć do uwierzytelniania aplikacji w zasobach platformy Azure podczas programowania lokalnego.

Po wdrożeniu na platformie Azure ten sam kod może również uwierzytelniać aplikację w zasobach platformy Azure. DefaultAzureCredential program może automatycznie pobierać ustawienia środowiska i konfiguracje tożsamości zarządzanej w celu automatycznego uwierzytelniania w usługach platformy Azure.