Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika dla kontenera lub obiektu blob przy użyciu języka Python
Sygnatura dostępu współdzielonego (SAS) umożliwia udzielanie ograniczonego dostępu do kontenerów i obiektów blob na koncie magazynu. Podczas tworzenia sygnatury dostępu współdzielonego określasz jego ograniczenia, w tym zasoby usługi Azure Storage, do których może uzyskiwać dostęp klient, jakie uprawnienia mają w tych zasobach i jak długo sygnatura dostępu współdzielonego jest prawidłowa.
Każda sygnatura dostępu współdzielonego jest podpisana przy użyciu klucza. Sygnaturę dostępu współdzielonego można podpisać na jeden z dwóch sposobów:
- Za pomocą klucza utworzonego przy użyciu poświadczeń firmy Microsoft Entra. Sygnatura dostępu współdzielonego podpisana przy użyciu poświadczeń usługi Microsoft Entra to sygnatura dostępu współdzielonego delegowania użytkownika. Klient, który tworzy sygnaturę dostępu współdzielonego delegowania użytkownika, musi mieć przypisaną rolę RBAC platformy Azure obejmującą akcję Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika.
- Przy użyciu klucza konta magazynu. Sygnatura dostępu współdzielonego usługi i sygnatura dostępu współdzielonego konta są podpisane przy użyciu klucza konta magazynu. Klient tworzący sygnaturę dostępu współdzielonego usługi musi mieć bezpośredni dostęp do klucza konta lub mieć przypisane uprawnienie Microsoft.Storage/storageAccounts/listkeys/action . Aby dowiedzieć się więcej, zobacz Tworzenie sygnatury dostępu współdzielonego usługi lub Tworzenie sygnatury dostępu współdzielonego konta.
Uwaga
Sygnatura dostępu współdzielonego delegowania użytkownika zapewnia doskonałe zabezpieczenia sygnatury dostępu współdzielonego podpisanej przy użyciu klucza konta magazynu. Firma Microsoft zaleca używanie sygnatury dostępu współdzielonego delegowania użytkowników, jeśli jest to możliwe. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do danych za pomocą sygnatur dostępu współdzielonego (SAS).
W tym artykule pokazano, jak za pomocą poświadczeń firmy Microsoft utworzyć sygnaturę dostępu współdzielonego delegowania użytkownika dla kontenera lub obiektu blob przy użyciu biblioteki klienta usługi Azure Storage dla języka Python.
Informacje o sygnaturze dostępu współdzielonego delegowania użytkownika
Token SAS na potrzeby dostępu do kontenera lub obiektu blob może być zabezpieczony przy użyciu poświadczeń microsoft Entra lub klucza konta. Sygnatura dostępu współdzielonego zabezpieczona przy użyciu poświadczeń entra firmy Microsoft jest nazywana sygnaturą dostępu współdzielonego delegowania użytkownika, ponieważ token OAuth 2.0 używany do podpisywania sygnatury dostępu współdzielonego jest żądany w imieniu użytkownika.
Firma Microsoft zaleca korzystanie z poświadczeń firmy Microsoft, jeśli jest to możliwe jako najlepsze rozwiązanie w zakresie zabezpieczeń, zamiast używać klucza konta, co może być łatwiejsze w przypadku naruszenia zabezpieczeń. Jeśli projekt aplikacji wymaga sygnatur dostępu współdzielonego, użyj poświadczeń firmy Microsoft Entra, aby utworzyć sygnaturę dostępu współdzielonego delegowania użytkownika w celu zapewnienia najwyższej jakości zabezpieczeń. Aby uzyskać więcej informacji na temat sygnatury dostępu współdzielonego delegowania użytkownika, zobacz Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika.
Uwaga
Każdy klient, który posiada prawidłową sygnaturę dostępu współdzielonego, może uzyskać dostęp do danych na koncie magazynu zgodnie z zezwoleniem na ten sygnaturę dostępu współdzielonego. Ważne jest, aby chronić sygnaturę dostępu współdzielonego przed złośliwym lub niezamierzonym użyciem. Użyj uznania w dystrybucji sygnatury dostępu współdzielonego i zaplanuj odwołanie naruszonej sygnatury dostępu współdzielonego.
Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Przypisywanie ról platformy Azure w celu uzyskania dostępu do danych
Gdy podmiot zabezpieczeń firmy Microsoft Entra próbuje uzyskać dostęp do danych, podmiot zabezpieczeń musi mieć uprawnienia do zasobu. Niezależnie od tego, czy podmiot zabezpieczeń jest tożsamością zarządzaną na platformie Azure, czy kontem użytkownika Microsoft Entra uruchomionym kodem w środowisku deweloperów, podmiot zabezpieczeń musi mieć przypisaną rolę platformy Azure, która przyznaje dostęp do danych. Aby uzyskać informacje na temat przypisywania uprawnień za pośrednictwem kontroli dostępu opartej na rolach platformy Azure, zobacz Przypisywanie roli platformy Azure w celu uzyskania dostępu do danych obiektów blob.
konfigurowanie projektu
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj następujące pakiety przy użyciu polecenia pip install
:
pip install azure-storage-blob azure-identity
Konfigurowanie kodu aplikacji
Dodaj następujące import
dyrektywy:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
ContainerClient,
BlobClient,
BlobSasPermissions,
ContainerSasPermissions,
UserDelegationKey,
generate_container_sas,
generate_blob_sas
)
Uzyskiwanie uwierzytelnionego poświadczenia tokenu
Aby uzyskać poświadczenia tokenu, za pomocą którego kod może autoryzować żądania do usługi Blob Storage, utwórz wystąpienie klasy DefaultAzureCredential . Aby uzyskać więcej informacji na temat używania klasy DefaultAzureCredential do autoryzowania tożsamości zarządzanej w celu uzyskania dostępu do usługi Blob Storage, zobacz Biblioteka klienta tożsamości platformy Azure dla języka Python.
Poniższy fragment kodu pokazuje, jak uzyskać poświadczenia uwierzytelnionego tokenu i użyć go do utworzenia klienta usługi dla usługi Blob Storage:
# Construct the blob endpoint from the account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
#Create a BlobServiceClient object using DefaultAzureCredential
blob_service_client = BlobServiceClient(account_url, credential=DefaultAzureCredential())
Aby dowiedzieć się więcej na temat autoryzowania dostępu do usługi Blob Storage z aplikacji przy użyciu zestawu SDK języka Python, zobacz Uwierzytelnianie aplikacji języka Python w usługach platformy Azure.
Pobieranie klucza delegowania użytkownika
Każda sygnatura dostępu współdzielonego jest podpisana przy użyciu klucza. Aby utworzyć sygnaturę dostępu współdzielonego delegowania użytkownika, należy najpierw zażądać klucza delegowania użytkownika, który jest następnie używany do podpisywania sygnatury dostępu współdzielonego. Klucz delegowania użytkownika jest analogiczny do klucza konta używanego do podpisywania sygnatury dostępu współdzielonego usługi lub sygnatury dostępu współdzielonego konta, z tą różnicą, że opiera się na poświadczeniach firmy Microsoft Entra. Gdy klient żąda klucza delegowania użytkownika przy użyciu tokenu OAuth 2.0, usługa Blob Storage zwraca klucz delegowania użytkownika w imieniu użytkownika.
Po utworzeniu klucza delegowania użytkownika możesz użyć tego klucza, aby utworzyć dowolną liczbę sygnatur dostępu współdzielonego delegowania użytkownika w okresie istnienia klucza. Klucz delegowania użytkownika jest niezależny od tokenu OAuth 2.0 używanego do jego uzyskania, dlatego token nie musi być odnawiany, jeśli klucz jest nadal prawidłowy. Możesz określić czas, przez który klucz pozostaje ważny, maksymalnie siedem dni.
Użyj jednej z następujących metod, aby zażądać klucza delegowania użytkownika:
Poniższy przykład kodu pokazuje, jak zażądać klucza delegowania użytkownika:
def request_user_delegation_key(self, blob_service_client: BlobServiceClient) -> UserDelegationKey:
# Get a user delegation key that's valid for 1 day
delegation_key_start_time = datetime.datetime.now(datetime.timezone.utc)
delegation_key_expiry_time = delegation_key_start_time + datetime.timedelta(days=1)
user_delegation_key = blob_service_client.get_user_delegation_key(
key_start_time=delegation_key_start_time,
key_expiry_time=delegation_key_expiry_time
)
return user_delegation_key
Tworzenie sygnatury dostępu współdzielonego do delegowania użytkowników
Sygnaturę dostępu współdzielonego delegowania użytkownika można utworzyć dla kontenera lub obiektu blob w zależności od potrzeb aplikacji.
Po uzyskaniu klucza delegowania użytkownika możesz utworzyć sygnaturę dostępu współdzielonego delegowania użytkownika. Sygnaturę dostępu współdzielonego delegowania użytkownika można utworzyć, aby delegować ograniczony dostęp do zasobu kontenera przy użyciu następującej metody:
Klucz delegowania użytkownika w celu podpisania sygnatury dostępu współdzielonego jest przekazywany do metody jako argumentu user_delegation_key
. Dozwolone uprawnienia są przekazywane do metody jako argumentu permission
i są zdefiniowane w klasie ContainerSasPermissions .
W poniższym przykładzie kodu pokazano, jak utworzyć sygnaturę dostępu współdzielonego delegowania użytkownika dla kontenera:
def create_user_delegation_sas_container(self, container_client: ContainerClient, user_delegation_key: UserDelegationKey):
# Create a SAS token that's valid for one day, as an example
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
sas_token = generate_container_sas(
account_name=container_client.account_name,
container_name=container_client.container_name,
user_delegation_key=user_delegation_key,
permission=ContainerSasPermissions(read=True),
expiry=expiry_time,
start=start_time
)
return sas_token
Używanie sygnatury dostępu współdzielonego delegowania użytkownika do autoryzowania obiektu klienta
Sygnatura dostępu współdzielonego delegowania użytkownika umożliwia autoryzowanie obiektu klienta do wykonywania operacji na kontenerze lub obiekcie blob na podstawie uprawnień przyznanych przez sygnaturę dostępu współdzielonego.
W poniższym przykładzie kodu pokazano, jak użyć sygnatury dostępu współdzielonego delegowania użytkownika utworzonej we wcześniejszym przykładzie w celu autoryzowania obiektu ContainerClient . Ten obiekt klienta może służyć do wykonywania operacji na zasobie kontenera na podstawie uprawnień przyznanych przez sygnaturę dostępu współdzielonego.
# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{container_client.url}?{sas_token}"
# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)
Zasoby
Aby dowiedzieć się więcej na temat tworzenia sygnatury dostępu współdzielonego delegowania użytkownika przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Przykłady kodu
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metoda biblioteki klienta do pobierania klucza delegowania użytkownika używa następujących operacji interfejsu API REST:
- Uzyskiwanie klucza delegowania użytkownika (interfejs API REST)
Zasoby biblioteki klienta
Zobacz też
- Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage za pomocą sygnatur dostępu współdzielonego (SAS)
- Tworzenie sygnatury dostępu współdzielonego delegowania użytkownika
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.