Uwierzytelnianie aplikacji języka Python w usługach platformy Azure podczas programowania lokalnego przy użyciu kont deweloperów

Podczas tworzenia aplikacji w chmurze deweloperzy zazwyczaj debugują i testują aplikacje na lokalnej stacji roboczej. Gdy aplikacja jest uruchamiana na stacji roboczej dewelopera podczas programowania lokalnego, nadal musi uwierzytelniać się w dowolnych usługach platformy Azure używanych przez aplikację. W tym artykule opisano, jak używać poświadczeń platformy Azure dewelopera do uwierzytelniania aplikacji na platformie Azure podczas programowania lokalnego.

Diagram przedstawiający sposób, w jaki aplikacja w języku Python podczas programowania lokalnego używa poświadczeń deweloperów do nawiązywania połączenia z platformą Azure przez uzyskanie tych poświadczeń z zainstalowanych lokalnie narzędzi programistycznych.

Aby aplikacja uwierzytelniła się na platformie Azure podczas programowania lokalnego przy użyciu poświadczeń platformy Azure dewelopera, deweloper musi zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub interfejsu wiersza polecenia dewelopera platformy Azure. Zestaw Azure SDK dla języka Python może wykryć, że deweloper jest zalogowany z jednego z tych narzędzi, a następnie uzyskać niezbędne poświadczenia z pamięci podręcznej poświadczeń w celu uwierzytelnienia aplikacji na platformie Azure jako zalogowanego użytkownika.

To podejście jest najłatwiejsze do skonfigurowania dla zespołu deweloperów, ponieważ korzysta z istniejących kont platformy Azure deweloperów. Jednak konto dewelopera prawdopodobnie będzie mieć więcej uprawnień niż wymagane przez aplikację, dlatego przekroczenie uprawnień, z których aplikacja będzie działać w środowisku produkcyjnym. Alternatywnie można utworzyć jednostki usługi aplikacji do użycia podczas tworzenia lokalnego, które mogą być ograniczone tylko do dostępu wymaganego przez aplikację.

1 — Tworzenie grupy zabezpieczeń Microsoft Entra na potrzeby programowania lokalnego

Ponieważ prawie zawsze istnieje wielu deweloperów, którzy pracują nad aplikacją, zaleca się najpierw utworzenie grupy zabezpieczeń Firmy Microsoft Entra w celu hermetyzacji ról (uprawnień) wymaganych przez aplikację w lokalnych programach deweloperskich. Takie podejście oferuje następujące korzyści.

  • Każdy deweloper ma przypisane te same role, ponieważ role są przypisywane na poziomie grupy.
  • Jeśli dla aplikacji jest potrzebna nowa rola, należy ją dodać tylko do grupy Microsoft Entra dla aplikacji.
  • Jeśli nowy deweloper dołącza do zespołu, po prostu musi zostać dodany do właściwej grupy Firmy Microsoft Entra, aby uzyskać odpowiednie uprawnienia do pracy nad aplikacją.

Jeśli masz istniejącą grupę zabezpieczeń firmy Microsoft Entra dla zespołu deweloperów, możesz użyć tej grupy. W przeciwnym razie wykonaj następujące kroki, aby utworzyć grupę zabezpieczeń firmy Microsoft Entra.

Polecenie az ad group create służy do tworzenia grup w usłudze Microsoft Entra ID. Parametry --display-name i --main-nickname są wymagane. Nazwa nadana grupie powinna być oparta na nazwie aplikacji. Warto również uwzględnić frazę taką jak "local-dev" w nazwie grupy, aby wskazać cel grupy.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Skopiuj wartość id właściwości w danych wyjściowych polecenia . Jest to identyfikator obiektu dla grupy. Będzie ona potrzebna w kolejnych krokach. Możesz również użyć polecenia az ad group show , aby pobrać tę właściwość.

Aby dodać członków do grupy, potrzebny jest identyfikator obiektu użytkownika platformy Azure. Użyj listy az ad user list, aby wyświetlić listę dostępnych jednostek usługi. Polecenie --filter parametru akceptuje filtry stylu OData i może służyć do filtrowania listy w nazwie wyświetlanej użytkownika, jak pokazano. Parametr --query ogranicza dane wyjściowe do interesujących kolumn.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

Polecenie az ad group member add można następnie użyć do dodawania członków do grup.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Uwaga

Domyślnie tworzenie grup zabezpieczeń firmy Microsoft Entra jest ograniczone do niektórych ról uprzywilejowanych w katalogu. Jeśli nie możesz utworzyć grupy, skontaktuj się z administratorem katalogu. Jeśli nie możesz dodać członków do istniejącej grupy, skontaktuj się z właścicielem grupy lub administratorem katalogu. Aby dowiedzieć się więcej, zobacz Zarządzanie grupami i członkostwem w grupach firmy Microsoft.

2 — Przypisywanie ról do grupy Microsoft Entra

Następnie należy określić, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisać te role do aplikacji. W tym przykładzie role zostaną przypisane do grupy Microsoft Entra utworzonej w kroku 1. Role można przypisywać w zakresie zasobu, grupy zasobów lub subskrypcji. W tym przykładzie pokazano, jak przypisywać role w zakresie grupy zasobów, ponieważ większość aplikacji grupuje wszystkie zasoby platformy Azure w jedną grupę zasobów.

Jednostka usługi użytkownika, grupy lub aplikacji ma przypisaną rolę na platformie Azure przy użyciu polecenia az role assignment create . Możesz określić grupę z jej identyfikatorem obiektu.

az role assignment create --assignee {objectId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

Aby uzyskać nazwy ról, które można przypisać, użyj polecenia az role definition list .

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Aby na przykład zezwolić członkom grupy z identyfikatorem 00000000-0000-0000-0000-000000000000 obiektu odczytu, zapisu i usuwania do kontenerów obiektów blob usługi Azure Storage i danych we wszystkich kontach magazynu w grupie msdocs-python-sdk-auth-example w subskrypcji o identyfikatorze 11111111-1111-1111-1111-111111111111, należy przypisać rolę Współautor danych obiektu blob usługi Storage do grupy przy użyciu następującego polecenia.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Aby uzyskać informacje na temat przypisywania uprawnień na poziomie zasobu lub subskrypcji przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz artykuł Przypisywanie ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

3 — Logowanie się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell, interfejsu wiersza polecenia dla deweloperów platformy Azure lub w przeglądarce

Otwórz terminal na stacji roboczej dewelopera i zaloguj się do platformy Azure z poziomu interfejsu wiersza polecenia platformy Azure.

az login

4 — Implementowanie wartości domyślnejAzureCredential w aplikacji

Aby uwierzytelnić obiekty klienta zestawu Azure SDK na platformie Azure, aplikacja powinna używać DefaultAzureCredential klasy z azure.identity pakietu. W tym scenariuszu sekwencyjnie sprawdzi, DefaultAzureCredential czy deweloper zalogował się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub interfejsu wiersza polecenia dla deweloperów platformy Azure. Jeśli deweloper jest zalogowany na platformie Azure przy użyciu dowolnego z tych narzędzi, poświadczenia używane do logowania się do narzędzia będą używane przez aplikację do uwierzytelniania na platformie Azure.

Zacznij od dodania pakietu azure.identity do aplikacji.

pip install azure-identity

Następnie w przypadku dowolnego kodu w języku Python, który tworzy obiekt klienta zestawu Azure SDK w aplikacji, należy wykonać następujące czynności:

  1. Zaimportuj klasę DefaultAzureCredential z modułu azure.identity .
  2. Utwórz DefaultAzureCredential obiekt.
  3. Przekaż obiekt do konstruktora DefaultAzureCredential obiektu klienta zestawu Azure SDK.

Przykład tych kroków przedstawiono w następującym segmencie kodu.

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)