Create a service SAS (Creación de una SAS de servicio)

Una SAS de servicio delega el acceso a un recurso en solo uno de los servicios de almacenamiento: el servicio BLOB, cola, tabla o archivo. El URI de una firma de acceso compartido (SAS) de nivel de servicio se compone del URI para el recurso para el que la SAS delegará el acceso, seguido del token de SAS. El token de SAS es la cadena de consulta que incluye toda la información necesaria para autorizar una solicitud. Especifica el recurso al que puede tener acceso un cliente, los permisos concedidos y el intervalo de tiempo durante el cual la firma es válida. Una SAS también puede especificar la dirección IP o el intervalo de direcciones compatible desde el que pueden originarse las solicitudes, el protocolo compatible con el que se puede realizar una solicitud, un identificador de directiva de acceso opcional asociado a la solicitud. Por último, todos los tokens de SAS incluyen una firma.

Precaución

La firma de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y deben protegerse de la misma manera que una clave de cuenta. Es importante proteger una SAS de uso malintencionado o no intencionado. Sea cauto al distribuir una SAS y tenga un plan para revocar una SAS en peligro. Las operaciones que usan firmas de acceso compartido solo deben realizarse a través de una conexión HTTPS, y los URI de la firma de acceso compartido solo deben distribuirse en una conexión segura, como HTTPS.

Autorización de una SAS de servicio

Una SAS de servicio se protege mediante la clave de la cuenta de almacenamiento. Para crear una SAS de servicio, una aplicación cliente debe poseer la clave de cuenta.

Para usar credenciales de Azure AD para proteger una SAS para un contenedor o BLOB, cree una SAS de delegación de usuarios. Para más información, vea Creación de SAS de delegación de usuarios.

Compatibilidad de SAS de servicio para el acceso con ámbito de directorio

Una SAS de servicio admite el ámbito sr=d de directorio () cuando la versión de autenticación ( sv ) es 2020-02-10 o superior y se habilita un espacio de nombres jerárquico (SNP). La semántica del ámbito de directorio ( sr=d ) es similar a la del ámbito de contenedor ( sr=c ), salvo que el acceso está restringido a un directorio y a todos los archivos y subdirectorios que hay debajo de él. Cuando sr=d se especifica, el sdd parámetro de consulta también es obligatorio.

El formato de cadena a signo para la versión de autenticación 2020-02-10 no cambia.

Construcción de una SAS de servicio

En la ilustración siguiente se representan las partes del URI de firma de acceso compartido. Los elementos necesarios aparecen en color naranja. Los campos que componen el token de SAS se describen en las secciones siguientes.

Elementos de parámetros de una dirección URL de firma de acceso compartido (SAS)

En las secciones siguientes se describe cómo especificar los parámetros que componen el token de SAS de servicio.

Especificar el campo de versión firmada

El signedVersion sv campo () contiene la versión del servicio de la firma de acceso compartido. Este valor especifica la versión de la autorización de clave compartida usada por esta firma de acceso compartido (en el signature campo) y también especifica la versión del servicio para las solicitudes realizadas con esta firma de acceso compartido. Vea control de versiones de los servicios de Azure Storage para obtener información sobre qué versión se usa para ejecutar solicitudes a través de una firma de acceso compartido. Consulte delegar el acceso con una firma de acceso compartido para obtener más información sobre cómo este parámetro afecta a la autorización de las solicitudes realizadas con una firma de acceso compartido.

Nombre de campo Parámetro de consulta Descripción
signedVersion sv Necesario. Compatible con las versiones 2012-02-12 y posteriores. Versión del servicio de almacenamiento que se va a usar para autorizar las solicitudes realizadas con esta firma de acceso compartido y la versión del servicio que se va a usar al administrar las solicitudes realizadas con esta firma de acceso compartido. Vea [control de versiones de los servicios de Azure Storage] (control de versiones-para-Azure-Storage-Services.md para obtener información sobre qué versión se usa para ejecutar solicitudes a través de una firma de acceso compartido y cómo los clientes que ejecutan la solicitud pueden controlar la versión mediante el api-version parámetro de consulta o el x-ms-version encabezado.

Determinar la versión de una solicitud de firma de acceso compartido heredada

En escenarios heredados en los que no se utiliza signedVersion, Blob service aplica ciertas reglas para determinar la versión. Vea control de versiones de los servicios de Azure Storage para obtener más información acerca de estas reglas.

Importante

El software cliente puede experimentar un comportamiento de protocolo inesperado cuando se utiliza un URI de firma de acceso compartido que usa una versión del servicio de almacenamiento más reciente que el software cliente. El código que crea los URI de firma de acceso compartido debe utilizar versiones que el software cliente que realiza solicitudes de servicio de almacenamiento pueda entender.

Especificar el recurso firmado (solo Blob service)

El signedResource campo obligatorio ( sr ) especifica los recursos a los que se puede tener acceso a través de la firma de acceso compartido. En la tabla siguiente se describe cómo hacer referencia a un BLOB o a un recurso de contenedor en el token de SAS.

Resource Valor de parámetro Versiones compatibles Descripción
Blob b Todos Concede acceso al contenido y los metadatos del BLOB.
Versión de BLOB vn Versión 2018-11-09 y versiones posteriores Concede acceso al contenido y los metadatos de la versión del BLOB, pero no al BLOB base.
Instantánea de blob bs Versión 2018-11-09 y versiones posteriores Concede acceso al contenido y los metadatos de la instantánea del BLOB, pero no al BLOB base.
Contenedor c Todos Concede acceso al contenido y los metadatos de cualquier BLOB del contenedor y a la lista de blobs del contenedor.
Directorio d Versión 2020-02-10 y versiones posteriores Concede acceso al contenido y los metadatos de cualquier BLOB del directorio, y a la lista de blobs del directorio, en una cuenta de almacenamiento con un espacio de nombres jerárquico habilitado. Si se especifica un directorio para el signedResource campo, signedDirectoryDepth sdd también se requiere el parámetro (). Un directorio siempre está por debajo de un contenedor.

Especificar el recurso firmado (servicio de archivos)

SAS es compatible con el servicio de archivos en la versión 2015-02-21 y posteriores.

El campo signedResource especifica qué recursos son accesibles a través de la firma de acceso compartido. En la tabla siguiente se describe cómo hacer referencia a un archivo o recurso compartido en el URI.

Nombre de campo Parámetro de consulta Descripción
signedResource sr Necesario.

Especifique f si el recurso compartido es un archivo. Esto concede acceso al contenido y los metadatos del archivo.

Especifique s si el recurso compartido es un recurso compartido. Esto concede acceso al contenido y los metadatos de cualquier archivo del recurso compartido y a la lista de directorios y archivos del recurso compartido.

Especificar parámetros de consulta para invalidar encabezados de respuesta (solo servicios de BLOB y archivo)

Para definir los valores de ciertos encabezados de respuesta que se van a devolver cuando se utiliza la firma de acceso compartido en una solicitud, puede especificar encabezados de respuesta en los parámetros de consulta. Esta característica se admite a partir de la versión 2013-08-15 para el Blob service y la versión 2015-02-21 para el servicio archivo. Las firmas de acceso compartido que usan esta característica deben incluir el sv parámetro establecido en 2013-08-15 o posterior para el BLOB Service, o en 2015-02-21 o posterior para el servicio archivo.

Los encabezados de respuesta y los parámetros de consulta correspondientes son los siguientes:

Nombre del encabezado de respuesta Parámetro de consulta de SAS correspondiente
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Por ejemplo, si especifica el rsct=binary parámetro de consulta en una firma de acceso compartido creada con la versión 2013-08-15 o posterior, el Content-Type encabezado de respuesta se establece en binary . Este valor reemplaza el valor del encabezado Content-Type almacenado para el blob para una solicitud que usa esta firma de acceso compartido solamente.

Si crea una firma de acceso compartido que especifica encabezados de respuesta como parámetros de consulta, debe incluirlos en la cadena para firmar que se usa para construir la cadena de firma. Vea la sección construir la cadena de firma siguiente para obtener más información y ejemplos de SAS de servicio para obtener más ejemplos.

Especificar el nombre de la tabla (solo Table service)

El campo tableName especifica el nombre de la tabla que se va a compartir.

Nombre de campo Parámetro de consulta Descripción
tableName tn Necesario. El objeto de la tabla que se va a compartir.

Especificación de la Directiva de acceso

La parte de directiva de acceso del URI indica el período de tiempo durante el cual la firma de acceso compartido es válida y los permisos que se van a conceder al usuario. Las partes del URI que se describen en la tabla siguiente componen la directiva de acceso.

Nombre de campo Parámetro de consulta Descripción
signedStart st Opcional. La hora a la que la firma de acceso compartido es válida, expresada en uno de los formatos ISO 8601 UTC aceptados. Si se omite, se usa la hora UTC actual como hora de inicio.

En las versiones anteriores a 2012-02-12, la duración entre signedStart y signedExpiry no puede superar una hora a menos que se utilice una directiva de contenedor. Para obtener más información acerca de los formatos UTC aceptados, consulte aplicar formato a valores DATETIME.
signedExpiry se Necesario. La hora a la que la firma de acceso compartido deja de ser válida, expresada en uno de los formatos ISO 8601 UTC aceptados. Este campo se debe omitir si se ha especificado en una directiva de acceso almacenada asociada. Para obtener más información acerca de los formatos UTC aceptados, consulte aplicar formato a valores DATETIME.
signedPermissions sp Necesario. Permisos asociados a la firma de acceso compartido. El usuario está restringido a las operaciones permitidas por los permisos. Este campo se debe omitir si se ha especificado en una directiva de acceso almacenada asociada.
startPk

startRk
spk

srk
Solo el servicio Tabla.

Opcional, pero startPk debe acompañar a startRk. Claves mínimas de partición y fila accesibles con esta firma de acceso compartido. Los valores de clave son inclusivos. Si se omite, no hay ningún límite inferior en las entidades de tabla a las que se puede tener acceso.
endPk

endRk
epk

erk
Solo el servicio Tabla.

Opcional, pero endPk debe acompañar a endRk. Claves máximas de partición y fila accesibles con esta firma de acceso compartido. Los valores de clave son inclusivos. Si se omite, no hay ningún límite superior en las entidades de tabla a las que se puede tener acceso.

El campo signedPermissions es obligatorio en el URI a menos que se especifique como parte de una directiva de acceso almacenada. Los campos startPk, startRk, endPk y endRk solo se pueden especificar en un recurso de tabla.

Especificar permisos

Los permisos especificados para signedPermissions el sp campo () en el token de SAS indican qué operaciones puede realizar un cliente en el recurso.

Los permisos se pueden combinar para permitir que un cliente realice varias operaciones con la misma SAS. Al construir la SAS, debe incluir los permisos en el orden siguiente:

racwdxltmeop

Entre los ejemplos de valores de permisos válidos para un contenedor se incluyen rw , rd , rl , wd , wl y rl . Entre los ejemplos de valores no válidos se incluyen wr , dr , lr y dw . No se permite especificar una designación de permisos más de una vez.

Una SAS de servicio no puede conceder acceso a ciertas operaciones:

  • Los contenedores, las colas y las tablas no se pueden crear, eliminar ni enumerar.
  • Los metadatos y las propiedades de los contenedores no se pueden leer o escribir.
  • Las colas no se pueden borrar y sus metadatos no se pueden escribir.
  • Los contenedores no se pueden conceder.

Para construir una SAS que conceda acceso a estas operaciones, use una SAS de cuenta. Para obtener más información, consulte creación de una SAS de cuenta.

Importante

La firma de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y deben protegerse de la misma manera que una clave de cuenta. Las operaciones que usan firmas de acceso compartido solo deben realizarse a través de una conexión HTTPS, y los URI de la firma de acceso compartido solo deben distribuirse en una conexión segura, como HTTPS.

En las tablas de las secciones siguientes se muestran los permisos admitidos para cada tipo de recurso.

Permisos para un directorio, un contenedor o un BLOB

En la tabla siguiente se muestran los permisos admitidos para cada tipo de recurso.

Permiso Símbolo de URI Resource Compatibilidad con versiones Operaciones permitidas
Lectura r Contenedor
Directorio
Blob
Todos Lea el contenido, la lista de bloques, las propiedades y los metadatos de cualquier BLOB del contenedor o directorio. Use un BLOB como origen de una operación de copia.
Sumar a Contenedor
Directorio
Blob
Todos Agregue un bloque a un BLOB en anexos.
Crear c Contenedor
Directorio
Blob
Todos Escribir un BLOB nuevo, crear una instantánea de un BLOB o copiar un BLOB en un nuevo BLOB.
Escritura w Contenedor
Directorio
Blob
Todos Crear o escribir contenido, propiedades, metadatos o listas de bloqueo. Tomar una instantánea o conceder el blob. Cambiar el tamaño del blob (blob en páginas solamente). Use el BLOB como destino de una operación de copia.
Eliminar d Contenedor
Directorio
Blob
Todos Eliminar un blob. Para la versión 2017-07-29 y versiones posteriores, el permiso Delete también permite interrumpir una concesión en un BLOB. Para obtener más información, consulte la operación Lease BLOB .
Eliminar versión x Contenedor
Blob
Versión 2019-12-12 o posterior Eliminar una versión de un blob
Eliminación permanente del área de trabajo s Blob Versión 2020-02-10 o posterior Eliminar permanentemente una instantánea o versión de BLOB.
List l Contenedor
Directorio
Todos Enumerar blobs de forma no recursiva.
Etiquetas t Blob Versión 2019-12-12 o posterior Leer o escribir las etiquetas en un BLOB.
Move m Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Mueva un BLOB o un directorio y su contenido a una nueva ubicación. Opcionalmente, esta operación se puede restringir al propietario del BLOB secundario, directorio o directorio principal si el saoid parámetro se incluye en el token de SAS y el bit permanente se establece en el directorio principal.
Execute e Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Obtenga las propiedades del sistema y, si el espacio de nombres jerárquico está habilitado para la cuenta de almacenamiento, obtenga la ACL de POSIX de un BLOB. Si el espacio de nombres jerárquico está habilitado y el autor de la llamada es el propietario de un BLOB, este permiso concede la capacidad de establecer el grupo propietario, los permisos POSIX y la ACL POSIX del BLOB. No permite que el autor de la llamada Lea los metadatos definidos por el usuario.
Propiedad o Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Cuando el espacio de nombres jerárquico está habilitado, este permiso permite al autor de la llamada establecer el propietario o el grupo propietario, o actuar como propietario al cambiar el nombre o eliminar un directorio o BLOB dentro de un directorio que tiene el conjunto de bits permanente.
Permisos p Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Cuando el espacio de nombres jerárquico está habilitado, este permiso permite que el autor de la llamada establezca permisos y ACL de POSIX en directorios y BLOBs.

Permisos para un archivo

Permiso Símbolo de URI Operaciones permitidas
Lectura r Lea el contenido, las propiedades y los metadatos. Use el archivo como origen de una operación de copia.
Crear c Cree un nuevo archivo o copie un archivo en un archivo nuevo.
Escritura w Crear o escribir contenido, propiedades, metadatos. Cambie el tamaño del archivo. Use el archivo como destino de una operación de copia.
Eliminar d Elimine el archivo.

Permiso para un recurso compartido

Permiso Símbolo de URI Operaciones permitidas
Lectura r Leer el contenido, las propiedades o los metadatos de cualquier archivo del recurso compartido. Use cualquier archivo del recurso compartido como el origen de una operación de copia.
Crear c Cree un nuevo archivo en el recurso compartido o copie un archivo en un archivo nuevo del recurso compartido.
Escritura w Para cualquier archivo del recurso compartido, cree o escriba contenido, propiedades o metadatos. Cambie el tamaño del archivo. Use el archivo como destino de una operación de copia. Nota: No puede conceder permisos para leer o escribir propiedades de recursos compartidos o metadatos con una SAS de servicio. En su lugar, use una SAS de cuenta.
Eliminar d Elimine cualquier archivo del recurso compartido. Nota: No puede conceder permisos para eliminar un recurso compartido con una SAS de servicio. En su lugar, use una SAS de cuenta.
List l Enumerar los archivos y directorios del recurso compartido.

Permisos para una cola

Permiso Símbolo de URI Operaciones permitidas
Lectura r Leer metadatos y propiedades, incluidos el número de mensajes. Consultar mensajes.
Sumar a Agregar mensajes a la cola.
Actualizar u Actualizar mensajes en la cola. Nota: Use el permiso procesar con la actualización para que pueda obtener primero el mensaje que desea actualizar.
Proceso p Obtener y eliminar mensajes de la cola.

Permisos para una tabla

Permiso Símbolo de URI Operaciones permitidas
Consultar r Obtener y consultar entidades.
Sumar a Agregar entidades. Nota: Los permisos Add y Update son necesarios para las operaciones de Upsert.
Actualizar u Actualizar entidades. Nota: Los permisos Add y Update son necesarios para las operaciones de Upsert.
Eliminar d Eliminar entidades.

Especificación de la dirección IP o el intervalo IP

A partir de la versión 2015-04-05, signedIp el sip campo opcional () especifica una dirección IP o un intervalo de direcciones IP desde el que aceptar solicitudes. Si la dirección IP desde la que se origina la solicitud no coincide con la dirección IP o el intervalo de direcciones especificado en el token de SAS, la solicitud no está autorizada.

Al especificar un intervalo de direcciones IP, tenga en cuenta que el intervalo es inclusivo. Por ejemplo, si sip=168.1.5.65 se especifica o sip=168.1.5.60-168.1.5.70 en la SAS se restringe la solicitud a esas direcciones IP.

Importante

Una SAS usada por un cliente que se encuentra en la misma región de Azure que la cuenta de almacenamiento puede no incluir una dirección IP de salida pública para el signedIp campo. Se producirá un error en las solicitudes realizadas desde dentro de la misma región mediante una SAS con una dirección IP de salida pública especificada.

Especificar el protocolo HTTP

A partir de la versión 2015-04-05, signedProtocol el spr campo opcional () especifica el protocolo permitido para una solicitud realizada con la SAS. Los valores posibles son HTTPS y HTTP ( https,http ) o solo https ( https ). El valor predeterminado es https,http. Tenga en cuenta que HTTP solo no es un valor permitido.

Especificar intervalos de acceso a tablas

Los campos startPk, startRk, endPk y endRk definen un intervalo de entidades de tabla asociadas a una firma de acceso compartido. Las consultas de tabla solo devolverán resultados que estén dentro del intervalo, y los intentos de utilizar la firma de acceso compartido para agregar, actualizar o eliminar entidades fuera de este intervalo producirán un error. Si startPk es igual a endPk, la firma de acceso compartido solo autoriza el acceso a entidades de una partición de la tabla. Si startPk es igual a endPk y startRk es igual a endRk, la firma de acceso compartido solo puede tener acceso a una entidad de una partición. Utilice la tabla siguiente para entender cómo estos campos restringen el acceso a las entidades de una tabla.

Campos presentes Ámbito de restricción
startPk partitionKey >= startPk
endPk <partitionKey = endPk
startPk, startRk (partitionKey > startPk ) || (partitionKey = = startPk && rowKey >= startRk )
endPk, endRk (partitionKey < endPk ) || (partitionKey = = endPk && rowKey <= endRk )

Especificar la profundidad del directorio

Cuando se habilita un espacio de nombres jerárquico y el signedResource campo especifica un directorio ( sr=d ), también debe especificar el signedDirectoryDepth campo ( sdd ) para indicar el número de subdirectorios en el directorio raíz. El valor del sdd campo debe ser un entero no negativo.

Por ejemplo, el directorio raíz https://{account}.blob.core.windows.net/{container}/ tiene una profundidad de 0. Cada subdirectorio situado debajo del directorio raíz agrega la profundidad en uno. El directorio https://{account}.blob.core.windows.net/{container}/d1/d2 tiene una profundidad de dos.

Este campo es compatible con la versión 2020-02-10 o posterior.

Especificar el identificador firmado

Al especificar el campo signedIdentifier en el URI se relaciona la firma de acceso compartido dada con una directiva de acceso almacenada correspondiente. Una directiva de acceso almacenada proporciona una medida adicional de control sobre una o varias firmas de acceso compartido, incluida la posibilidad de revocar la firma si es necesario. Cada contenedor, cola, tabla o recurso compartido puede tener hasta 5 directivas de acceso almacenadas.

En la tabla siguiente se describe cómo hacer referencia a un identificador firmado en el URI.

Nombre de campo Parámetro de consulta Descripción
signedIdentifier si Opcional. Un valor único de 64 caracteres de longitud como máximo que se correlaciona con una directiva de acceso especificada para el contenedor, la cola o la tabla.

Una directiva de acceso almacenada incluye un identificador firmado, que es un valor de hasta 64 caracteres que es único dentro del recurso. El valor de este identificador firmado se puede especificar para el campo signedidentifier en el URI de la firma de acceso compartido. Al especificar un identificador firmado en el URI se asocia la firma a la directiva de acceso almacenada. Para establecer una directiva de acceso de nivel de contenedor mediante la API de REST, vea delegar el acceso con una firma de acceso compartido.

Especificar la firma

La parte de la firma del URI se usa para autorizar la solicitud realizada con la firma de acceso compartido. Azure Storage usa un esquema de autorización de claves compartidas para autorizar una SAS de servicio. En la tabla siguiente se describe cómo especificar la firma en el URI.

Nombre de campo Parámetro de consulta Descripción
signature sig String-to-sign es una cadena única creada a partir de los campos que se deben comprobar para autorizar la solicitud. La firma es un HMAC calculado sobre string-to-sign (la cadena para firmar) y una clave con el algoritmo SHA256, y después codificado con Base64.

Construir la cadena de firma

Para construir la cadena de firma de una firma de acceso compartido, construya primero el valor string-to-sign a partir de los campos que componen la solicitud y codifique después la cadena como UTF-8 y calcule la firma mediante el algoritmo HMAC-SHA256. Tenga en cuenta que los campos incluidos en string-to-sign se deben descodificar como una dirección URL.

Versión 2018-11-09 y versiones posteriores

La versión 2018-11-09 agrega compatibilidad para los campos de fecha y hora de la instantánea de blobs firmados. Deben incluirse en la cadena para firmar. Para construir el valor String-to-sign para Blob service recursos, use el siguiente formato:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               signedResource + "\n"
               signedSnapshotTime + "\n" +
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  
Versión 2015-04-05 y versiones posteriores

La versión 2015-04-05 agrega compatibilidad con los campos IP firmada y protocolo firmado. Deben incluirse en la cadena para firmar. Para construir el valor String-to-sign de los recursos BLOB o File Service, use el formato siguiente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

Para construir el valor String-to-sign para Table service recursos, use el siguiente formato:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               startingPartitionKey + "\n"  
               startingRowKey + "\n"  
               endingPartitionKey + "\n"  
               endingRowKey  
  

Para construir el valor String-to-sign para Queue service recursos, use el siguiente formato:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion  
  
Versión 2013-08-15 a la versión 2015-02-21

Para construir el valor String-to-sign de los recursos BLOB o File Service con la versión 2013-08-15 a través de la versión 2015-02-21, use el formato siguiente. Tenga en cuenta que para el servicio de archivos, SAS se admite a partir de la versión 2015-02-21.

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

Para construir el valor string-to-sign para una tabla, utilice el formato siguiente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               startPk + "\n" +  
               startRk + "\n" +  
               endPk + "\n" +  
               endRk  
  

Para construir el valor String-to-sign para una cola, use el siguiente formato:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion 
Versión 2012-02-12

Para construir el valor string-to-sign de los recursos de Blob service para la versión 2012-02-12, utilice el formato siguiente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion  
Versiones anteriores a 2012-02-12

Para construir el valor string-to-sign de los recursos del servicio Blob para las versiones anteriores a 12.02.12, utilice el formato siguiente:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier  
  

Al construir la cadena que se va a firmar, tenga en cuenta lo siguiente:

  • Si un campo es opcional y no se proporciona como parte de la solicitud, especifique una cadena vacía para ese campo. No olvide incluir el carácter de nueva línea (\n) después de la cadena vacía.

  • El valor string-to-sign para una tabla debe incluir los parámetros adicionales, incluso aunque sean cadenas vacías.

  • La parte signedpermission de la cadena debe incluir las designaciones de permisos en un orden fijo que es específico de cada tipo de recurso. Cualquier combinación de estos permisos es aceptable, pero el orden de las letras de los permisos debe coincidir con el orden de la tabla siguiente.

    Tipo de recurso Orden de los permisos
    Blob racwd
    Contenedor racwdl
    Cola raup
    Archivo rcwd
    Compartir rcwdl
    Tabla raud

    Por ejemplo, ejemplos de valores de permisos válidos para un contenedor son rw ,, rd rl , wd , wl y rl . Entre los ejemplos de valores no válidos se incluyen wr , dr , lr y dw . No se permite especificar una designación de permisos más de una vez.

  • Proporcione un valor para la parte signedIdentifier de la cadena si va a asociar la solicitud a una directiva de acceso almacenada.

  • Una firma de acceso compartido que especifica una versión del servicio de almacenamiento antes 2012-02-12 solo puede compartir un BLOB o contenedor y debe omitir signedVersion y la nueva línea antes de ella.

  • La parte canonicalizedResource de la cadena es una ruta de acceso canónica al recurso firmado. Debe incluir el nombre del servicio (BLOB, tabla, cola o archivo) para la versión 2015-02-21 o posterior, el nombre de la cuenta de almacenamiento y el nombre del recurso, y debe descodificarse como dirección URL. Los nombres de los blobs deben incluir el contenedor del blob. Los nombres de tabla deben estar en minúsculas.

La cadena de recurso con formato canónico para un contenedor, cola, tabla o recurso compartido de archivos debe omitir la barra diagonal final ('/') para una SAS que proporcione acceso a ese objeto.

En los siguientes ejemplos se muestra cómo construir la canonicalizedResource parte de la cadena, en función del tipo de recurso.

Contenedores

Para la versión 2015-02-21 y posteriores:

URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  

En el caso de las versiones anteriores a 2015-02-21:

URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"  

Blobs

Para la versión 2015-02-21 y posteriores:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

En el caso de las versiones anteriores a 2015-02-21:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"  

Recursos compartidos de archivos

URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"  

Archivos

URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"  

Colas

Para la versión 2015-02-21 y posteriores:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/queue/myaccount/thumbnails"  

En el caso de las versiones anteriores a 2015-02-21:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/myaccount/thumbnails"  

Tablas

Si el recurso firmado es una tabla, asegúrese de que el nombre de la tabla está en minúsculas en el formato con formato canónico.

Para la versión 2015-02-21 y posteriores:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/table/myaccount/employees"  

En el caso de las versiones anteriores a 2015-02-21:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/myaccount/employees"  

Duración y revocación de una firma de acceso compartido

Las firmas de acceso compartido conceden derechos de acceso a los usuarios para los recursos de la cuenta de almacenamiento. Al planear el uso de una SAS, piense en la duración de la SAS y si la aplicación puede necesitar revocar los derechos de acceso en determinadas circunstancias.

SAS ad hoc frente a Directiva de acceso almacenada

Una SAS de servicio puede adoptar una de estas dos formas:

  • SAS ad-hoc: cuando cree una SAS ad-hoc, la hora de inicio, la hora de expiración y los permisos para la SAS se especifican en el URI de SAS (o se encuentran implícitos en el caso de que se omita la hora de inicio). Cualquier tipo de SAS puede ser una SAS ad-hoc.

    Puede administrar la duración de una SAS ad hoc a través del signedExpiry campo. Si desea seguir concediendo acceso al recurso a un cliente después de que transcurra la hora de expiración, debe emitir una nueva firma. Se recomienda que use una duración breve de la firma de acceso compartido. Antes de la versión 2012-02-12, una firma de acceso compartido no asociada a una directiva de acceso almacenada no podía tener un período activo que superó una hora.

  • SAS con Directiva de acceso almacenada: Se define una directiva de acceso almacenada en un contenedor de recursos, que puede ser un contenedor de blobs, una tabla, una cola o un recurso compartido de archivos. La Directiva de acceso almacenada se puede usar para administrar las restricciones de una o varias firmas de acceso compartido. Cuando asocia una SAS a una directiva de acceso almacenada, la SAS hereda las restricciones de — la hora de inicio, la hora de expiración y los permisos — definidos para la Directiva de acceso almacenada.

    La directiva de acceso almacenada se representa mediante el campo signedIdentifier del URI. Una directiva de acceso almacenada proporciona una medida adicional de control sobre una o varias firmas de acceso compartido, incluida la posibilidad de revocar la firma si es necesario.

Revocación de una SAS

Dado que un URI de SAS es una dirección URL, cualquier persona que obtenga la SAS puede utilizarla, independientemente de quién la creó originalmente. Si una SAS se encuentra disponible públicamente, cualquier persona del mundo puede usarla. Una SAS concede acceso a los recursos a cualquier persona que cuente con ella hasta que se sucede uno de las siguientes situaciones:

  1. Se alcanza la hora de expiración especificada en una SAS ad hoc.

  2. Se alcanza la hora de expiración especificada en la Directiva de acceso almacenada a la que hace referencia la SAS, si se hace referencia a una directiva de acceso almacenada, y si la Directiva de acceso especifica una hora de expiración. Se puede tener acceso a la hora de expiración porque transcurre el intervalo o porque se ha modificado la Directiva de acceso almacenada para tener una hora de expiración en el pasado, que es una manera de revocar la SAS.

  3. La Directiva de acceso almacenada a la que hace referencia la SAS se elimina, lo que revoca la SAS. Si Azure Storage no encuentra la Directiva de acceso almacenada especificada en la firma de acceso compartido, el cliente no puede tener acceso al recurso indicado por el URI.

    Si vuelve a crear la Directiva de acceso almacenada con exactamente el mismo nombre que la Directiva eliminada, todos los tokens de SAS existentes volverán a ser válidos de acuerdo con los permisos asociados a esa Directiva de acceso almacenada, suponiendo que el tiempo de expiración de la SAS no haya pasado. Si prevé revocar la SAS, asegúrese de usar un nombre distinto si vuelve a crear la directiva de acceso con una hora de expiración futura.

  4. Se vuelve a generar la clave de cuenta que se usó para crear la SAS. La regeneración de una clave de cuenta provocará que todos los componentes de la aplicación que usen esa clave no tengan autorización hasta que se actualicen para usar la otra clave de cuenta válida o la clave de cuenta que se acaba de regenerar. Volver a generar la clave de cuenta es la única manera de revocar de inmediato una SAS ad hoc.

Importante

Los URI de firma de acceso compartido están asociados a la clave de la cuenta que se utiliza para crear la firma y a la directiva de acceso almacenada correspondiente (en su caso). Si no se especifica una directiva de acceso almacenada, la única forma de revocar una firma de acceso compartido es cambiar la clave de la cuenta.

En los procedimientos recomendados se recomienda usar una directiva de acceso almacenada con una SAS de servicio. Si decide no usar una directiva de acceso almacenada, asegúrese de mantener el intervalo de validez de la SAS ad hoc. Para obtener más información sobre la Asociación de una SAS de servicio con una directiva de acceso almacenada, consulte definir una directiva de acceso almacenada.

Ejemplo de SAS de servicio

En el ejemplo siguiente se muestra un URI de SAS de servicio que proporciona permisos de lectura y escritura a un BLOB. La tabla divide cada parte del URI:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2019-02-02&st=2019-04-29T22%3A18%3A26Z&se=2019-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
Nombre Parte de SAS Descripción
URI de recurso https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt La dirección del blob. Tenga en cuenta que se recomienda fehacientemente el uso de HTTPS.
Versión de servicios de almacenamiento sv=2019-02-02 En la versión de servicios de almacenamiento 2012-02-12 y superiores, este parámetro indica qué versión usar.
Hora de inicio st=2019-04-29T22%3A18%3A26Z Se especifica en hora UTC. Si desea que la SAS sea válida de inmediato, omita la hora de inicio.
Hora de expiración se=2019-04-30T02%3A23%3A26Z Se especifica en hora UTC.
Resource sr=b El recurso es un blob.
Permisos sp=rw Los permisos que concede la SAS son de lectura y escritura.
Intervalo de IP sip=168.1.5.60-168.1.5.70 El intervalo de direcciones IP desde el que se aceptará una solicitud.
Protocolo spr=https Solo se permiten solicitudes con HTTPS.
Firma sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D Se usa para autorizar el acceso al blob. La firma es un HMAC que se procesa mediante una cadena para firmar y una clave con el algoritmo SHA256, y que se codifica mediante Base64.

Consulte también