Creación de una definición de SAS y captura de tokens de firma de acceso compartido en el código (heredado)

Puede administrar su cuenta de almacenamiento con los tokens de Firma de acceso compartido (SAS) almacenados en el almacén de claves. Para obtener más información, consulte Otorgar acceso limitado a recursos de Azure Storage con SAS.

Nota:

Se recomienda usar el control de acceso basado en rol de Azure (RBAC de Azure) para proteger la cuenta de almacenamiento y lograr una mayor seguridad y facilidad de uso mediante la autorización de claves compartidas.

En este artículo se proporcionan ejemplos de código .NET que crea una definición de SAS y captura tokens de SAS. Consulte el ejemplo de ShareLink para obtener información completa, incluido el cliente generado para las cuentas de almacenamiento administradas por Key Vault. Para más información sobre cómo crear y almacenar tokens de SAS, consulte Administración de claves de cuenta de almacenamiento con Key Vault y la CLI de Azure o Administración de claves de cuenta de almacenamiento con Key Vault y Azure PowerShell.

Ejemplos de código

En el ejemplo siguiente, vamos a crear una plantilla de SAS:

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 esta plantilla, se puede crear una definición de SAS mediante el código:

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

Una vez creada la definición de SAS, puede recuperar los tokens de SAS como secretos mediante un SecretClient. Debe anteponer el nombre de la cuenta de almacenamiento al nombre del secreto, separados por un guion:

// 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);

Si el token de la firma de acceso compartido está a punto de expirar, puede volver a capturar el mismo secreto para generar uno nuevo.

Para obtener una guía sobre cómo usar el token de SAS recuperado de Key Vault para acceder a Azure Storage, consulte cómo usar una cuenta de SAS para acceder a Blob service.

Nota:

La aplicación debe estar preparada para actualizar SAS si recibe un mensaje 403 de Storage para que pueda controlar el caso en que se pone en peligro una clave y debe cambiarlas con más rapidez que el período de rotación normal.

Pasos siguientes