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.
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 bbbbbbbb-1111-2222-3333-cccccccccccc
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 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
, 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 bbbbbbbb-1111-2222-3333-cccccccccccc \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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
- Interfejs wiersza polecenia platformy Azure
- Azure PowerShell
- Interfejs wiersza polecenia dla deweloperów platformy Azure
- Przeglądarka interaktywna
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:
- Zaimportuj klasę
DefaultAzureCredential
z modułuazure.identity
. - Utwórz
DefaultAzureCredential
obiekt. - 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)