Creación de una SAS de delegación de usuario

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

Cada SAS se firma con una clave. Para crear una SAS de delegación de usuarios, primero debe solicitar una clave de delegación de usuarios, que después usará 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 sus credenciales de Microsoft Entra. Para solicitar la clave de delegación de usuarios, llame a la operación Obtener clave de delegación de usuarios . 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 Gen2. Las directivas de acceso almacenadas no se admiten para una SAS de delegación de usuarios.

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 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 sr=d se especifica , también se requiere el sdd parámetro de consulta.

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 saoid parámetro o suoid cuando la versión de autorización (sv) es 2020-02-10 o posterior. Este parámetro opcional proporciona un modelo de autorización mejorado para cargas de trabajo de clústeres multiusuario, como Hadoop y Spark.

Los tokens de SAS se pueden restringir a una operación y usuario específicos del sistema de archivos, 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 para estas características es la integración del controlador ABFS de Hadoop con Apache Ranger.

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. Los permisos de control de acceso basado en rol (RBAC) que se conceden para esa cuenta de Microsoft Entra, junto con los permisos concedidos explícitamente en la SAS, determinan el acceso del cliente al recurso. 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 Microsoft Entra credenciales 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 signedPermissions campo (sp). Si un permiso concedido a la entidad de seguridad a través de RBAC no se concede además en el token de SAS, no se concederá al cliente que intenta usar la firma de acceso compartido para acceder al recurso. Al crear una SAS de delegación de usuarios, asegúrese de que los permisos concedidos a través de RBAC y los permisos concedidos mediante el token de SAS se alinean con el nivel de acceso requerido por el cliente.

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

  1. Use RBAC 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 mediante una llamada 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 Microsoft Entra ID entidad de seguridad 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 caracteres comodín:

Dado que la operación Obtener clave de delegación de usuario actúa en el nivel de la cuenta de almacenamiento, la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey debe tener como ámbito 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 enumerados anteriormente, o un rol personalizado que incluye la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , 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 usuarios.

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 delegator 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 storage concede los permisos de entidad de seguridad para solicitar la clave de delegación de usuarios.

Para más información sobre los roles de RBAC para Azure Storage, consulte Autorización con Azure Active Directory.

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 desde 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 Microsoft Entra ID, 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 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. La SAS que se crea con la clave de delegación de usuarios tiene concedidos los permisos concedidos a la entidad de seguridad.

Después de tener 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 el token no tiene que renovarse siempre que 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 de token de SAS Obligatorio u opcional Compatibilidad con versiones Descripción
signedVersion sv Requerido 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 Requerido All Especifica qué recursos de blob son accesibles a través de la firma de acceso compartido.
signedStart st Opcionales All 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, se usa la hora UTC actual como hora de inicio. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedExpiry se Requerido All 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 Requerido All Indica qué operaciones puede realizar un cliente que posee la SAS en el recurso. Los permisos se pueden combinar.
signedIp sip Opcionales 2015-04-05 y versiones posteriores Especifica una dirección IP o un intervalo inclusivo de direcciones IP desde las que aceptar solicitudes. Al especificar un intervalo, tenga en cuenta que el intervalo es inclusivo. Solo se admiten direcciones IPv4.

Por ejemplo, sip=168.1.5.65 o sip=168.1.5.60-168.1.5.70.
signedProtocol spr Opcionales 2015-04-05 y versiones posteriores Especifica el protocolo que se permite 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 Requerido 2018-11-09 y versiones posteriores Identifica una entidad de seguridad de Microsoft Entra.
signedTenantId sktid Requerido 2018-11-09 y versiones posteriores Especifica el Microsoft Entra inquilino en el que se define una entidad de seguridad.
signedKeyStartTime skt Opcional. 2018-11-09 y versiones posteriores La operación Obtener clave de delegación de usuario devuelve el valor . Indica el inicio de la duración de la clave de delegación de usuarios, expresada en uno de los formatos ISO 8601 UTC aceptados. Si se omite el valor, se asume la hora actual. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedKeyExpiryTime ske Requerido 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 Requerido 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 Requerido 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 Opcionales 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. No se realiza ninguna comprobación de permisos adicional en listas de control de acceso (ACL) portables de interfaz de sistema operativo (POSIX).
signedUnauthorizedObjectId suoid Opcionales 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. Azure Storage realiza una comprobación de ACL POSIX con el identificador de objeto antes de autorizar la operación.
signedCorrelationId scid Opcionales 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 canonicalizedResource campo de la cadena a signo.
signedEncryptionScope ses Opcionales 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 Requerido All 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.
Cache-Control encabezado de respuesta rscc Opcionales 2013-08-15 y versiones posteriores Azure Storage establece el Cache-Control encabezado de respuesta en el valor especificado en el token de SAS.
Content-Disposition encabezado de respuesta rscd Opcionales 2013-08-15 y versiones posteriores Azure Storage establece el Content-Disposition encabezado de respuesta en el valor especificado en el token de SAS.
Content-Encoding encabezado de respuesta rsce Opcionales 2013-08-15 y versiones posteriores Azure Storage establece el Content-Encoding encabezado de respuesta en el valor especificado en el token de SAS.
Content-Language encabezado de respuesta rscl Opcionales 2013-08-15 y versiones posteriores Azure Storage establece el Content-Language encabezado de respuesta en el valor especificado en el token de SAS.
Content-Type encabezado de respuesta rsct Opcionales 2013-08-15 y versiones posteriores Azure Storage establece el Content-Type encabezado de respuesta en el valor especificado en el token de SAS.

Especificar el campo de versión firmada

El campo obligatorio signedVersion (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 signature campo y especifica la versión del servicio que controla una solicitud realizada con esta firma de acceso compartido. El valor del sv campo debe ser la versión 2018-11-09 o posterior.

Especificar el campo de recurso firmado

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, contenedor o directorio en el token de SAS:

Recurso Valor del parámetro Versiones compatibles Descripción
Blob b Todo 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á dentro de un contenedor.

Especificar la duración de la validez de la firma

Los signedStart campos (st) y signedExpiry (se) indican los tiempos de inicio y expiración de la SAS. El campo signedExpiry es obligatorio. 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 signedPermissions campo (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 valores de permisos válidos para un contenedor son 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.

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.
  • No se pueden conceder contenedores.

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
All 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
All Agregue un bloque a un blob en anexos.
Crear c Contenedor
Directorio
Blob
All Escriba un nuevo blob, una instantánea de un blob o copie un blob en un nuevo blob.
Escritura w Contenedor
Directorio
Blob
All Cree o escriba contenido, propiedades, metadatos o lista de bloqueados. 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
All 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
Eliminación permanente y Blob 2020-02-10 y versiones posteriores Elimine permanentemente una instantánea de blob o una versión.
List l Contenedor
Directorio
Todo Enumera los blobs de forma no recursiva.
Etiquetas t Blob 2019-12-12 y versiones posteriores Lee o escribe las etiquetas en un blob.
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. Esta operación se puede restringir opcionalmente al propietario del blob secundario, directorio o 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 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 blob dentro de un directorio que tiene el bit pegado establecido.
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 de 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.

Cuando se especifica un intervalo de direcciones IP, 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 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 signedIp campo. Se producirá un error 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 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. Las solicitudes que realice con la SAS deben 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. 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 signedIp campo.

Especificación del protocolo HTTP

El campo opcional signedProtocol (spr) especifica el protocolo que se permite para las solicitudes que se realizan con la SAS. Los valores posibles son tanto HTTPS como HTTP (https,http) o solo HTTPS (https). El valor predeterminado es https,http.

Nota

No es posible especificar HTTP para el spr campo.

Especificar el identificador de objeto firmado

El signedObjectId campo (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 de una entidad de seguridad en el Plataforma de identidad de Microsoft.

Especificación del identificador de inquilino firmado

El signedTenantId campo (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 Microsoft Entra en el que se define una entidad de seguridad.

Especificar la hora de inicio de la clave firmada

El campo opcional signedKeyStartTime (skt) indica el inicio de la duración 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. Si se omite la hora de inicio, se supone que la hora de inicio de la clave firmada es la hora actual.

Especificar la hora de expiración de la clave firmada

El signedKeyExpiryTime campo (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 clave firmada

El signedKeyService campo (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.

Especificación de la versión de la clave firmada

El signedkeyversion campo (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 signedkeyversion campo 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 firmado para una entidad de seguridad

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

  • El saoid campo 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 suoid campo 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 suoid campo solo es válido para las cuentas que tienen un espacio de nombres jerárquico. Cuando el suoid campo 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 suoid campo se incluye en el token de SAS. De lo contrario, se producirá un error de autorización en la comprobación de permisos.

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

Al especificar el identificador de objeto en el saoid campo 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 skoid parámetro .
  • Si el bit permanente 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 x-ms-owner encabezado, el valor especificado por el identificador de objeto debe coincidir con el valor especificado por el x-ms-owner encabezado.
  • Si una operación establece el grupo para un directorio o blob y se especifica el x-ms-group encabezado, el valor especificado por el identificador de objeto debe ser un miembro del grupo especificado por el x-ms-group encabezado.
  • Si una operación establece los permisos o la ACL para un directorio o blob, también se debe cumplir 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 signedPermissions campo (sp) debe incluir el Ownership permiso (o) además del Permissions permiso (p).

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

El saoid campo o suoid solo se admite si el signedVersion campo (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 signedCorrelationId campo (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 tanto en el registro de auditoría local como en el registro de auditoría de almacenamiento, estos eventos se pueden correlacionar 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 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 y posteriores.

Especificación de parámetros de consulta para invalidar los encabezados de respuesta

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. 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 parámetro de rsct=binary consulta en un token de SAS, el Content-Type encabezado de respuesta se establece binaryen . 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 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".

Especificación del ámbito de cifrado

El signed encryption scope campo (ses) especifica un ámbito de cifrado que la aplicación cliente usa al cargar blobs mediante el token de SAS mediante la operación Put Blob . El signed encryption scope campo 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 ses campo 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).

Si el x-ms-encryption-scope encabezado y el ses parámetro de consulta 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).

Especificación de la firma

El signature campo (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 firma 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 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" +
                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 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" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Recurso con formato 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 sdd parámetro .

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

En los ejemplos siguientes se muestra cómo construir la canonicalizedResource parte de la cadena, según el 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 Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Ejemplo de directorio (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Ejemplo de blob (Azure Data Lake Storage Gen2)
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. No olvide 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 de 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=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.
Id. de objeto skoid=<object-id> Una entidad de seguridad Microsoft Entra.
Id. de inquilino sktid=<tenant-id> El Microsoft Entra inquilino donde está registrada la entidad de seguridad.
Hora de inicio de la clave skt=2023-05-24T01:13:55Z Inicio de la duración 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 la 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 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 Blob Service sv=2022-11-02 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.
Signature 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.

Revocación de 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 las asignaciones de roles de RBAC para la entidad de seguridad que se usa para crear la SAS.

Importante

La clave de delegación de usuario y las asignaciones de roles de RBAC se almacenan en caché en Azure Storage, por lo que puede haber un retraso entre el momento en que se inicia el proceso de revocación y el momento en que una SAS de delegación de usuario existente deja de ser 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 se basan en esa clave no son válidas. A continuación, puede volver a llamar a la operación Obtener clave de delegación de usuario 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

Puede cambiar o quitar la asignación de roles de RBAC 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