Creare una firma di accesso condiviso del servizio per un contenitore o un Python

Una firma di accesso condiviso (SAS) permette all'utente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i relativi vincoli, incluse le risorse di Archiviazione di Azure alle quali un client è autorizzato ad accedere, le autorizzazioni di cui dispone per tali risorse e la durata della validità della firma di accesso condiviso.

Ogni firma di accesso condiviso viene firmata con una chiave. Questa operazione può essere eseguita in due modi:

  • Con una chiave creata utilizzando le credenziali di Microsoft Entra. Una firma di accesso condiviso firmata con le credenziali di Microsoft Entra è una firma di accesso condiviso di delega utente. A un client che crea una firma di accesso condiviso di delega utente deve essere assegnato un ruolo di Controllo degli accessi in base al ruolo di Azure che include l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.
  • Con la chiave dell'account di archiviazione. Una firma di accesso condiviso del servizio e una firma di accesso condiviso dell'account, vengono entrambe firmate con la chiave dell'account di archiviazione. Il client che crea una firma di accesso condiviso del servizio deve avere accesso diretto alla chiave dell'account o disporre dell'autorizzazione Microsoft.Storage/storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio oppure Creare una firma di accesso condiviso dell'account.

Nota

Una firma di accesso condiviso di delega utente offre una protezione maggiore rispetto a una firma di accesso condiviso firmata con la chiave dell'account di archiviazione. Quando possibile, Microsoft consiglia di usare una firma di accesso condiviso di delega utente. Per altre informazioni, vedere Concedere accesso limitato ai dati con firme di accesso condiviso.

Questo articolo illustra come usare la chiave dell'account di archiviazione per creare una firma di accesso condiviso del servizio per un contenitore o BLOB con la libreria client di archiviazione BLOB per Python.

Informazioni sulla firma di accesso condiviso del servizio

Una firma di accesso condiviso del servizio viene firmata con la chiave di accesso dell'account di archiviazione. Una firma di accesso condiviso del servizio delega l'accesso a una risorsa in un singolo servizio di archiviazione di Azure, come l'archiviazione BLOB.

È anche possibile utilizzare un criterio di accesso archiviato per definire le autorizzazioni e la durata della firma di accesso condiviso del servizio. Se viene specificato il nome di un criterio di accesso archiviato esistente, tale criterio è associato alla firma di accesso condiviso. Per altre informazioni sui criteri di accesso archiviati, vedere Definire un criterio di accesso archiviato. Se non viene fornito alcun criterio di accesso archiviato, gli esempi di codice di questo articolo mostrano come definire le autorizzazioni e la durata per la firma di accesso condiviso del servizio.

Creare un SAS di servizio

È possibile creare una firma di accesso condiviso del servizio per un contenitore o un BLOB, in base alle esigenze dell'app.

È possibile creare una firma di accesso condiviso del servizio per delegare l'accesso limitato a una risorsa contenitore usando il metodo seguente:

La chiave di accesso dell'account di archiviazione usata per firmare la firma di accesso condiviso viene passata al metodo come argomento account_key. Le autorizzazioni consentite vengono passate al metodo come argomento permission e vengono definite nella classe ContainerSasPermissions.

Il seguente esempio di codice mostra come creare una firma di accesso condiviso del servizio con autorizzazioni di lettura per una risorsa del contenitore:

def create_service_sas_container(self, container_client: ContainerClient, account_key: str):
    # 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,
        account_key=account_key,
        permission=ContainerSasPermissions(read=True),
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

Utilizzare una firma di accesso condiviso del servizio per autorizzare un oggetto client

È possibile usare una firma di accesso condiviso del servizio per autorizzare un oggetto client a eseguire operazioni su un contenitore o un BLOB in base alle autorizzazioni concesse dalla firma di accesso condiviso.

L'esempio di codice seguente illustra come usare la firma di accesso condiviso creata nell'esempio precedente per autorizzare un oggetto ContainerClient. Questo oggetto client può essere usato per eseguire operazioni sulla risorsa del contenitore in base alle autorizzazioni concesse dalla firma di accesso condiviso.

# 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)

Risorse

Per altre informazioni sull'uso della libreria client di Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.

Esempi di codice

Risorse della libreria client

Vedi anche