Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Sdílený přístupový podpis (SAS) umožňuje udělit omezený přístup ke kontejnerům a blobům ve vašem úložišti. Při vytváření sdíleného přístupového podpisu (SAS) zadáte jeho omezení, včetně toho, ke kterým prostředkům úložiště Azure má klient povolený přístup, jaká oprávnění k těmto prostředkům má, a jak dlouho je SAS platný.
Každý SAS je podepsaný klíčem. SAS můžete podepsat jedním ze dvou způsobů:
- S klíčem vytvořeným pomocí přihlašovacích údajů Microsoft Entra. SAS podepsaný pomocí přihlašovacích údajů Microsoft Entra je SAS delegování uživatele. Klient, který vytvoří SAS pro delegování uživatele, musí mít přiřazenu roli Azure RBAC, která zahrnuje akci Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Další informace najdete v tématu Vytvoření delegovaného SAS uživatele.
- S klíčem účtu úložiště. Sas služby i SAS účtu jsou podepsané klíčem účtu úložiště. Klient, který vytvoří SAS služby, musí mít buď přímý přístup k klíči účtu, nebo musí mít přiřazené oprávnění Microsoft.Storage/storageAccounts/listkeys/action . Další informace najdete v tématu Vytvoření sdíleného přístupového podpisu služby nebo vytvoření sdíleného přístupového podpisu účtu.
Poznámka:
Delegace SAS uživatele nabízí lepší zabezpečení než SAS podepsaný klíčem účtu úložiště. Microsoft doporučuje používat SAS s delegováním uživatele, pokud je to možné. Další informace najdete v tématu Udělení omezeného přístupu k datům pomocí sdílených přístupových podpisů (SAS).
Tento článek ukazuje, jak pomocí přihlašovacích údajů Microsoft Entra vytvořit SAS delegování uživatele pro kontejner nebo objekt blob pomocí klientské knihovny Azure Storage pro Python.
Informace o delegování uživatele SAS
Token SAS pro přístup ke kontejneru nebo objektu blob může být zabezpečený pomocí přihlašovacích údajů Microsoft Entra nebo klíče účtu. SAS zabezpečený uživatelskými přihlašovacími údaji Microsoft Entra se nazývá SAS s uživatelskou delegací, protože token OAuth 2.0 použitý k podepsání SAS je vyžádán jménem uživatele.
Microsoft doporučuje používat přihlašovací údaje Microsoft Entra, pokud je to možné jako osvědčený postup zabezpečení, a ne používat klíč účtu, který může být snadněji ohrožen. Když návrh vaší aplikace vyžaduje sdílené přístupové podpisy (shared access signatures), použijte přihlašovací údaje Microsoft Entra k vytvoření delegovaných podpisů SAS od uživatele pro zvýšení zabezpečení. Další informace o SAS delegování uživatele viz téma Vytvoření SAS delegování uživatele.
Upozornění
Každý klient, který má platný podpis pro sdílený přístup (SAS), může přistupovat k datům ve vašem účtu úložiště, jak je to povoleno tímto SAS. Je důležité chránit SAS před škodlivým nebo nezamýšleným použitím. Při distribuci sdíleného přístupového podpisu použijte vlastní uvážení a vytvořte plán pro odvolání ohroženého sdíleného přístupového podpisu.
Další informace o sdílených přístupových podpisech najdete v tématu Udělení omezeného přístupu k prostředkům Azure Storage pomocí sdílených přístupových podpisů (SAS).
Přiřazení rolí Azure pro přístup k datům
Když se objekt zabezpečení Microsoft Entra pokusí získat přístup k datům, musí mít tento objekt zabezpečení oprávnění k prostředku. Bez ohledu na to, jestli je objekt zabezpečení spravovanou identitou v Azure nebo uživatelským účtem Microsoft Entra, který spouští kód ve vývojovém prostředí, musí být instančnímu objektu zabezpečení přiřazena role Azure, která uděluje přístup k datům. Informace o přiřazování oprávnění prostřednictvím Azure RBAC najdete v tématu Přiřazení role Azure pro přístup k datům objektů blob.
Nastavení projektu
Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.
Instalace balíčků
Nainstalujte následující balíčky pomocí pip install:
pip install azure-storage-blob azure-identity
Nastavení kódu aplikace
Přidejte následující import direktivy:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
ContainerClient,
BlobClient,
BlobSasPermissions,
ContainerSasPermissions,
UserDelegationKey,
generate_container_sas,
generate_blob_sas
)
Získání ověřených přihlašovacích údajů tokenu
Pokud chcete získat přihlašovací údaje tokenu, které váš kód může použít k autorizaci požadavků na Blob Storage, vytvořte instanci DefaultAzureCredential třídy. Další informace o použití defaultAzureCredential třídy k autorizaci spravované identity pro přístup ke službě Blob Storage najdete v klientské knihovně Azure Identity pro Python.
Následující fragment kódu ukazuje, jak získat přihlašovací údaje ověřeného tokenu a použít ho k vytvoření klienta služby pro službu 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())
Další informace o autorizaci přístupu ke službě Blob Storage z vašich aplikací pomocí sady Python SDK najdete v tématu Ověřování aplikací v Pythonu ve službách Azure.
Získání klíče delegování uživatele
Každý SAS je podepsaný klíčem. Pokud chcete vytvořit SAS delegování uživatele, musíte nejprve požádat o klíč delegování uživatele, který se pak použije k podepsání sdíleného přístupového podpisu. Klíč delegování uživatele je podobný klíč účtu, který se používá k podepsání SAS služby nebo SAS účtu, s tím rozdílem, že spoléhá na vaše přihlašovací údaje Microsoft Entra. Když klient požádá o klíč delegování uživatele pomocí tokenu OAuth 2.0, služba Blob Storage vrátí klíč delegování uživatele jménem uživatele.
Jakmile budete mít klíč delegování uživatele, můžete tento klíč použít k vytvoření libovolného počtu sdílených přístupových podpisů delegování uživatele v průběhu životnosti klíče. Klíč delegování uživatele je nezávislý na tokenu OAuth 2.0 použitém k jeho získání, takže pokud je klíč stále platný, token se nemusí obnovovat. Můžete zadat dobu, po kterou klíč zůstane platný, až do 7 dnů.
K vyžádání klíče delegování uživatele použijte jednu z následujících metod:
Následující příklad kódu ukazuje, jak požádat o klíč delegování uživatele:
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
Vytvořte delegovaný SAS uživatele
Sas delegování uživatele pro kontejner nebo objekt blob můžete vytvořit na základě potřeb vaší aplikace.
Jakmile získáte klíč pro delegování uživatele, můžete vytvořit SAS s delegováním uživatele. Můžete vytvořit uživatelské delegování SAS a delegovat omezený přístup k prostředku kontejneru pomocí následující metody:
Klíč delegování uživatele pro podepsání SAS se předá metodě jako user_delegation_key argument. Povolená oprávnění jsou předána metodě jako permission argument a jsou definována ve třídě ContainerSasPermissions .
Následující příklad kódu ukazuje, jak vytvořit SAS delegování uživatele pro kontejner:
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
Použijte delegování SAS uživatele k autorizaci klientského objektu.
Sas delegování uživatele můžete použít k autorizaci objektu klienta k provádění operací s kontejnerem nebo objektem blob na základě oprávnění udělených SAS.
Následující příklad kódu ukazuje použití SAS delegování uživatele vytvořeného v předchozím příkladu k autorizaci objektu ContainerClient . Tento objekt klienta lze použít k provádění operací s prostředkem kontejneru na základě oprávnění udělených SAS.
# 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)
Zdroje informací
Další informace o vytvoření SAS delegování uživatele pomocí klientské knihovny Azure Blob Storage pro Python najdete v následujících zdrojích informací.
Ukázky kódu
Operace rozhraní REST API
Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metoda klientské knihovny pro získání klíče delegování uživatele používá následující operace rozhraní REST API:
- Získání uživatelského delegačního klíče (REST API)
Prostředky klientské knihovny
Viz také
- Udělení omezeného přístupu k prostředkům Azure Storage pomocí sdílených přístupových podpisů
- Vytvořit SAS s delegací uživatele
Související obsah
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace v Pythonu.