Compartir vía


Creación de una SAS de servicio para un contenedor 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 que está firmada con las credenciales de Microsoft Entra es una delegación de usuarios SAS. 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 un servicio de SAS para un contenedor con la biblioteca cliente de Blob Storage para Java.

Acerca de la SAS de servicio

Una SAS de servicio se firma con la clave de acceso de la cuenta. Use la clase StorageSharedKeyCredential para crear la credencial que se usa para firmar la SAS de servicio.

También puede usar una directiva de acceso almacenada para definir los permisos y la duración de la SAS. Si se proporciona el nombre de una directiva de acceso almacenada existente, esa directiva se asocia con la SAS. Para obtener más información sobre las directivas de acceso almacenadas, vea Definir una directiva de acceso almacenada. Si no se proporciona ninguna directiva de acceso almacenada, los ejemplos de código de este artículo muestran cómo definir permisos y duración para la SAS.

Creación de una SAS de servicio para un contenedor

Puede crear una SAS de servicio para delegar el acceso limitado a un recurso de contenedor mediante el método siguiente:

Los valores de firma de SAS, como la hora de expiración y los permisos firmados, se pasan al método como parte de una instancia de BlobServiceSasSignatureValues. Los permisos se especifican como una instancia de BlobContainerSasPermission.

El siguiente ejemplo de código muestra cómo crear un servicio SAS con permisos de lectura para un recurso contenedor:

public String createServiceSASContainer(BlobContainerClient containerClient) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = containerClient.generateSas(sasSignatureValues);
    return sasToken;
}

Usar una SAS de servicio para autorizar un objeto de cliente

En el siguiente ejemplo de código se muestra cómo usar la SAS de servicio de usuarios para autorizar un objeto BlobContainerClient. Este objeto de cliente se puede usar para realizar operaciones en el recurso de contenedor en función de los permisos concedidos por 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 servicio como se muestra en el ejemplo anterior y use la SAS para autorizar un objeto BlobContainerClient:

// Create a SAS token
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("sample-container");
String sasToken = createServiceSASContainer(containerClient);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Recursos

Para más información sobre cómo usar la biblioteca cliente de Azure Blob Storage para Java, consulte los siguientes recursos.

Recursos de la biblioteca cliente

Consulte también