Dela via


Skapa en SAS för användardelegering för en container eller blob med Python

Med en signatur för delad åtkomst (SAS) kan du bevilja begränsad åtkomst till containrar och blobar i ditt lagringskonto. När du skapar en SAS anger du dess begränsningar, inklusive vilka Azure Storage-resurser en klient har åtkomst till, vilka behörigheter de har för dessa resurser och hur länge SAS är giltigt.

Varje SAS signeras med en nyckel. Du kan signera en SAS på något av två sätt:

  • Med en nyckel som skapats med Microsoft Entra-autentiseringsuppgifter. En SAS som är signerad med Microsoft Entra-autentiseringsuppgifter är en SAS för användardelegering . En klient som skapar en SAS för användardelegering måste tilldelas en Azure RBAC-roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Mer information finns i Skapa en SAS för användardelegering.
  • Med lagringskontonyckeln. Både en tjänst-SAS och ett sas-konto signeras med lagringskontonyckeln. Klienten som skapar en tjänst-SAS måste antingen ha direkt åtkomst till kontonyckeln eller tilldelas behörigheten Microsoft.Storage/storageAccounts/listkeys/action . Mer information finns i Skapa en tjänst-SAS eller Skapa ett konto-SAS.

Kommentar

En SAS för användardelegering ger överlägsen säkerhet till en SAS som är signerad med lagringskontonyckeln. Microsoft rekommenderar att du använder en SAS för användardelegering när det är möjligt. Mer information finns i Bevilja begränsad åtkomst till data med signaturer för delad åtkomst (SAS).

Den här artikeln visar hur du använder Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för en container eller blob med hjälp av Azure Storage-klientbiblioteket för Python.

Om SAS för användardelegering

En SAS-token för åtkomst till en container eller blob kan skyddas med hjälp av antingen Microsoft Entra-autentiseringsuppgifter eller en kontonyckel. En SAS som skyddas med Microsoft Entra-autentiseringsuppgifter kallas sas för användardelegering eftersom den OAuth 2.0-token som används för att signera SAS begärs för användarens räkning.

Microsoft rekommenderar att du använder Microsoft Entra-autentiseringsuppgifter när det är möjligt som bästa praxis för säkerhet, i stället för att använda kontonyckeln, som är enklare att kompromettera. När din programdesign kräver signaturer för delad åtkomst använder du Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för överlägsen säkerhet. Mer information om SAS för användardelegering finns i Skapa en SAS för användardelegering.

Varning

Alla klienter som har en giltig SAS kan komma åt data i ditt lagringskonto enligt sas-tillstånd. Det är viktigt att skydda en SAS från skadlig eller oavsiktlig användning. Använd diskretion när du distribuerar en SAS och ha en plan för att återkalla en komprometterad SAS.

Mer information om signaturer för delad åtkomst finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

Tilldela Azure-roller för åtkomst till data

När ett Microsoft Entra-säkerhetsobjekt försöker komma åt data måste det säkerhetsobjektet ha behörighet till resursen. Oavsett om säkerhetsobjektet är en hanterad identitet i Azure eller ett Microsoft Entra-användarkonto som kör kod i utvecklingsmiljön måste säkerhetsobjektet tilldelas en Azure-roll som ger åtkomst till data. Information om hur du tilldelar behörigheter via Azure RBAC finns i Tilldela en Azure-roll för åtkomst till blobdata.

Konfigurera projektet

Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.

Installera paket

Installera följande paket med :pip install

pip install azure-storage-blob azure-identity

Konfigurera appkoden

Lägg till följande import direktiv:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
    BlobServiceClient,
    ContainerClient,
    BlobClient,
    BlobSasPermissions,
    ContainerSasPermissions,
    UserDelegationKey,
    generate_container_sas,
    generate_blob_sas
)

Hämta en autentiserad tokenautentiseringsuppgift

Om du vill hämta en tokenautentiseringsuppgift som koden kan använda för att auktorisera begäranden till Blob Storage skapar du en instans av klassen DefaultAzureCredential . Mer information om hur du använder klassen DefaultAzureCredential för att auktorisera en hanterad identitet för åtkomst till Blob Storage finns i Azure Identity-klientbiblioteket för Python.

Följande kodfragment visar hur du hämtar autentiseringsuppgifterna för autentiserade token och använder det för att skapa en tjänstklient för 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())

Mer information om hur du auktoriserar åtkomst till Blob Storage från dina program med Python SDK finns i Autentisera Python-appar till Azure-tjänster.

Hämta användardelegeringsnyckeln

Varje SAS signeras med en nyckel. Om du vill skapa en SAS för användardelegering måste du först begära en användardelegeringsnyckel som sedan används för att signera SAS. Användardelegeringsnyckeln motsvarar den kontonyckel som används för att signera en tjänst-SAS eller ett SAS-konto, förutom att den förlitar sig på dina Microsoft Entra-autentiseringsuppgifter. När en klient begär en användardelegeringsnyckel med en OAuth 2.0-token returnerar Blob Storage användarens delegeringsnyckel för användarens räkning.

När du har användardelegeringsnyckeln kan du använda den nyckeln för att skapa valfritt antal signaturer för delad åtkomst för användare under nyckelns livslängd. Användarens delegeringsnyckel är oberoende av den OAuth 2.0-token som används för att hämta den, så token behöver inte förnyas om nyckeln fortfarande är giltig. Du kan ange hur lång tid nyckeln är giltig, upp till högst sju dagar.

Använd någon av följande metoder för att begära användarens delegeringsnyckel:

Följande kodexempel visar hur du begär användarens delegeringsnyckel:

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

Skapa en SAS för användardelegering

Du kan skapa en SAS för användardelegering för en container eller blob baserat på appens behov.

När du har hämtat användardelegeringsnyckeln kan du skapa en SAS för användardelegering. Du kan skapa en SAS för användardelegering för att delegera begränsad åtkomst till en containerresurs med hjälp av följande metod:

Användarens delegeringsnyckel för att signera SAS skickas till metoden som user_delegation_key argument. Tillåtna behörigheter skickas till metoden som permission argument och definieras i klassen ContainerSasPermissions .

Följande kodexempel visar hur du skapar en SAS för användardelegering för en container:

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

Använda en SAS för användardelegering för att auktorisera ett klientobjekt

Du kan använda en SAS för användardelegering för att auktorisera ett klientobjekt för att utföra åtgärder på en container eller blob baserat på de behörigheter som beviljas av SAS.

I följande kodexempel visas hur du använder användardelegerings-SAS som skapades i det tidigare exemplet för att auktorisera ett ContainerClient-objekt . Det här klientobjektet kan användas för att utföra åtgärder på containerresursen baserat på de behörigheter som beviljas av 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)

Resurser

Mer information om hur du skapar en SAS för användardelegering med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

Kodexempel

REST API-åtgärder

Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoden för att hämta en användardelegeringsnyckel använder följande REST API-åtgärder:

Klientbiblioteksresurser

Se även

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.