Sdílet prostřednictvím


Vytvoření SAS delegování uživatele pro kontejner nebo objekt blob pomocí Pythonu

Sdílený přístupový podpis (SAS) umožňuje udělit omezený přístup ke kontejnerům a objektům blob ve vašem účtu úložiště. Při vytváření sdíleného přístupového podpisu zadáte jeho omezení, včetně toho, ke kterým prostředkům Azure Storage 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. Klientovi, který vytvoří SAS delegování uživatele, musí být přiřazena role Azure RBAC, která zahrnuje akci Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Další informace najdete v tématu Vytvoření SAS delegování 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:

Sas delegování uživatele nabízí vynikající zabezpečení SAS podepsanému klíčem účtu úložiště. Microsoft doporučuje používat SAS delegování 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 SAS delegování uživatele

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ý pomocí přihlašovacích údajů Microsoft Entra se nazývá SAS delegování uživatele, protože token OAuth 2.0 použitý k podepsání SAS se požaduje 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, použijte přihlašovací údaje Microsoft Entra k vytvoření SAS delegování uživatele pro zajištění vyššího zabezpečení. Další informace o SAS delegování uživatele najdete v tématu Vytvoření SAS delegování uživatele.

Upozornění

Každý klient, který má platný SAS, má přístup k datům ve vašem účtu úložiště, jak to povoluje tento 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í přihlašovacích údajů ověřeného 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ření SAS delegování uživatele

Sas delegování uživatele pro kontejner nebo objekt blob můžete vytvořit na základě potřeb vaší aplikace.

Po získání klíče delegování uživatele můžete vytvořit SAS delegování uživatele. Sas delegování uživatele můžete vytvořit pro delegování omezeného přístupu 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žití SAS delegování uživatele k autorizaci objektu klienta

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:

Prostředky klientské knihovny

Viz také

  • 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.