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:
- Delegar el acceso a operaciones de nivel de servicio que no están disponibles actualmente con una SAS específica del servicio, como Obtención de propiedades de Blob service, Establecimiento de propiedades de Blob service y Obtención de estadísticas de Blob service.
- Delegar el acceso a más de un servicio en una cuenta de almacenamiento a la vez. Por ejemplo, puede delegar el acceso a los recursos de Azure Blob Storage y Azure Files mediante una SAS de cuenta.
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
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (Maven)
Consulte también
- Grant limited access to Azure Storage resources using shared access signatures (SAS) (Otorgar acceso limitado a recursos de Azure Storage con firmas de acceso compartido [SAS])
- Creación de una SAS de cuenta