Compartir vía


Creación de una SAS de cuenta con Java

Una firma de acceso compartido (SAS) le permite conceder acceso limitado a los contenedores y blobs de la cuenta de almacenamiento. Cuando crea una SAS, especifica sus restricciones, incluidos los recursos de Azure Storage a los que puede acceder un cliente, los permisos que tiene en esos recursos y el tiempo durante el cual la SAS es válida.

Cada SAS se firma con una clave. Puede firmar una SAS de dos maneras:

  • Con una clave creada con las credenciales de Microsoft Entra. Una SAS firmada con credenciales de Microsoft Entra es una SAS de delegación de usuario. Un cliente que cree una SAS de delegación de usuarios debe tener asignado un rol RBAC de Azure que incluya la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Para obtener más información, vea Creación de una SAS de delegación de usuarios.
  • Con la clave de la cuenta de almacenamiento. Tanto una SAS de servicio como una SAS de cuenta se firman con la clave de la cuenta de almacenamiento. El cliente que cree una SAS de servicio debe tener acceso directo a la clave de cuenta o asignársele el permiso Microsoft.Storage/storageAccounts/listkeys/action. Para obtener más información, vea Creación de una SAS de servicio o Creación de una SAS de cuenta.

Nota

Una SAS de delegación de usuario ofrece seguridad superior para una SAS firmada con la clave de la cuenta de almacenamiento. Microsoft recomienda el uso de una SAS de delegación de usuario siempre que sea posible. Para más información, consulte Concesión de acceso limitado a datos con firmas de acceso compartido (SAS).

En este artículo se muestra cómo usar la clave de cuenta de almacenamiento para crear una SAS de cuenta con la Biblioteca cliente de Azure Storage para Java.

Acerca de la SAS de la cuenta

Se crea una SAS de cuenta en el nivel de la cuenta de almacenamiento y se firma con la clave de acceso de la cuenta. Mediante la creación de una SAS de cuenta, puede hacer lo siguiente:

Las directivas de acceso almacenadas no son compatibles para una SAS de cuenta.

Configuración del proyecto

Para trabajar con los ejemplos de código de este artículo, agregue las siguientes directivas de importación:

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;
import com.azure.storage.common.sas.AccountSasPermission;
import com.azure.storage.common.sas.AccountSasResourceType;
import com.azure.storage.common.sas.AccountSasService;
import com.azure.storage.common.sas.AccountSasSignatureValues;

Creación de una SAS de cuenta

Puede crear una SAS de cuenta para delegar el acceso limitado a los recursos de la cuenta de almacenamiento mediante el método siguiente:

Para configurar los valores de firma para la SAS de cuenta, use las siguientes clases auxiliares:

  • AccountSasPermission: representa los permisos permitidos por la SAS. En nuestro ejemplo, establecemos el permiso de lectura en true.
  • AccountSasService: representa los servicios a los que puede acceder la SAS. En nuestro ejemplo, se permite el acceso al Blob service.
  • AccountSasResourceType: representa los tipos de recursos a los que puede acceder la SAS. En nuestro ejemplo, se permite el acceso a las API de nivel de servicio.

Una vez configuradas las clases auxiliares, puede inicializar parámetros para la SAS con una instancia AccountSasSignatureValues.

En el ejemplo de código siguiente se muestra cómo configurar parámetros de SAS y llamar al método generateAccountSas para obtener la SAS de cuenta:

public String createAccountSAS(BlobServiceClient blobServiceClient) {
    // Configure the SAS parameters
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
    AccountSasPermission accountSasPermission = new AccountSasPermission()
            .setReadPermission(true);
    AccountSasService services = new AccountSasService()
            .setBlobAccess(true);
    AccountSasResourceType resourceTypes = new AccountSasResourceType()
            .setService(true);

    // Generate the account SAS
    AccountSasSignatureValues accountSasValues = new AccountSasSignatureValues(
        expiryTime,
        accountSasPermission,
        services,
        resourceTypes);
    String sasToken = blobServiceClient.generateAccountSas(accountSasValues);

    return sasToken;
}

Uso de una SAS de cuenta desde un cliente

En el siguiente ejemplo de código, se muestra cómo usar la SAS de cuenta creada en el ejemplo anterior para autorizar un objeto BlobServiceClient. Este objeto cliente después se puede usar para acceder a las API de nivel de servicio en función de los permisos que concedió la SAS.

En primer lugar, cree un objeto BlobServiceClient firmado con la clave de acceso de la cuenta:

String accountName = "<account-name>";
String accountKey = "<account-key>";
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
        
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint(String.format("https://%s.blob.core.windows.net/", accountName))
        .credential(credential)
        .buildClient();

A continuación, genere la SAS de cuenta como se muestra en el ejemplo anterior y use la SAS para autorizar un objeto BlobServiceClient:

// Create a SAS token
String sasToken = createAccountSAS(blobServiceClient);

// Create a new BlobServiceClient using the SAS token
BlobServiceClient sasServiceClient = new BlobServiceClientBuilder()
        .endpoint(blobServiceClient.getAccountUrl())
        .sasToken(sasToken)
        .buildClient();

También puede usar una SAS de cuenta para autorizar y trabajar con un objeto BlobContainerClient o un objeto BlobClient, si a esos tipos de recursos se les concede acceso como parte de los valores de firma.

Recursos

Para obtener más información sobre cómo crear una SAS de cuenta con la biblioteca cliente de Azure Blob Storage para Java, consulte los siguientes recursos.

Ejemplos de código

Recursos de la biblioteca cliente

Consulte también