Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje hostowane poza platformą Azure (na przykład lokalnie lub w centrum danych innej firmy) powinny używać jednostki usługi aplikacji do uwierzytelniania na platformie Azure podczas uzyskiwania dostępu do zasobów platformy Azure. Obiekty jednostki usługi aplikacji są tworzone przy użyciu procesu rejestracji aplikacji na platformie Azure. Utworzenie nowej jednostki usługi aplikacji powoduje wygenerowanie identyfikatora klienta i tajnego klucza klienta dla aplikacji. Identyfikator klienta, klucz tajny klienta i identyfikator dzierżawy są przechowywane w zmiennych środowiskowych, które mają być używane przez zestaw Azure SDK dla języka Python w celu uwierzytelniania aplikacji na platformie Azure w czasie wykonywania.
Dla każdego środowiska hostowanego w aplikacji należy utworzyć inną rejestrację aplikacji. Utworzenie innej rejestracji aplikacji umożliwia skonfigurowanie uprawnień określonych zasobów środowiska dla każdej jednostki usługi i gwarantuje, że aplikacja wdrożona w jednym środowisku nie rozmawia z zasobami platformy Azure, które są częścią innego środowiska.
Rejestrowanie aplikacji na platformie Azure
Aplikację można zarejestrować na platformie Azure przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
APP_NAME=<app-name>
az ad sp create-for-rbac --name $APP_NAME
Dane wyjściowe polecenia są podobne do poniższych. Zanotuj te wartości lub pozostaw to okno otwarte, ponieważ te wartości będą potrzebne w następnych krokach i nie będą mogły ponownie wyświetlić wartości hasła (klucza tajnego klienta).
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
Następnie należy pobrać appID wartość i zapisać ją w zmiennej. Ta wartość służy do ustawiania zmiennych środowiskowych w lokalnym środowisku projektowym, aby zestaw Azure SDK dla języka Python mógł uwierzytelniać się na platformie Azure przy użyciu jednostki usługi.
APP_ID=$(az ad sp create-for-rbac \
--name $APP_NAME --query appId --output tsv)
Przypisz role do podmiotu zabezpieczeń aplikacji
Następnie należy określić, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisać te role do aplikacji. Role mogą być przypisywane w zakresie zasobu, grupy zasobów lub subskrypcji. W tym przykładzie pokazano, jak przypisać role dla jednostki usługi w zakresie grupy zasobów, ponieważ większość aplikacji grupuje wszystkie zasoby platformy Azure w jedną grupę zasobów.
Zasada usługi ma przypisaną rolę w Azure za pomocą polecenia az role assignment create.
RESOURCE_GROUP_NAME=<resource-group-name>
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ROLE_NAME=<role-name>
az role assignment create \
--assignee "$APP_ID" \
--scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \
--role "$ROLE_NAME"
![!UWAGA] Aby zapobiec traktowaniu przez Git Bash "/subscriptions/..." jako ścieżki pliku, dopełnij ciąg ./ parametrem
scopei użyj podwójnych cudzysłowów wokół całego ciągu.
Aby uzyskać nazwy ról, do których można przypisać główną usługę, 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ć jednostce usługi z identyfikatorem appId 00001111-aaaa-2222-bbbb-3333cccc4444 na odczyt, zapis i usuwanie dostępu do kontenerów obiektów blob oraz danych we wszystkich kontach magazynu w grupie zasobów msdocs-python-sdk-auth-example w subskrypcji o identyfikatorze aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, należy przypisać tę jednostkę do roli Współautor danych obiektu blob dla zasobów Azure Storage przy użyciu następującego polecenia.
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--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.
Konfigurowanie zmiennych środowiskowych dla aplikacji
Należy ustawić zmienne środowiskowe AZURE_CLIENT_ID, AZURE_TENANT_ID i AZURE_CLIENT_SECRET dla procesu, który uruchamia aplikację w języku Python, aby poświadczenia głównego obiektu usługi były dostępne dla aplikacji w czasie jej działania. Obiekt DefaultAzureCredential szuka informacji o głównym obiekcie usługi w tych zmiennych środowiskowych.
W przypadku używania narzędzia Gunicorn do uruchamiania aplikacji internetowych języka Python w środowisku serwera z systemem UNIX zmienne środowiskowe dla aplikacji można określić przy użyciu EnvironmentFile dyrektywy w pliku gunicorn.server. Zobacz poniższy przykład.
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app
[Install]
WantedBy=multi-user.target
Plik określony w EnvironmentFile dyrektywie powinien zawierać listę zmiennych środowiskowych z ich wartościami w następujący sposób.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
Wdrażanie DefaultAzureCredential w aplikacji
Aby uwierzytelnić obiekty klienta zestawu Azure SDK na platformie Azure, aplikacja powinna używać DefaultAzureCredential klasy z azure.identity pakietu.
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ę
DefaultAzureCredentialz modułuazure.identity. - Utwórz
DefaultAzureCredentialobiekt. - Przekaż obiekt
DefaultAzureCredentialdo konstruktora obiektu klienta Azure SDK.
Przykład tego podejścia 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)
W tym przykładzie, gdy kod tworzy wystąpienie obiektu DefaultAzureCredential, DefaultAzureCredential odczytuje zmienne środowiskowe AZURE_TENANT_ID, AZURE_CLIENT_ID i AZURE_CLIENT_SECRET zawierające informacje o głównej aplikacji usługi, aby połączyć się z platformą Azure.