Condividi tramite


Creare la definizione della firma di accesso condiviso e recuperare i token della firma di accesso condiviso nel codice (legacy)

È possibile gestire l'account di archiviazione con i token di firma di accesso condiviso archiviati nell'insieme di credenziali delle chiavi. Per altre informazioni, vedere Concedere l'accesso limitato alle risorse di Archiviazione di Azure tramite la firma di accesso condiviso.

Nota

Per proteggere l'account di archiviazione, è consigliabile usare il controllo degli accessi in base al ruolo di Azure, che offre una maggiore sicurezza e facilità d'uso rispetto all'autorizzazione con chiave condivisa.

Questo articolo fornisce esempi di codice .NET che crea una definizione di firma di accesso condiviso e recupera i token di firma di accesso condiviso. Vedere l'esempio ShareLink per i dettagli completi, incluso il client generato per gli account di archiviazione gestiti da Key Vault. Per informazioni su come creare e archiviare token di firma di accesso condiviso, vedere Gestire le chiavi dell'account di archiviazione con Key Vault e l'interfaccia della riga di comando di Azure o Gestire le chiavi dell'account di archiviazione con Key Vault e Azure PowerShell.

Esempi di codice

Nell'esempio seguente viene creato un modello di firma di accesso condiviso:

private static string BuildSasDefinitionTemplate(bool readOnly) =>
    new StringBuilder("sv=2018-03-28")  // service version
        .Append("&spr=https")           // HTTPS only
        .Append("&ss=bf")               // blobs and files only
        .Append("&srt=o")               // applies to objects only
        .Append(readOnly ? "&sp=r" : "&sp=rw")  // read-only or read-write
        .ToString();

Con questo modello è possibile creare una definizione di firma di accesso condiviso usando

string sasDefinitionName = BuildSasDefinitionName(Tag, readOnly, duration);
SasDefinitionAttributes sasDefinitionAttributes = new SasDefinitionAttributes
{
    Enabled = true,
};

Dictionary<string, string> tags = new Dictionary<string, string>
{
    [Tag] = "1",
};

SasDefinitionBundle createdSasDefinition = await storageClient.SetSasDefinitionAsync(
    storageAccountName,
    sasDefinitionName,
    sasTemplate,
    SasTokenType.Account,
    duration,
    sasDefinitionAttributes,
    tags,
    s_cancellationTokenSource.Token);

Dopo la creazione della definizione di firma di accesso condiviso, è possibile recuperare i token di firma di accesso condiviso come i segreti usando un SecretClient. È necessario anteporre al nome del segreto il nome dell'account di archiviazione seguito da un trattino:

// Build our SAS template, get an existing SAS definition, or create a new one.
string sasTemplate = BuildSasDefinitionTemplate(readOnly);
string sasDefinitionName = await GetOrCreateSasDefinitionAsync(storageClient, storageAccountName, sasTemplate, days, readOnly);

// Now we can create a SecretClient and generate a new SAS token from the storage account and SAS definition names.
SecretClient secretClient = new SecretClient(vaultUri, credential, options);
KeyVaultSecret sasToken = await secretClient.GetSecretAsync($"{storageAccountName}-{sasDefinitionName}", cancellationToken: s_cancellationTokenSource.Token);

Se il token di firma di accesso condiviso sta per scadere, è possibile recuperare nuovamente lo stesso segreto per generarne uno nuovo.

Per indicazioni sull'uso del token di firma di accesso condiviso recuperato da Key Vault per accedere ai servizi di Archiviazione di Azure, vedere Usare una firma di accesso condiviso dell'account per accedere al servizio BLOB

Nota

L'app deve essere preparata per l'aggiornamento della firma di accesso condiviso se ottiene un errore 403 dalla risorsa di archiviazione, in modo da poter gestire il caso in cui una chiave è stata compromessa ed è necessario ruotarla più velocemente rispetto al periodo di rotazione normale.

Passaggi successivi