Crear una SAS de servicio para un contenedor o blob con JavaScript
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 un servicio de SAS para un contenedor o blob con la biblioteca cliente de Blob Storage para JavaScript.
Creación de una SAS de servicio para un contenedor de blob
En el ejemplo de código siguiente se crea una SAS para un contenedor. Si se proporciona el nombre de una directiva de acceso almacenada existente, esa directiva se asocia con la SAS. Si no se proporciona ninguna directiva de acceso almacenada, el código crea una SAS ad hoc en el contenedor.
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. A continuación, llame a la función generateBlobSASQueryParameters y proporcione los parámetros necesarios para obtener la cadena de tokens de SAS.
// Create a service SAS for a blob container
function getContainerSasUri(containerClient, sharedKeyCredential, storedPolicyName) {
const sasOptions = {
containerName: containerClient.containerName,
permissions: ContainerSASPermissions.parse("c")
};
if (storedPolicyName == null) {
sasOptions.startsOn = new Date();
sasOptions.expiresOn = new Date(new Date().valueOf() + 3600 * 1000);
} else {
sasOptions.identifier = storedPolicyName;
}
const sasToken = generateBlobSASQueryParameters(sasOptions, sharedKeyCredential).toString();
console.log(`SAS token for blob container is: ${sasToken}`);
return `${containerClient.url}?${sasToken}`;
}
Creación de una SAS de servicio para un blob
El ejemplo de código siguiente crea una SAS en un blob. Si se proporciona el nombre de una directiva de acceso almacenada existente, esa directiva se asocia con la SAS. Si no se proporciona ninguna directiva de acceso almacenada, el código crea una SAS ad hoc en el blob.
Para crear una SAS de servicio para un blob, llame a la función generateBlobSASQueryParameters y proporcione los parámetros necesarios.
// Create a service SAS for a blob
function getBlobSasUri(containerClient, blobName, sharedKeyCredential, storedPolicyName) {
const sasOptions = {
containerName: containerClient.containerName,
blobName: blobName
};
if (storedPolicyName == null) {
sasOptions.startsOn = new Date();
sasOptions.expiresOn = new Date(new Date().valueOf() + 3600 * 1000);
sasOptions.permissions = BlobSASPermissions.parse("r");
} else {
sasOptions.identifier = storedPolicyName;
}
const sasToken = generateBlobSASQueryParameters(sasOptions, sharedKeyCredential).toString();
console.log(`SAS token for blob is: ${sasToken}`);
return `${containerClient.getBlockBlobClient(blobName).url}?${sasToken}`;
}
Recursos para el desarrollo con JavaScript
Los vínculos siguientes proporcionan recursos útiles a los desarrolladores que usan la biblioteca cliente de Azure Storage para JavaScript.
API de Blob Storage
- Biblioteca cliente de Azure Storage Blob para JavaScript
- Código fuente de la biblioteca
- Paquete (npm)
- Documentación de referencia de API
Herramientas de JavaScript
Pasos siguientes
- 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])
- Create a service SAS (Creación de una SAS de servicio)