Creación de una SAS de delegación de usuarios

Importante

Para lograr una seguridad óptima, Microsoft recomienda usar el identificador de Entra de Microsoft con identidades administradas para autorizar solicitudes en datos de blobs, colas y tablas, siempre que sea posible. La autorización con el identificador de Entra de Microsoft e identidades administradas proporciona mayor seguridad y facilidad de uso a través de la autorización de clave compartida. Para obtener más información, consulte Autorizar con el identificador de Entra de Microsoft. Para más información sobre las identidades administradas, consulte ¿Qué son las identidades administradas para los recursos de Azure?

En el caso de los recursos hospedados fuera de Azure, como las aplicaciones locales, puede usar identidades administradas a través de Azure Arc. Por ejemplo, las aplicaciones que se ejecutan en servidores habilitados para Azure Arc pueden usar identidades administradas para conectarse a los servicios de Azure. Para más información, consulte Autenticación en recursos de Azure con servidores habilitados para Azure Arc.

Puede proteger un token de firma de acceso compartido (SAS) para acceder a un contenedor, directorio o blob mediante credenciales de Microsoft Entra o una clave de cuenta. Una SAS protegida con credenciales de Microsoft Entra se denomina delegación de usuarios SAS. Como procedimiento recomendado de seguridad, se recomienda usar las credenciales de Microsoft Entra siempre que sea posible, en lugar de la clave de cuenta, que se puede poner en peligro con mayor facilidad. Cuando el diseño de la aplicación requiera firmas de acceso compartido, use las credenciales de Microsoft Entra para crear una SAS de delegación de usuarios para ayudar a garantizar una mejor seguridad.

Todas las SAS están firmadas con una clave. Para crear una SAS de delegación de usuarios, primero debe solicitar una clave de delegación de usuario , que después se usa para firmar la SAS. La clave de delegación de usuarios es análoga a la clave de cuenta que se usa para firmar una SAS de servicio o una SAS de cuenta, salvo que se basa en las credenciales de Microsoft Entra. Para solicitar la clave de delegación de usuarios, llame a la operación obtener clave de delegación de usuario . A continuación, puede usar la clave de delegación de usuarios para crear la SAS.

Se admite una SAS de delegación de usuarios para Azure Blob Storage y Azure Data Lake Storage. Las directivas de acceso almacenadas no se admiten para una SAS de delegación de usuarios.

Cautela

Las firmas de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y debe protegerlas igual que protegería una clave de cuenta. Es importante proteger una SAS del uso malintencionado o no deseado. Use discreción para distribuir una SAS y tener un plan en vigor 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 firma de acceso compartido solo deben distribuirse en una conexión segura, como HTTPS.

Para obtener información sobre el uso de la clave de cuenta para proteger una SAS, consulte Creación de una saS de servicio y creación de una saS de cuenta.

Compatibilidad de SAS de delegación de usuarios con acceso con ámbito de directorio

Una SAS de delegación de usuarios admite el ámbito de directorio (sr=d) cuando la versión de autorización (sv) es 2020-02-10 o posterior y está habilitado un espacio de nombres jerárquico (HNS). La semántica del ámbito de directorio (sr=d) es similar al ámbito de contenedor (sr=c), excepto que el acceso está restringido a un directorio y a los archivos y subdirectorios que contiene. Cuando se especifica sr=d, también se requiere el parámetro de consulta sdd.

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

Compatibilidad de SAS de delegación de usuarios con un OID de usuario

SAS de delegación de usuarios admite un identificador de objeto de usuario (OID) opcional que se lleva en el parámetro saoid o suoid cuando la versión de autorización (sv) es 2020-02-10 o posterior. Los parámetros saoid y suoid corresponden a la entidad de seguridad del usuario final que usa la SAS y proporcionan un modelo de autorización mejorado para cargas de trabajo de clúster de varios usuarios, como Hadoop y Spark.

Los tokens de SAS se pueden restringir a una operación específica del sistema de archivos y al usuario, lo que proporciona un token de acceso menos vulnerable que es más seguro para distribuirse en un clúster de varios usuarios. Un caso de uso de estas características es la integración del controlador ABFS de Hadoop con Apache Ranger.

Para obtener más información sobre los parámetros opcionales saoid y suoid, consulte Especificar un identificador de objeto de usuario firmado.

Autorización de una SAS de delegación de usuarios

Cuando un cliente accede a un recurso de Blob Storage con una SAS de delegación de usuarios, la solicitud a Azure Storage se autoriza con las credenciales de Microsoft Entra que se usaron para crear la SAS. El acceso del cliente al recurso viene determinado por los permisos siguientes:

  • Permisos de control de acceso basado en rol (RBAC) que se conceden a la entidad de seguridad de Microsoft Entra que solicitó la clave de delegación de usuarios.
  • Permisos de la lista de control de acceso (ACL) POSIX que se conceden a la entidad de seguridad que solicitó la clave de delegación de usuarios. Esta comprobación adicional solo se produce cuando los permisos de RBAC no pueden conceder acceso y solo cuando el espacio de nombres jerárquico está habilitado en la cuenta de almacenamiento.
  • Permisos que se conceden explícitamente en el token de SAS.

Este enfoque proporciona un nivel adicional de seguridad y le ayuda a evitar tener que almacenar la clave de acceso de la cuenta con el código de la aplicación. Por estos motivos, la creación de una SAS mediante credenciales de Microsoft Entra es un procedimiento recomendado de seguridad.

Los permisos concedidos a un cliente que posee la SAS son la intersección de los permisos concedidos a la entidad de seguridad que solicitó la clave de delegación de usuarios y los permisos concedidos al recurso en el token de SAS mediante el campo signedPermissions (sp). Si no se concede ningún permiso a la entidad de seguridad a través de ACL de RBAC o POSIX en el token de SAS, ese permiso no se concede al cliente que intenta usar la SAS para acceder al recurso. Al crear una SAS de delegación de usuarios, asegúrese de que los permisos concedidos a través de ACL de RBAC y POSIX y los permisos concedidos a través del token de SAS se alinean con el nivel de acceso que requiere el cliente.

Para crear una SAS de delegación de usuarios, haga lo siguiente:

  1. Use ACL de RBAC o POSIX para conceder los permisos deseados a la entidad de seguridad que solicitará la clave de delegación de usuarios.
  2. Adquiera un token de OAuth 2.0 de Microsoft Entra ID.
  3. Use el token para solicitar la clave de delegación de usuarios llamando a la operación Obtener clave de delegación de usuarios .
  4. Use la clave de delegación de usuarios para construir el token de SAS con los campos adecuados.

Asignación de permisos con RBAC

La entidad de seguridad que solicita la clave de delegación de usuarios debe tener los permisos adecuados para hacerlo. Una entidad de seguridad de Identificador de Entra de Microsoft puede ser un usuario, un grupo, una entidad de servicio o una identidad administrada.

Para solicitar la clave de delegación de usuarios, debe asignar a una entidad de seguridad la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Los siguientes roles RBAC integrados incluyen la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, ya sea explícitamente o como parte de una definición de carácter comodín:

  • colaborador de
  • colaborador de la cuenta de almacenamiento de
  • colaborador de datos de Blob storage
  • propietario de datos de blobs de almacenamiento de
  • lector de datos de Blob storage de
  • delegator de blobs de Storage

Dado que la operación Obtener clave de delegación de usuarios actúa en el nivel de la cuenta de almacenamiento, el Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey acción debe tener el ámbito en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción. Si a la entidad de seguridad se le asigna cualquiera de los roles integrados o a un rol personalizado que incluye el Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey acción, en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción, la entidad de seguridad puede solicitar la clave de delegación de usuario.

Si a la entidad de seguridad se le asigna un rol que permite el acceso a los datos, pero se limita al nivel de un contenedor, también puede asignar el rol delegador de blobs de almacenamiento a la entidad de seguridad en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción. El rol delegator de blobs de almacenamiento concede a la entidad de seguridad permisos para solicitar la clave de delegación de usuarios.

Para obtener más información sobre los roles de RBAC para Azure Storage, consulte Autorizar con Microsoft Entra.

Adquisición de un token de OAuth 2.0

Para obtener la clave de delegación de usuarios, primero solicite un token de OAuth 2.0 de Microsoft Entra ID. Proporcione el token con el esquema bearer para autorizar la llamada a la operación Obtener clave de delegación de usuarios. Para obtener más información sobre cómo solicitar un token de OAuth desde el id. de Microsoft Entra, consulte flujos de autenticación y escenarios de aplicación.

Solicitud de la clave de delegación de usuarios

Una llamada a la operación Obtener clave de delegación de usuarios devuelve la clave como un conjunto de valores que se usan como parámetros en el token de SAS de delegación de usuarios. Estos parámetros se describen en la referencia de Obtener clave de delegación de usuarios y, en la sección siguiente, "Construir una SAS de delegación de usuarios".

Cuando un cliente solicita una clave de delegación de usuarios mediante un token de OAuth 2.0, Azure Storage devuelve la clave de delegación de usuarios en nombre de la entidad de seguridad. A la SAS creada con la clave de delegación de usuarios se le conceden los permisos que se conceden a la entidad de seguridad.

Una vez que tenga la clave de delegación de usuarios, puede usarla para crear cualquier número de firmas de acceso compartido de delegación de usuarios durante la vigencia de la clave. La clave de delegación de usuarios es independiente del token de OAuth 2.0 que se usa para adquirirlo, por lo que no es necesario renovar el token siempre y cuando la clave siga siendo válida. Puede especificar que la clave es válida durante un período de hasta siete días.

Construcción de una SAS de delegación de usuarios

En la tabla siguiente se resumen los campos que se admiten para un token de SAS de delegación de usuarios. En las secciones posteriores se proporcionan detalles adicionales sobre cómo especificar estos parámetros.

Nombre del campo SAS Parámetro del token de SAS Obligatorio o opcional Compatibilidad con versiones Descripción
signedVersion sv Obligatorio 2018-11-09 y versiones posteriores Indica la versión del servicio que se usa para construir el campo de firma. También especifica la versión del servicio que controla las solicitudes realizadas con esta SAS.
signedResource sr Obligatorio Todo Especifica qué recursos de blob son accesibles a través de la firma de acceso compartido.
signedStart st Opcional Todo 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 valor, la hora UTC actual se usa como hora de inicio. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedExpiry se Obligatorio Todo Hora en que la firma de acceso compartido deja de ser válida, expresada en uno de los formatos ISO 8601 UTC aceptados. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedPermissions sp Obligatorio Todo Indica qué operaciones puede realizar un cliente que posee la SAS en el recurso. Los permisos se pueden combinar.
signedIp sip Opcional 2015-04-05 y versiones posteriores Especifica una dirección IP o un intervalo inclusivo de direcciones IP desde las que se van a aceptar solicitudes. Al especificar un intervalo, tenga en cuenta que el intervalo es inclusivo. Solo se admiten direcciones IPv4.

Por ejemplo, sip=198.51.100.0 o sip=198.51.100.10-198.51.100.20.
signedProtocol spr Opcional 2015-04-05 y versiones posteriores Especifica el protocolo permitido para una solicitud realizada con la SAS. Incluya este campo para requerir que las solicitudes realizadas con el token de SAS usen HTTPS.
signedObjectId skoid Obligatorio 2018-11-09 y versiones posteriores Especifica el identificador de objeto de una entidad de seguridad de Microsoft Entra. Este identificador de objeto corresponde a la entidad de seguridad que solicitó la clave de delegación de usuarios.

Antes de autorizar la operación, Azure Storage comprueba los permisos de RBAC en el identificador de objeto. Si los permisos de RBAC no pueden conceder acceso, Azure Storage comprueba los permisos de ACL POSIX en el identificador de objeto.
signedTenantId sktid Obligatorio 2018-11-09 y versiones posteriores Especifica el inquilino de Microsoft Entra en el que se define una entidad de seguridad.
signedKeyStartTime skt Obligatorio. 2018-11-09 y versiones posteriores La operación obtener clave de delegación de usuario devuelve el valor. Indica el inicio de la vigencia de la clave de delegación de usuarios, expresada en uno de los formatos ISO 8601 UTC aceptados. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedKeyExpiryTime ske Obligatorio 2018-11-09 y versiones posteriores La operación obtener clave de delegación de usuario devuelve el valor. Indica el final de la duración de la clave de delegación de usuarios, expresada en uno de los formatos ISO 8601 UTC aceptados. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedKeyVersion skv Obligatorio 2018-11-09 y versiones posteriores La operación obtener clave de delegación de usuario devuelve el valor. Especifica la versión del servicio de almacenamiento que se usó para obtener la clave de delegación de usuarios. Este campo debe especificar la versión 2018-11-09 o posterior.
signedKeyService sks Obligatorio 2018-11-09 y versiones posteriores Indica el servicio para el que la clave de delegación de usuarios es válida. Actualmente, solo se admite Blob Storage.
signedAuthorizedObjectId saoid Opcional 2020-02-10 y versiones posteriores Especifica el identificador de objeto de una entidad de seguridad de Microsoft Entra autorizada por el propietario de la clave de delegación de usuarios para realizar la acción concedida por el token de SAS. Este identificador de objeto corresponde a la entidad de seguridad para el usuario final de la SAS. No se realiza ninguna comprobación de permisos adicional en las listas de control de acceso (ACL) POSIX.
signedUnauthorizedObjectId suoid Opcional 2020-02-10 y versiones posteriores Especifica el identificador de objeto de una entidad de seguridad de Microsoft Entra cuando se habilita un espacio de nombres jerárquico. Este identificador de objeto corresponde a la entidad de seguridad para el usuario final de la SAS. Azure Storage realiza una comprobación de ACL POSIX con el identificador de objeto antes de autorizar la operación.
signedCorrelationId scid Opcional 2020-02-10 y versiones posteriores Correlacionar los registros de auditoría de almacenamiento con los registros de auditoría que usa la entidad de seguridad que genera y distribuye la SAS.
signedDirectoryDepth sdd Obligatorio cuando sr=d 2020-02-10 y versiones posteriores Indica el número de directorios dentro de la carpeta raíz del directorio especificado en el campo canonicalizedResource de la cadena a signo.
signedEncryptionScope ses Opcional 2020-12-06 y versiones posteriores Indica el ámbito de cifrado que se va a usar para cifrar el contenido de la solicitud.
signature sig Obligatorio Todo La firma es un código de autenticación de mensajes basado en hash (HMAC) que se calcula en la cadena a signo y la clave mediante el algoritmo SHA256 y, a continuación, se codifica mediante la codificación Base64.
encabezado de respuesta Cache-Control rscc Opcional 2013-08-15 y versiones posteriores Azure Storage establece el encabezado de respuesta Cache-Control en el valor especificado en el token de SAS.
encabezado de respuesta Content-Disposition rscd Opcional 2013-08-15 y versiones posteriores Azure Storage establece el encabezado de respuesta Content-Disposition en el valor especificado en el token de SAS.
encabezado de respuesta Content-Encoding rsce Opcional 2013-08-15 y versiones posteriores Azure Storage establece el encabezado de respuesta Content-Encoding en el valor especificado en el token de SAS.
encabezado de respuesta Content-Language rscl Opcional 2013-08-15 y versiones posteriores Azure Storage establece el encabezado de respuesta Content-Language en el valor especificado en el token de SAS.
encabezado de respuesta Content-Type rsct Opcional 2013-08-15 y versiones posteriores Azure Storage establece el encabezado de respuesta Content-Type en el valor especificado en el token de SAS.

Especificar el campo versión firmada

El campo signedVersion obligatorio (sv) especifica la versión del servicio para la firma de acceso compartido. Este valor indica la versión del servicio que se usa para construir el campo signature y especifica la versión del servicio que controla una solicitud realizada con esta firma de acceso compartido. El valor del campo sv debe ser la versión 2018-11-09 o posterior.

Especificar el campo de recurso firmado

El campo signedResource obligatorio (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, contenedor o directorio en el token de SAS:

Recurso Valor del parámetro Versiones admitidas Descripción
Blob b Todo Concede acceso al contenido y los metadatos del blob.
Versión del 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 campo signedResource, también se requiere el parámetro signedDirectoryDepth (sdd). Un directorio siempre está dentro de un contenedor.

Especificar la duración de la validez de la firma

Los campos signedStart (st) y signedExpiry (se) indican los tiempos de inicio y expiración de la SAS. Se requiere el campo signedExpiry. El campo signedStart es opcional. Si se omite, la hora UTC actual se usa como hora de inicio.

Para una SAS de delegación de usuarios, los tiempos de inicio y expiración de la SAS deben estar dentro del intervalo definido para la clave de delegación de usuarios. Si un cliente intenta usar una SAS después de que la clave de delegación de usuarios haya expirado, la SAS producirá un error de autorización, independientemente de si la propia SAS sigue siendo válida.

Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.

Especificar permisos

Los permisos especificados para el campo signedPermissions (sp) en el token de SAS indican qué operaciones puede realizar un cliente que posee la SAS 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 permisos en el orden siguiente:

racwdxltmeop

Algunos ejemplos de opciones de permisos válidas para un contenedor incluyen rw, rd, rl, wd, wly rl. Algunos ejemplos de valores no válidos incluyen wr, dr, lry dw. No se permite especificar una designación de permiso más de una vez.

Una SAS de delegación de usuarios no puede conceder acceso a determinadas operaciones:

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

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.
Agregar un 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.
Escribir w Contenedor
Directorio
Blob
Todo Cree o escriba contenido, propiedades, metadatos o lista de bloqueados. Instantánea o concesión del blob. Cambie el tamaño del blob (solo blob en páginas). Use el blob como destino de una operación de copia.
Borrar d Contenedor
Directorio
Blob
Todo Elimine un blob. Para la versión 2017-07-29 y posteriores, el permiso Delete también permite interrumpir una concesión en un blob. Para obtener más información, consulte la operación de concesión de blobs de .
Eliminar versión x Contenedor
Blob
2019-12-12 y versiones posteriores Elimine una versión de blob.
Eliminación permanente y Blob 2020-02-10 y versiones posteriores Elimine permanentemente una instantánea de blob o una versión.
Lista l Contenedor
Directorio
Todo Enumerar blobs de forma no recursiva.
Etiquetas t Blob 2019-12-12 y versiones posteriores Lee o escribe las etiquetas en un blob.
Mover m Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores Mueva un blob o un directorio y su contenido a una nueva ubicación. Esta operación puede restringirse opcionalmente al propietario del blob secundario, directorio o directorio primario si el parámetro saoid se incluye en el token de SAS y el bit pegajoso se establece en el directorio primario.
Ejecutar 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 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 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 cuando el autor de la llamada cambia el nombre o elimina un directorio o un blob dentro de un directorio que tiene el bit pegado establecido.
Permisos p Contenedor
Directorio
Blob
2020-02-10 y versiones posteriores Cuando el espacio de nombres jerárquico está habilitado, este permiso permite al autor de la llamada establecer permisos y ACL POSIX en directorios y blobs.
Establecer directiva de inmutabilidad Yo Contenedor
Blob
2020-06-12 y versiones posteriores Establezca o elimine la directiva de inmutabilidad o suspensión legal en un blob.

Especificar una dirección IP o un intervalo IP

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.

Al especificar un intervalo de direcciones IP, el intervalo es inclusivo. Por ejemplo, especificar sip=198.51.100.0 o sip=198.51.100.10-198.51.100.20 en la SAS restringe la solicitud a esas direcciones IP.

En la tabla siguiente se describe si se debe incluir el campo signedIp en un token de SAS para un escenario determinado, 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 campo signedIp. Se producen errores en las solicitudes que realice desde dentro de la misma región mediante 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 la misma región siempre tienen lugar en una dirección IP privada. Para más información, consulte Configuración de firewalls y redes virtuales de Azure Storage.
Cliente que se ejecuta en Azure En otra región del cliente Una SAS que se proporciona al cliente en este escenario podría incluir una dirección IP pública o un intervalo de direcciones para el campo signedIp. Las solicitudes que realice con la SAS deben originarse en la dirección IP o el intervalo de direcciones especificados.
Cliente que se ejecuta de forma local o en un entorno de nube diferente En cualquier región de Azure Una SAS que se proporciona al cliente en este escenario podría incluir una dirección IP pública o un intervalo de direcciones para el campo signedIp. Las solicitudes que realice con la SAS deben 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 campo signedIp.

Especificar el protocolo HTTP

El campo opcional signedProtocol (spr) especifica el protocolo permitido para las solicitudes realizadas con la SAS. Los valores posibles son HTTPS y HTTP (https,http) o HTTPS solo (https). El valor predeterminado es https,http.

Nota

No es posible especificar HTTP para el campo spr.

Especificar el identificador de objeto firmado

El campo signedObjectId (skoid) es necesario para una SAS de delegación de usuarios. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta. El identificador de objeto firmado es un valor GUID que sirve el identificador inmutable para una entidad de seguridad en la plataforma de identidad de Microsoft.

Especificación del identificador de inquilino firmado

El campo signedTenantId (sktid) es necesario para una SAS de delegación de usuarios. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta. El identificador de inquilino firmado es un valor GUID que representa el inquilino de Microsoft Entra en el que se define una entidad de seguridad.

Especificar la hora de inicio de la clave firmada

El campo signedKeyStartTime obligatorio (skt) indica el inicio de la vigencia de la clave de delegación de usuarios en formato de fecha ISO. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta.

Especificar la hora de expiración de la clave firmada

El campo signedKeyExpiryTime (ske) es necesario para una SAS de delegación de usuarios en formato de fecha ISO. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta. El tiempo de expiración de la clave firmada indica el final de la duración de la clave de delegación de usuarios. El valor de la hora de expiración puede ser un máximo de siete días a partir de la hora de inicio de la SAS.

Especificación del servicio de claves firmadas

El campo signedKeyService (sks) es necesario para una SAS de delegación de usuarios. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta. El campo servicio de clave firmada indica el servicio para el que la clave de delegación de usuarios es válida. El valor del campo de servicio de clave firmada para Blob Storage es b.

Especificar la versión de la clave firmada

El campo signedkeyversion (skv) es necesario para una SAS de delegación de usuarios. La operación Obtener clave de delegación de usuarios devuelve este valor como parte de la respuesta. El campo signedkeyversion especifica la versión del servicio de almacenamiento que se usa para obtener la clave de delegación de usuarios. Este campo debe especificar la versión 2018-11-09 o posterior.

Especificar un identificador de objeto de usuario firmado para una entidad de seguridad

Los campos opcionales signedAuthorizedObjectId (saoid) y signedUnauthorizedObjectId (suoid) permiten la integración con Apache Hadoop y Apache Ranger para cargas de trabajo de Azure Data Lake Storage. Use uno de estos campos en el token de SAS para especificar el identificador de objeto de una entidad de seguridad:

  • El campo saoid especifica el identificador de objeto de una entidad de seguridad de Microsoft Entra autorizada por el propietario de la clave de delegación de usuarios para realizar la acción concedida por el token de SAS. Azure Storage valida el token de SAS y garantiza que el propietario de la clave de delegación de usuarios tenga los permisos necesarios antes de que Azure Storage conceda acceso. No se realiza ninguna comprobación de permisos adicional en las ACL POSIX.
  • El campo suoid especifica el identificador de objeto de una entidad de seguridad de Microsoft Entra cuando se habilita un espacio de nombres jerárquico para una cuenta de almacenamiento. El campo suoid solo es válido para las cuentas que tienen un espacio de nombres jerárquico. Cuando el campo suoid se incluye en el token de SAS, Azure Storage realiza una comprobación de ACL POSIX con el identificador de objeto antes de autorizar la operación. Si esta comprobación de ACL no se realiza correctamente, se produce un error en la operación. Se debe habilitar un espacio de nombres jerárquico para la cuenta de almacenamiento si el campo suoid se incluye en el token de SAS. De lo contrario, se producirá un error en la comprobación de permisos con un error de autorización.

El identificador de objeto de la entidad de seguridad que solicita la clave de delegación de usuarios se captura en el campo skoid requerido. Para especificar un identificador de objeto en el token de SAS con el campo saoid o suoid, La entidad de seguridad identificada en el campo skoid debe tener asignado un rol de RBAC que incluya Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action o Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action. Para más información sobre estas acciones, consulte operaciones del proveedor de recursos de Azure.

Al especificar el identificador de objeto en el campo saoid o suoid, también se restringen las operaciones relacionadas con la propiedad del directorio o del blob de las maneras siguientes:

  • Si una operación crea un directorio o un blob, Azure Storage establece el propietario del directorio o blob en el valor especificado por el identificador de objeto. Si no se especifica el identificador de objeto, Azure Storage establece el propietario del directorio o blob en el valor especificado por el parámetro skoid.
  • Si el bit pegajoso se establece en el directorio primario y la operación elimina o cambia el nombre de un directorio o blob, el identificador de objeto del propietario del directorio primario o el propietario del recurso debe coincidir con el valor especificado por el identificador de objeto.
  • Si una operación establece el propietario de un directorio o blob y se especifica el encabezado x-ms-owner, el valor especificado por el identificador de objeto debe coincidir con el valor especificado por el encabezado x-ms-owner.
  • Si una operación establece el grupo para un directorio o blob y se especifica el encabezado x-ms-group, el valor especificado por el identificador de objeto debe ser miembro del grupo especificado por el encabezado x-ms-group.
  • Si una operación establece los permisos o la ACL para un directorio o blob, también debe cumplirse una de las dos condiciones siguientes:
    • El valor especificado para el identificador de objeto debe ser el propietario del directorio o blob.
    • El valor del campo signedPermissions (sp) debe incluir el permiso Ownership (o) además del permiso Permissions (p).

El identificador de objeto especificado en el campo saoid o suoid se incluye en los registros de diagnóstico al realizar solicitudes mediante el token de SAS.

El campo saoid o suoid solo se admite si el campo signedVersion (sv) está establecido en la versión 2020-02-10 o posterior. Solo se puede incluir uno de estos campos en el token de SAS.

Especificar un identificador de correlación

El campo signedCorrelationId (scid) especifica un identificador de correlación que se puede usar para correlacionar los registros de auditoría de almacenamiento con los registros de auditoría que usa la entidad de seguridad que genera y distribuye la SAS. Por ejemplo, un servicio de autorización de confianza normalmente tiene una identidad administrada que autentica y autoriza a los usuarios, genera una SAS, agrega una entrada al registro de auditoría local y devuelve la SAS a un usuario, que luego puede usar la SAS para acceder a los recursos de Azure Storage. Al incluir un identificador de correlación en el registro de auditoría local y en el registro de auditoría de almacenamiento, se permite que estos eventos se correlacionan más adelante. El valor es un GUID sin llaves y con caracteres en minúsculas.

Este campo es compatible con la versión 2020-02-10 y posteriores.

Especificar la profundidad del directorio

Si el campo signedResource especifica un directorio (sr=d), también debe especificar el campo signedDirectoryDepth (sdd) para indicar el número de subdirectorios en el directorio raíz. El valor del campo sdd 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 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 y posteriores.

Especificar parámetros de consulta para invalidar los encabezados de respuesta

Para definir valores para determinados encabezados de respuesta que se van a devolver cuando se usa la firma de acceso compartido en una solicitud, puede especificar encabezados de respuesta en parámetros de consulta. Los encabezados de respuesta y los parámetros de consulta correspondientes son los siguientes:

Nombre del encabezado de respuesta Parámetro de consulta 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 consulta rsct=binary en un token de SAS, el encabezado de respuesta de Content-Type se establece en binary. Este valor invalida el valor de encabezado Content-Type almacenado para el blob para una solicitud con esta firma de acceso compartido únicamente.

Si crea una firma de acceso compartido que especifica encabezados de respuesta como parámetros de consulta, debe incluir esos encabezados de respuesta en la cadena a signo que se usa para construir la cadena de firma. Para obtener más información, vea la sección "Especificar la firma".

Especificar el ámbito de cifrado

El campo () especifica un ámbito de cifrado que la aplicación cliente usa al cargar blobs mediante el token de SAS a través de la operación put blob . El campo signed encryption scope se admite cuando el campo versión firmada (sv) del token de SAS es la versión 2020-12-06 o posterior. Si el campo versión firmada especifica una versión anterior a la versión admitida, el servicio devuelve el código de respuesta de error 403 (Prohibido).

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

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

Especificar la firma

El campo signature (sig) se usa para autorizar una solicitud realizada por un cliente con la firma de acceso compartido. La cadena a signo es una cadena única que se construye a partir de los campos que se deben comprobar para autorizar la solicitud. La firma es un 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.

Para construir la cadena de firma de una SAS de delegación de usuarios, cree 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.

Los campos necesarios en la cadena a inicio de sesión dependen de la versión del servicio que se usa para la autorización (sv campo). En las secciones siguientes se describe la configuración de cadena a signo para las versiones que admiten la SAS de delegación de usuarios.

Versión 2020-12-06 y posteriores

La cadena a firmar para la versión de autorización 2020-12-06 y posteriores tiene el formato siguiente:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versión 2020-02-10

La cadena a firmar para la versión de autorización 2020-02-10 tiene el siguiente formato:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versiones anteriores a 2020-02-10

La cadena a firmar para las versiones de autorización anteriores a 2020-02-10 tiene el siguiente formato:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Recurso canónico

La parte canonicalizedResource de la cadena es una ruta de acceso canónica al recurso firmado. Debe incluir el punto de conexión de Blob Storage y el nombre del recurso, y debe descodificar la dirección URL. Una ruta de acceso de blob debe incluir su contenedor. Una ruta de acceso de directorio debe incluir el número de subdirectorios que corresponden al parámetro sdd.

La cadena de recurso canónica de un contenedor debe omitir la barra diagonal final (/) para una SAS que proporcione acceso a ese contenedor.

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

Ejemplo de contenedor (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Ejemplo de blob (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Ejemplo de contenedor (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Ejemplo de directorio (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Ejemplo de blob (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Campos opcionales

Si un campo es opcional y no se proporciona como parte del token de SAS, especifique una cadena vacía para el campo. Asegúrese de incluir el carácter de nueva línea (\n) después de la cadena vacía.

Ejemplo de SAS de delegación de usuarios

En el ejemplo siguiente se muestra un URI de blob con un token saS de delegación de usuarios anexado a él. El token de SAS de delegación de usuarios 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&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=198.51.100.10-198.51.100.20&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 recursos https://myaccount.blob.core.windows.net/sascontainer/blob1.txt 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 concedidos por la SAS incluyen Lectura (r) y Escritura (w).
Hora de comienzo st=2023-05-24T01:13:55Z Especificado en hora UTC. Si desea que la SAS sea válida inmediatamente, omita la hora de inicio.
Hora de expiración se=2023-05-24T09:13:55Z Especificado en hora UTC.
Id. de objeto skoid=<object-id> Una entidad de seguridad de Microsoft Entra.
Id. de inquilino sktid=<tenant-id> Inquilino de Microsoft Entra donde se registra la entidad de seguridad.
Hora de inicio de la clave skt=2023-05-24T01:13:55Z Inicio de la vigencia de la clave de delegación de usuarios.
Hora de expiración de la clave ske=2023-05-24T09:13:55Z Fin de la vigencia de la clave de delegación de usuarios.
Servicio de claves sks=b Solo se admite Blob service para el valor del servicio.
Versión de clave skv=2022-11-02 La versión del servicio de almacenamiento que se usó para obtener la clave de delegación de usuarios.
Intervalo IP sip=198.51.100.10-198.51.100.20 Intervalo de direcciones IP desde las que se aceptará una solicitud.
Protocolo spr=https Solo se permiten las solicitudes que usan HTTPS.
Versión de Blob Service sv=2022-11-02 Para la versión 2012-02-12 y posteriores de Azure Storage, este parámetro indica la versión que se va a 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.

Revocar una SAS de delegación de usuarios

Si cree que una SAS se ha puesto en peligro, debe revocarla. Puede revocar una SAS de delegación de usuarios mediante la revocación de la clave de delegación de usuarios o cambiando o quitando asignaciones de roles RBAC y ACL POSIX para la entidad de seguridad que se usa para crear la SAS.

Importante

Azure Storage almacena en caché tanto la clave de delegación de usuarios como las asignaciones de roles de RBAC, por lo que puede haber un retraso entre cuando se inicia el proceso de revocación y cuando una SAS de delegación de usuarios existente no es válida.

Revocar la clave de delegación de usuarios

Puede revocar la clave de delegación de usuarios llamando a la operación Revocar claves de delegación de usuario. Al revocar la clave de delegación de usuarios, las firmas de acceso compartido que dependen de esa clave no sean válidas. A continuación, puede volver a llamar a la operación Obtener clave de delegación de usuarios y usar la clave para crear nuevas firmas de acceso compartido. Esta es la forma más rápida de revocar una SAS de delegación de usuarios.

Cambiar o quitar asignaciones de roles o ACL

Puede cambiar o quitar la asignación de roles RBAC y las ACL POSIX para la entidad de seguridad que se usa para crear la SAS. Cuando un cliente usa la SAS para acceder a un recurso, Azure Storage comprueba que la entidad de seguridad cuyas credenciales se usaron para proteger la SAS tiene los permisos necesarios para el recurso.

Consulte también