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

Una firma de acceso compartido (SAS) de servicio delega el acceso a un recurso en solo uno de los servicios de almacenamiento: Azure Blob Storage, Azure Queue Storage, Azure Table Storage o Azure Files. El URI de una SAS de nivel de servicio consta del URI al 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. El token especifica el recurso al que un cliente puede tener acceso, los permisos concedidos y el período de tiempo durante el cual la firma es válida.

Una SAS también puede especificar la dirección IP admitida o el intervalo de direcciones desde el que se pueden originar las solicitudes, el protocolo admitido con el que se puede realizar una solicitud o un identificador de directiva de acceso opcional asociado a la solicitud.

Por último, cada token de SAS incluye una firma.

Precaución

Las firmas de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y debe protegerlos igual que protegería 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 se deben realizar a través de una conexión HTTPS y los URI de SAS solo se deben distribuir en una conexión segura, como HTTPS.

Autorización de una SAS de servicio

Puede proteger una SAS de cuenta mediante una clave de cuenta de almacenamiento. Al crear una SAS de cuenta, la aplicación cliente debe poseer la clave de cuenta.

Para usar Microsoft Entra credenciales para proteger una SAS para un contenedor o blob, cree una SAS de delegación de usuarios.

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

Una SAS de servicio admite el ámbito de directorio (sr=d) cuando la versión de autorización (sv) es 2020-02-10 o posterior y se habilita un espacio de nombres jerárquico. 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 los archivos y subdirectorios que contiene. Cuando sr=d se especifica , también se requiere el parámetro de sdd consulta.

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

Construcción de una SAS de servicio

La siguiente imagen representa las partes del URI de firma de acceso compartido. Las partes necesarias aparecen en naranja. Los campos que componen el token de SAS se describen en las secciones posteriores.

Diagrama de los elementos de parámetro de una dirección URL de firma de acceso compartido.

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

Especificar el signedVersion campo

El signedVersion campo (sv) contiene la versión de servicio de la firma de acceso compartido. Este valor especifica la versión de autorización de clave compartida que usa esta firma de acceso compartido (en el signature campo). El valor también especifica la versión del servicio para las solicitudes que se realizan con esta firma de acceso compartido.

Para obtener información sobre qué versión se usa al ejecutar solicitudes a través de una firma de acceso compartido, consulte Control de versiones para los servicios de Azure Storage.

Para obtener información sobre cómo afecta este parámetro a la autorización de las solicitudes realizadas con una firma de acceso compartido, consulte Delegación del acceso con una firma de acceso compartido.

Nombre del campo Parámetro de consulta Descripción
signedVersion sv Necesario. Compatible con la versión 2012-02-12 y posteriores. La versión del servicio de almacenamiento que se va a usar para autorizar y controlar las solicitudes que realice con esta firma de acceso compartido. Para más información, consulte Control de versiones para los servicios de Azure Storage.

Determinación de la versión de una solicitud SAS heredada

En escenarios heredados en signedVersion los que no se usa, Blob Storage aplica reglas para determinar la versión. Para más información sobre estas reglas, consulte Control de versiones para los servicios de Azure Storage.

Importante

El software cliente puede experimentar un comportamiento de protocolo inesperado cuando se usa 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 construye URI de firma de acceso compartido debe basarse en las versiones que entiende el software cliente que realiza solicitudes de servicio de almacenamiento.

Especificación del recurso firmado (solo Blob Storage)

El campo obligatorio signedResource (sr) 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 recurso de blob o contenedor en el token de SAS.

Recurso Valor del parámetro Versiones compatibles Descripción
Blob b All Concede acceso al contenido y los metadatos del blob.
Versión de un blob Bv 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 2018-11-09 y versiones posteriores Concede acceso al contenido y los metadatos de la instantánea de blob, pero no al blob base.
Contenedor c Todo Concede acceso al contenido y los metadatos de cualquier blob del contenedor y a la lista de blobs del contenedor.
Directorio d 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, también se requiere el signedDirectoryDepth parámetro (sdd). Un directorio siempre está anidado dentro de un contenedor.

Especificar el recurso firmado (Azure Files)

SAS es compatible con Azure Files 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 del campo Parámetro de consulta Descripción
signedResource sr Necesario.

Especifique f si el recurso compartido es un archivo. Al hacerlo, se concede acceso al contenido y los metadatos del archivo.

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

Especificación de parámetros de consulta para invalidar los encabezados de respuesta (Solo Blob Storage y Azure Files)

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 Blob Storage y la versión 2015-02-21 para Azure Files. Las firmas de acceso compartido que usan esta característica deben incluir el sv parámetro establecido 2013-08-15 en o posterior para Blob Storage, o en 2015-02-21 o posterior para Azure Files.

Los encabezados de respuesta y los parámetros de consulta correspondientes se enumeran en la tabla siguiente:

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 parámetro de rsct=binary 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 binaryen . Este valor invalida el Content-Type valor de encabezado que se almacena para el blob para una solicitud que solo usa esta firma de acceso compartido.

Si crea una firma de acceso compartido que especifica encabezados de respuesta como parámetros de consulta, debe incluirlos en la cadena a signo que se usa para construir la cadena de firma. Para obtener más información, vea la sección "Construir la cadena de firma" más adelante en este artículo. Para obtener ejemplos adicionales, consulte Ejemplos de SAS de servicio.

Especificar el nombre de la tabla (solo Table Storage)

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

Nombre del 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 la directiva de acceso del URI indica el período de tiempo durante el que la firma de acceso compartido es válida y los permisos que se van a conceder al usuario. Las partes del URI que componen la directiva de acceso se describen en la tabla siguiente:

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

En versiones anteriores a 2012-02-12, la duración entre signedStart y signedExpiry no puede superar una hora a menos que se use una directiva de contenedor. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores de fecha y hora.
signedExpiry se Necesario. Hora en que la firma de acceso compartido deja de ser válida, expresada en uno de los formatos ISO 8601 UTC aceptados. Debe omitir este campo si se ha especificado en una directiva de acceso almacenada asociada. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores de fecha y hora.
signedPermissions1 sp Necesario. Los permisos asociados a la firma de acceso compartido. El usuario está restringido a las operaciones permitidas por los permisos. Debe omitir este campo si se ha especificado en una directiva de acceso almacenada asociada.
startPk2

startRk2
spk

srk
Solo Table Storage.

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

endRk2
epk

erk
Solo Table Storage.

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

1 El signedPermissions campo es necesario en el URI a menos que se especifique como parte de una directiva de acceso almacenada.
2 Los startPkcampos , startRk, endPky endRk solo se pueden especificar en los recursos de Table Storage.

Especificar permisos

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

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

racwdxltmeop

Algunos ejemplos de opciones de configuración de permisos válidas para un contenedor incluyen rw, rd, wdrl, , wly rl. Entre los ejemplos de valores no válidos se incluyen wr, drlr, y dw. No se puede especificar una designación de permiso más de una vez.

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

  • Los contenedores, las colas y las tablas no se pueden crear, eliminar ni enumerar.
  • Los metadatos y propiedades del contenedor no se pueden leer ni 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

Las firmas de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y debe protegerlos igual que protegería una clave de cuenta. Realice operaciones que usen firmas de acceso compartido solo a través de una conexión HTTPS y distribuyan los URI de firma de acceso compartido solo en una conexión segura, como HTTPS.

Los permisos que se admiten para cada tipo de recurso se describen en las secciones siguientes.

Permisos para un directorio, un contenedor o blob

Los permisos que se admiten para cada tipo de recurso se describen en la tabla siguiente:

Permiso Símbolo de URI Recurso Compatibilidad con versiones Operaciones permitidas
Leer r Contenedor
Directorio
Blob
Todo 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
Todo Agregue un bloque a un blob en anexos.
Crear c Contenedor
Directorio
Blob
Todo Escriba un nuevo blob, una instantánea de un blob o copie un blob en un nuevo blob.
Escritura w Contenedor
Directorio
Blob
Todo Cree o escriba contenido, propiedades, metadatos o lista de bloqueos. 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
Todo Eliminar un blob. Para la versión 2017-07-29 y posteriores, el permiso Eliminar también permite interrumpir una concesión en un blob. Para más información, consulte la operación De concesión de blobs .
Eliminar versión x Contenedor
Blob
2019-12-12 y versiones posteriores Eliminar una versión de un blob
Eliminar permanentemente y Blob 2020-02-10 y versiones posteriores Elimine permanentemente una instantánea de blob o una versión.
List l Contenedor
Directorio
Todo Enumerar blobs de forma no recursiva.
Etiquetas t Blob 2019-12-12 y versiones posteriores Lea o escriba las etiquetas en un blob.
Buscar f Contenedor 2019-12-12 y versiones posteriores Busque blobs con etiquetas de índice.
Move m Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores 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, el directorio o el directorio primario si el saoid parámetro se incluye en el token de SAS y el bit pegajoso se establece en el directorio primario.
Execute e Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores Obtenga las propiedades del sistema y, si el espacio de nombres jerárquico está habilitado para la cuenta de almacenamiento, obtenga la ACL 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 de POSIX del blob. no permite que el autor de la llamada lea los metadatos definidos por el usuario.
Propiedad o Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores Cuando se habilita el espacio de nombres jerárquico, 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 un blob dentro de un directorio que tenga establecido el bit pegajoso.
Permisos p Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores Cuando se habilita el espacio de nombres jerárquico, este permiso permite al autor de la llamada establecer permisos y ACL POSIX en directorios y blobs.
Establecer directiva de inmutabilidad i Contenedor
Blob
2020-06-12 y versiones posteriores Establezca o elimine la directiva de inmutabilidad o la suspensión legal en un blob.

Permisos para un archivo

Permiso Símbolo de URI Operaciones permitidas
Leer 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 Eliminar el archivo.

Permisos para un recurso compartido

Permiso Símbolo de URI Operaciones permitidas
Leer r Lea el contenido, las propiedades o los metadatos de cualquier archivo del recurso compartido. Use cualquier archivo del recurso compartido como origen de una operación de copia.
Crear c Cree un nuevo archivo en el recurso compartido o copie un archivo en un nuevo archivo 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 se pueden conceder permisos para leer o escribir propiedades o metadatos de recursos compartidos mediante una SAS de servicio. En su lugar, use una SAS de cuenta.
Eliminar d Elimine cualquier archivo del recurso compartido. Nota: No se pueden conceder permisos para eliminar un recurso compartido mediante una SAS de servicio. En su lugar, use una SAS de cuenta.
List l Enumera los archivos y directorios del recurso compartido.

Permisos para una cola

Permiso Símbolo de URI Operaciones permitidas
Leer 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 Proceso con Update 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: Se requieren permisos para agregar y actualizar para las operaciones upsert.
Actualizar u Actualizar entidades. Nota: Se requieren permisos para agregar y actualizar para las operaciones upsert.
Eliminar d Eliminar entidades.

Especificar una dirección IP o un intervalo IP

A partir de la versión 2015-04-05, el campo opcional signedIp (sip) especifica una dirección IP pública o un intervalo de direcciones IP públicas desde las 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. Solo se admiten direcciones IPv4.

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

En la tabla siguiente se describe si se debe incluir el signedIp campo en un token de SAS para un escenario especificado, en función del entorno de cliente y la ubicación de la cuenta de almacenamiento.

Entorno de cliente Ubicación de la cuenta de almacenamiento Recomendación
Cliente que se ejecuta en Azure En la misma región que el cliente Una SAS que se proporciona al cliente en este escenario no debe incluir una dirección IP de salida para el signedIp campo. Se producirá un error en las solicitudes realizadas desde dentro de la misma región que usan una SAS con una dirección IP de salida especificada.

En su lugar, use una red virtual de Azure para administrar las restricciones de seguridad de red. Las solicitudes a Azure Storage desde dentro de la misma región siempre tienen lugar en una dirección IP privada. Para más información, vea Configuración de Firewalls y redes virtuales de Azure Storage.
Cliente que se ejecuta en Azure En una región diferente del cliente Una SAS que se proporciona al cliente en este escenario puede incluir una dirección IP pública o un intervalo de direcciones para el signedIp campo. Una solicitud realizada con la SAS debe originarse en la dirección IP o el intervalo de direcciones especificados.
Cliente que se ejecuta localmente o en un entorno de nube diferente En cualquier región de Azure Una SAS que se proporciona al cliente en este escenario puede incluir una dirección IP pública o un intervalo de direcciones para el signedIp campo. Una solicitud realizada con la SAS debe originarse en la dirección IP o el intervalo de direcciones especificados.

Si la solicitud pasa a través de un proxy o puerta de enlace, proporcione la dirección IP de salida pública de ese proxy o puerta de enlace para el signedIp campo.

Especificación del protocolo HTTP

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

Especificación de intervalos de acceso a tablas

Los startPkcampos , startRk, endPky endRk definen un intervalo de entidades de tabla asociadas a una firma de acceso compartido. Las consultas de tabla solo devuelven resultados que están dentro del intervalo y se producirá un error en los intentos de usar la firma de acceso compartido para agregar, actualizar o eliminar entidades fuera de este intervalo.

Si startPk es igual a endPk, la firma de acceso compartido autoriza el acceso a entidades en una sola partición de la tabla.

Si startPk es endPk igual a y startRk es igual endRka , la firma de acceso compartido solo puede tener acceso a una entidad de una partición.

Para comprender cómo estos campos restringen el acceso a las entidades de una tabla, consulte la tabla siguiente:

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 https://{account}.blob.core.windows.net/{container}/ raíz tiene una profundidad de 0. Cada subdirectorio dentro del directorio raíz agrega a la profundidad en 1. El directorio https://{account}.blob.core.windows.net/{container}/d1/d2 tiene una profundidad de 2.

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

Especificar el identificador firmado

Al especificar el signedIdentifier campo en el URI, se relaciona la firma de acceso compartido especificada 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 cinco directivas de acceso almacenadas.

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

Nombre del campo Parámetro de consulta Descripción
signedIdentifier si Opcional. Valor único de hasta 64 caracteres 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, un valor de hasta 64 caracteres que es único dentro del recurso. Puede especificar el valor de este identificador firmado para el signedidentifier campo 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 REST, consulte Delegación del acceso con una firma de acceso compartido.

Especificación del ámbito de cifrado

Mediante el uso del signedEncryptionScope campo en el URI, puede especificar el ámbito de cifrado que puede usar la aplicación cliente. Aplica el cifrado del lado servidor con el ámbito de cifrado especificado al cargar blobs (PUT) con el token de SAS. Get y HEAD no se restringirán ni se realizarán como antes.

En la tabla siguiente se describe cómo hacer referencia a un ámbito de cifrado firmado en el URI:

Nombre del campo Parámetro de consulta Descripción
signedEncryptionScope ses Opcional. Indica el ámbito de cifrado que se va a usar para cifrar el contenido de la solicitud.

Este campo es compatible con la versión 2020-12-06 o posterior. Si agrega antes ses de la versión admitida, el servicio devuelve el código de respuesta de error 403 (Prohibido).

Si establece el ámbito de cifrado predeterminado para el contenedor o el sistema de archivos, el ses parámetro de consulta respeta la directiva de cifrado de contenedor. Si hay un error de coincidencia entre el parámetro de consulta y x-ms-default-encryption-scope el ses encabezado, y el x-ms-deny-encryption-scope-override encabezado se establece trueen , el servicio devuelve el código de respuesta de error 403 (Prohibido).

Al proporcionar el x-ms-encryption-scope encabezado y el ses parámetro de consulta en la solicitud PUT, el servicio devuelve el código de respuesta de error 400 (solicitud incorrecta) si hay un error de coincidencia.

Especificación de la firma

Use la parte de firma del URI para autorizar la solicitud que se realiza con la firma de acceso compartido. Azure Storage usa un esquema de autorización de clave compartida para autorizar una SAS de servicio.

En la tabla siguiente se describe cómo especificar la firma en el URI:

Nombre del campo Parámetro de consulta Descripción
signature sig La cadena a signo es una cadena única que se construye a partir de los campos y que se debe comprobar para autorizar la solicitud. La firma es un código de autenticación de mensajes basado en hash (HMAC) que se calcula a través de la cadena a signo y la clave mediante el algoritmo SHA256 y, a continuación, se codifica mediante la codificación Base64.

Construir la cadena de firma

Para construir la cadena de firma de una firma de acceso compartido, primero construya la cadena para firmar a partir de los campos que componen la solicitud, codifique la cadena como UTF-8 y, a continuación, calcule la firma mediante el algoritmo HMAC-SHA256. Los campos que se incluyen en la cadena a signo deben estar descodificados por url.

Versión 2020-12-06 y posteriores

La versión 2020-12-06 agrega compatibilidad con el campo de ámbito de cifrado firmado. Para construir la cadena a signo para los recursos de Blob Storage, 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" +
               signedEncryptionScope + "\n" +
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
Versión 2018-11-09 y posteriores

La versión 2018-11-09 agrega compatibilidad con los campos de tiempo de instantánea de blobs firmados y recursos firmados. Estos campos deben incluirse en la cadena a signo. Para construir la cadena a signo para los recursos de Blob Storage, 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 posteriores

La versión 2015-04-05 agrega compatibilidad con los campos de protocolo firmado y IP firmado. Estos campos deben incluirse en la cadena a signo. Para construir la cadena a signo para Blob Storage o Azure Files recursos, use el siguiente formato:

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 la cadena a firmar para los recursos de Table Storage, 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 la cadena a firmar para los recursos de Queue Storage, use el formato siguiente:

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

Para construir la cadena a signo para Blob Storage o Azure Files recursos mediante la versión 2013-08-15 hasta 2015-02-21, use el siguiente formato. Para Azure Files, 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 la cadena a signo de 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 la cadena a signo para los recursos de Blob Storage para la versión 2012-02-12, use el siguiente formato:

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

Para construir la cadena a signo para los recursos de Blob Storage para las versiones anteriores a 2012-02-12, use el siguiente formato:

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.

  • String-to-sign para una tabla debe incluir los parámetros adicionales, incluso si son cadenas vacías.

  • La signedpermission parte de la cadena debe incluir las designaciones de permisos en un orden fijo 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 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 incluyen rw, rd, wdrl, , wly rl. Algunos ejemplos de valores no válidos son wr, dr, lry dw. No se permite especificar una designación de permiso más de una vez.

  • Proporcione un valor para la signedIdentifier parte de la cadena si está asociando la solicitud a una directiva de acceso almacenada.

  • Una firma de acceso compartido que especifica una versión del servicio de almacenamiento anterior a 2012-02-12 solo puede compartir un blob o contenedor, y debe omitir signedVersion y el carácter de nueva línea antes de él.

  • La parte canonicalizedResource de la cadena es una ruta de acceso canónica al recurso firmado. Debe incluir el nombre del servicio (Blob Storage, Table Storage, Queue Storage o Azure Files) para la versión 2015-02-21 o posterior, el nombre de la cuenta de almacenamiento y el nombre del recurso, y debe estar descodificado por url. Los nombres de los blobs deben incluir el contenedor del blob. Los nombres de tabla deben estar en minúsculas.

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

En los ejemplos siguientes se muestra cómo construir la canonicalizedResource parte de la cadena, según el 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"  

Para 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"  

Para 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"  

Para 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 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"  

Para 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. Cuando planee usar una SAS, piense en la duración de la SAS y si la aplicación podría necesitar revocar los derechos de acceso en determinadas circunstancias.

SAS ad hoc frente a la directiva de acceso almacenada

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

  • SAS ad hoc: cuando se crea 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 indica, si se omite la hora de inicio). Cualquier tipo de SAS puede ser una SAS ad-hoc.

    Puede administrar la duración de una SAS ad hoc mediante el signedExpiry campo . Si desea seguir concediendo a un cliente acceso al recurso después de la fecha de expiración, debe emitir una nueva firma. Se recomienda mantener corta la duración de una 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 superara una hora.

  • SAS con directiva de acceso almacenada: una directiva de acceso almacenada se define en un contenedor de recursos, que puede ser un contenedor de blobs, una tabla, una cola o un recurso compartido de archivos. Puede usar la directiva de acceso almacenada 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 (es decir, la hora de inicio, la hora de expiración y los permisos) que se definen 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.

Revocar una SAS

Dado que un URI de SAS es una dirección URL, cualquier persona que obtenga la SAS puede usarla, independientemente de quién la haya creado 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 la posea hasta que ocurra una de las cuatro cosas:

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

  • 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 la directiva de acceso especifica una hora de expiración.

    Se puede alcanzar la hora de expiración porque el intervalo transcurre o porque 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.

  • Se elimina la directiva de acceso almacenada a la que hace referencia la SAS, 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 acceder 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, según los permisos asociados a esa directiva de acceso almacenada. Se supone que la hora de expiración de la SAS no ha pasado. Si piensa revocar la SAS, asegúrese de usar otro nombre al volver a crear la directiva de acceso con una hora de expiración en el futuro.

  • Se vuelve a generar la clave de cuenta que se usó para crear la SAS. La regeneración de una clave de cuenta hace que todos los componentes de la aplicación que usan esa clave no se autoricen hasta que se actualicen para usar la otra clave de cuenta válida o la clave de cuenta recién regenerada. Regenerar la clave de cuenta es la única manera de revocar inmediatamente una SAS ad hoc.

Importante

Un URI de firma de acceso compartido está asociado a la clave de cuenta que se usa para crear la firma y la directiva de acceso almacenada asociada, si procede. 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.

Como procedimiento recomendado, 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 período durante el cual la SAS ad hoc es válida. Para obtener más información sobre cómo asociar una SAS de servicio con una directiva de acceso almacenada, consulte Definición de una directiva de acceso almacenada.

Ejemplo de SAS de servicio

En el ejemplo siguiente se muestra un URI de blob con un token de SAS de servicio anexado a él. El token de SAS de servicio proporciona permisos de lectura y escritura en el blob.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Cada parte del URI se describe en la tabla siguiente:

Nombre Parte de SAS Descripción
URI de recurso https://myaccount.blob.core.windows.net/sascontainer/blob1.txt La dirección del blob. Se recomienda encarecidamente usar HTTPS.
Delimitador ? Delimitador que precede a la cadena de consulta. El delimitador no forma parte del token de SAS.
Permisos sp=rw Los permisos que concede la SAS son de lectura y escritura.
Hora de inicio st=2023-05-24T01:13:55Z Se especifica en hora UTC. Si desea que la SAS sea válida de inmediato, omita la hora de inicio.
Fecha de expiración se=2023-05-24T09:13:55Z Se especifica en hora UTC.
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 las solicitudes que usan HTTPS.
Versión de Azure Storage sv=2023-05-24 En la versión 2012-02-12 y posteriores de Azure Storage, este parámetro indica qué versión usar.
Recurso sr=b El recurso es un blob.
Firma sig=<signature> Se usa para autorizar el acceso al blob. La firma es un HMAC que se calcula a través de una cadena a signo y una clave mediante el algoritmo SHA256 y, a continuación, se codifica mediante la codificación Base64.

Consulte también