Creare una firma di accesso condiviso dell'account con Python
Una firma di accesso condiviso consente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i vincoli, incluse le risorse di Archiviazione di Azure a cui un client è autorizzato ad accedere, quali autorizzazioni ha per tali risorse e per quanto tempo è valida la 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 usando 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 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. Sia una firma di accesso condiviso del servizio che una firma di accesso condiviso dell'account vengono 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 deve avere l'autorizzazione Microsoft.Storage/storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio o Creare una firma di accesso condiviso dell'account.
Nota
Una firma di accesso condiviso di delega utente offre una sicurezza superiore 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 le firme di accesso condiviso.
Questo articolo illustra come usare la chiave dell'account di archiviazione per creare una firma di accesso condiviso dell'account con la libreria client di Archiviazione di Azure per Python.
Informazioni sulla firma di accesso condiviso dell'account
Una firma di accesso condiviso dell'account viene creata a livello dell'account di archiviazione. Creando una firma di accesso condiviso dell'account, è possibile:
- Delegare l'accesso alle operazioni a livello di servizio attualmente non disponibili con una firma di accesso condiviso specifica del servizio, ad esempio Ottenere le proprietà del servizio BLOB, Impostare le proprietà del servizio BLOB e Ottenere statistiche del servizio BLOB.
- Delegare l'accesso a più servizi in un account di archiviazione alla volta. Ad esempio, è possibile delegare l'accesso alle risorse sia in Archiviazione BLOB di Azure che in File di Azure usando una firma di accesso condiviso dell'account.
I criteri di accesso archiviati non sono supportati per la firma di accesso condiviso dell'account.
Creare un SAS dell'account
Una firma di accesso condiviso dell'account viene firmata con la chiave di accesso dell'account. L'esempio di codice seguente illustra come chiamare il metodo generate_account_sas per ottenere la stringa del token di firma di accesso condiviso dell'account.
def create_account_sas(self, account_name: str, account_key: str):
# Create an account SAS that's valid for one day
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
# Define the SAS token permissions
sas_permissions=AccountSasPermissions(read=True)
# Define the SAS token resource types
# For this example, we grant access to service-level APIs
sas_resource_types=ResourceTypes(service=True)
sas_token = generate_account_sas(
account_name=account_name,
account_key=account_key,
resource_types=sas_resource_types,
permission=sas_permissions,
expiry=expiry_time,
start=start_time
)
return sas_token
I parametri validi per il costruttore ResourceTypes sono:
- service: l'impostazione predefinita è
False
; impostare suTrue
per concedere l'accesso alle API a livello di servizio. - container: l'impostazione predefinita è
False
; impostare suTrue
per concedere l'accesso alle API a livello di contenitore. - object: l'impostazione predefinita è
False
; impostare suTrue
per concedere l'accesso alle API a livello di oggetto per BLOB, messaggi in coda e file.
Per le autorizzazioni disponibili, vedere AccountSasPermissions.
Usare una firma di accesso condiviso dell'account da un client
Per usare la firma di accesso condiviso dell'account per accedere alle API a livello di servizio per il servizio BLOB, creare un oggetto BlobServiceClient usando la firma di accesso condiviso dell'account e l'endpoint di archiviazione BLOB per l'account di archiviazione corrente.
# The SAS token string can be appended to the account URL with a ? delimiter
# or passed as the credential argument to the client constructor
account_sas_url = f"{blob_service_client.url}?{sas_token}"
# Create a BlobServiceClient object
blob_service_client_sas = BlobServiceClient(account_url=account_sas_url)
È anche possibile usare una firma di accesso condiviso dell'account per autorizzare e usare un oggetto ContainerClient o un oggetto BlobClient, se a tali tipi di risorse viene concesso l'accesso come parte dei valori della firma.
Risorse
Per altre informazioni sulla creazione di una firma di accesso condiviso dell'account usando la libreria client di Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.
Esempi di codice
Risorse per la libreria client
- Documentazione di riferimento della libreria client
- Codice sorgente della libreria client
- Pacchetto (PyPi)