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

Un token de SAS para acceder a un contenedor, directorio o blob se puede proteger mediante Azure AD credenciales o una clave de cuenta. Una SAS protegida con Azure AD credenciales se denomina SAS de delegación de usuarios. Microsoft recomienda usar credenciales de Azure AD cuando sea posible como procedimiento recomendado de seguridad, en lugar de usar 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 credenciales de Azure AD para crear una SAS de delegación de usuarios de cara a una seguridad superior.

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 usuario, que luego se usa para firmar la SAS. La clave de delegación de usuarios es análoga a la clave de cuenta usada para firmar una SAS de servicio o una SAS de cuenta, excepto en que se basa en las credenciales de Azure AD. 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.

Una SAS de delegación de usuarios es compatible con 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

La firma de acceso compartido son claves que conceden permisos a los recursos de almacenamiento y deben protegerse de la misma manera que una clave de cuenta. Es importante proteger una SAS de uso malintencionado o no intencionado. Sea cauto al distribuir una SAS y tenga un plan para revocar una SAS en peligro. Las operaciones que usan firmas de acceso compartido solo se deben realizar a través de una conexión HTTPS y los URI de firma de acceso compartido solo se deben distribuir 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 para el 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 superior y se habilita un espacio de nombres jerárquico (HNS). La semántica del ámbito de directorio (sr=d) es similar al ámbito de contenedor (sr=c), salvo que el acceso está restringido a un directorio y a los archivos y subdirectorios que hay debajo. Cuando sr=d se especifica , también se requiere sdd el parámetro de consulta.

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

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

La SAS de delegación de usuarios admite un OID saoid de usuario opcional incluido en el parámetro o suoid cuando la versión de autorización (sv) es 2020-02-10 o superior. Este parámetro opcional proporciona 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 un usuario y una operación específicos del sistema de archivos, lo que proporciona un token de acceso menos vulnerable que es más seguro con el fin de distribuir entre 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.

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 está autorizada con las credenciales de Azure AD que se usaron para crear la SAS. Los permisos de control de acceso basado en rol (RBAC) concedidos para esa cuenta de Azure AD, 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 evita la necesidad de 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 con Azure AD 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 signedPermissions de SAS mediante el campo (sp). Si no se concede también un permiso concedido a la entidad de seguridad a través de RBAC 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 RBAC y los permisos concedidos a través del token de SAS se alinean con el nivel de acceso requerido por el cliente.

Para crear una SAS de delegación de usuarios, siga estos pasos:

  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 Azure AD.
  3. Use el token para solicitar la clave de delegación de usuario mediante una llamada a la operación Obtener clave de delegación de usuario.
  4. Use la clave de delegación de usuario 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 Azure AD 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, se debe asignar microsoft.Storage /storageAccounts/blobServices/generateUserDelegationKey action. Los siguientes roles rbac integrados incluyen 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, microsoft.Storage La acción /storageAccounts/blobServices/generateUserDelegationKey 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 enumerados anteriormente, o un rol personalizado que incluya Microsoft.Storage La acción /storageAccounts/blobServices/generateUserDelegationKey, en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción, la entidad de seguridad podrá solicitar la clave de delegación de usuarios.

En el caso de que a la entidad de seguridad se le asigne un rol que permita el acceso a datos pero que esté en el nivel de un contenedor, también puede asignar el rol de delegador de blobs de Storage a esa entidad de seguridad en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción. El Storage de delegador de blobs 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 RBAC 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 a Azure AD. Proporcione el token con el esquema de portador para autorizar la llamada a la operación Obtener clave de delegación de usuario. Para obtener más información sobre cómo solicitar un token de OAuth desde Azure AD, 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 usuario 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 titulada Construcción de una SAS de delegación de usuarios.

Cuando un cliente solicita una clave de delegación de usuario 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 que se crea con la clave de delegación de usuarios se le conceden los permisos que se han concedido a la entidad de seguridad.

Una vez que tenga la clave de delegación de usuario, puede usar esa clave 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 usuario es independiente del token de OAuth 2.0 que se usa para adquirirla, por lo que no es necesario renovar el token siempre y cuando la clave siga siendo válida. Puede especificar que la clave sea 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 admitidos para un token de SAS de delegación de usuarios. Las secciones posteriores 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 11-09-2018 o posterior Indica la versión del servicio utilizada para construir el campo de firma y también especifica la versión del servicio que controla una solicitud realizada con esta firma de acceso compartido.
signedResource sr Requerido All Especifica qué recursos de blob son accesibles a través de la firma de acceso compartido.
signedStart st Opcional All Opcional. Hora a la que la firma de acceso compartido pasa a ser válida, expresada en uno de los formatos ISO 8601 UTC aceptados. Si se omite, se usa la hora UTC actual como hora de inicio. Para obtener más información sobre los formatos UTC aceptados, vea Aplicar formato a los valores DateTime.
signedExpiry se Requerido All Hora a la 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 Aplicar formato a los 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 Opcional 2015-04-05 o posterior Especifica una dirección IP o un intervalo inclusivo de direcciones IP desde las que se aceptan solicitudes.
signedProtocol spr Opcional 2015-04-05 o posterior 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 Requerido 11-09-2018 o posterior Identifica una entidad Azure AD de seguridad.
signedTenantId sktid Requerido 11-09-2018 o posterior Especifica el inquilino Azure AD en el que se define una entidad de seguridad.
signedKeyStartTime skt Opcional. 11-09-2018 o posterior 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 usuario, expresada en uno de los formatos UTC ISO 8601 aceptados. Si se omite, se supone la hora actual. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedKeyExpiryTime ske Requerido 11-09-2018 o posterior La operación Obtener clave de delegación de usuario devuelve el valor. Indica el final de la vigencia de la clave de delegación de usuario, expresada en uno de los formatos UTC ISO 8601 aceptados. Para obtener más información sobre los formatos UTC aceptados, vea Formato de valores DateTime.
signedKeyService sks Requerido 11-09-2018 o posterior Indica el servicio para el que la clave de delegación de usuario es válida. Actualmente solo se admite Blob service de datos.
signedAuthorizedObjectId saoid Opcional 2020-02-10 o posterior Especifica el identificador de objeto de una entidad Azure AD seguridad autorizada por el propietario de la clave de delegación de usuario para realizar la acción que concede el token de SAS. No se realiza ninguna comprobación de permisos adicional en las ACL posix.
signedUnauthorizedObjectId suoid Opcional 2020-02-10 o posterior Especifica el identificador de objeto de una entidad Azure AD seguridad cuando se habilita un espacio de nombres jerárquico. Azure Storage realiza una comprobación de ACL de POSIX con el identificador de objeto antes de autorizar la operación.
signedCorrelationId scid Opcional 2020-02-10 o posterior Correlacionar los registros de auditoría de almacenamiento con los registros de auditoría usados por la entidad de seguridad que genera y distribuye SAS.
signedDirectoryDepth sdd Obligatorio cuando sr=d 2020-02-10 o posterior Indica el número de directorios debajo de la carpeta raíz canonicalizedResource del directorio especificado en el campo de la cadena para firmar.
signedEncryptionScope ses Opcional 2020-12-06 o posterior Indica el ámbito de cifrado que se usará para cifrar el contenido de la solicitud.
signature sig Requerido All La firma es un HMAC calculado sobre string-to-sign (la cadena para firmar) y una clave con el algoritmo SHA256, y después codificado con Base64.
Cache-Control encabezado de respuesta rscc Opcional 2013-08-15 o posterior Azure Storage establece el encabezado Cache-Control de respuesta en el valor especificado en el token de SAS.
Content-Disposition encabezado de respuesta rscd Opcional 2013-08-15 o posterior Azure Storage establece el encabezado Content-Disposition de respuesta en el valor especificado en el token de SAS.
Content-Encoding encabezado de respuesta rsce Opcional 2013-08-15 o posterior Azure Storage establece el encabezado Content-Encoding de respuesta en el valor especificado en el token de SAS.
Content-Language encabezado de respuesta rscl Opcional 2013-08-15 o posterior Azure Storage establece el encabezado Content-Language de respuesta en el valor especificado en el token de SAS.
Content-Type encabezado de respuesta rsct Opcional 2013-08-15 o posterior Azure Storage establece el encabezado Content-Type de respuesta en el valor especificado en el token de SAS.

Especificar el campo de 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 signature del servicio utilizada para construir el campo y también 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.

Especificación del 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 compatibles Descripción
Blob b All Concede acceso al contenido y los metadatos del blob.
Versión de un blob Bv Versión 2018-11-09 y posteriores Concede acceso al contenido y los metadatos de la versión del blob, pero no al blob base.
Instantánea de blob bs Versión 2018-11-09 y posteriores Concede acceso al contenido y los metadatos de la instantánea de blob, pero no al blob base.
Contenedor c All Concede acceso al contenido y los metadatos de cualquier blob del contenedor y a la lista de blobs del contenedor.
Directorio d Versión 2020-02-10 y 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 signedDirectoryDepth se requiere el parámetro (sdd). Un directorio siempre está debajo de un contenedor.

Especificar el intervalo de validez de la firma

Los signedStart campos (st) y signedExpiry (se) indican la hora de inicio y la hora de expiración de la SAS. El campo signedExpiry es obligatorio. El signedStart campo es opcional; si se omite, se usa la hora UTC actual como hora de inicio.

Para una SAS de delegación de usuarios, la hora de inicio y la hora de 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 configuración de permisos válidos para un contenedor son rw, rd, rl, wd, wly rl. Algunos ejemplos de configuración no válida son wr, dr, lry dw. No se permite especificar una designación de permisos 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 las propiedades de los contenedores no se pueden leer o escribir.
  • Los contenedores no se pueden conceder.

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

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

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, haga 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 bloques. 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 dividir una concesión en un blob. Para más información, consulte la operación Lease Blob .
Eliminar versión x Contenedor
Blob
Versión 2019-12-12 o posterior Eliminar una versión de un blob
Eliminación permanente s Blob Versión 2020-02-10 o posterior Elimine permanentemente una instantánea o versión de blob.
List l Contenedor
Directorio
All Enumerar blobs de forma no recursiva.
Etiquetas t Blob Versión 2019-12-12 o posterior Leer o escribir las etiquetas en un blob.
Move m Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Mueva un blob o un directorio y su contenido a una nueva ubicación. Opcionalmente, esta operación se puede restringir al propietario del blob secundario, saoid el directorio o el directorio primario si el parámetro se incluye en el token de SAS y el bit persistente se establece en el directorio primario.
Execute e Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Obtenga las propiedades del sistema y, si el espacio de nombres jerárquico está habilitado para la cuenta de almacenamiento, obtenga la ACL POSIX de un blob. Si el espacio de nombres jerárquico está habilitado y el autor de la llamada es el propietario de un blob, este permiso concede la capacidad de establecer el grupo propietario, los permisos POSIX y la ACL posix del blob. No permite que el autor de la llamada lea los metadatos definidos por el usuario.
Propiedad o Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Cuando el espacio de nombres jerárquico está habilitado, este permiso permite que el autor de la llamada establezca el propietario o el grupo propietario, o que actúe como propietario al cambiar el nombre o eliminar un directorio o blob dentro de un directorio que tenga el conjunto de bits persistente.
Permisos p Contenedor
Directorio
Blob
Versión 2020-02-10 o posterior Cuando el espacio de nombres jerárquico está habilitado, este permiso permite al autor de la llamada establecer permisos y ACL posix en directorios y blobs.
Establecer directiva de inmutabilidad i Contenedor
Blob
Versión 2020-06-12 o posterior Establezca o elimine la directiva de inmutabilidad o la retención legal en un blob.

Especificar una dirección IP o un intervalo IP

El campo signedIp opcional (sip) especifica una dirección IP o un intervalo de direcciones IP desde las que se aceptan 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.

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

En la tabla siguiente se describe si signedIp se debe incluir el 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 proporcionada al cliente en este escenario no debe incluir una dirección IP de salida para el signedIp campo. Se producirá un error en las solicitudes realizadas desde dentro de la misma región mediante una SAS con una dirección IP de salida especificada.

En su lugar, use una instancia de Azure Virtual Network (VNet) para administrar las restricciones de seguridad de red. Las solicitudes para Azure Storage desde dentro de la misma región siempre tienen lugar a través de 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 proporcionada al cliente en este escenario puede incluir una dirección IP pública o un intervalo de direcciones para el signedIp campo. Una solicitud realizada con la SAS debe originarse en la dirección IP o el intervalo de direcciones especificado.
Cliente que se ejecuta de forma local o en un entorno de nube diferente En cualquier región de Azure Una SAS proporcionada al cliente en este escenario puede incluir una dirección IP pública o un intervalo de direcciones para el signedIp campo. Una solicitud realizada con la SAS debe originarse en la dirección IP o el intervalo de direcciones especificado.

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 signedProtocol opcional (spr) especifica el protocolo permitido para una solicitud realizada con la SAS. Los valores posibles son HTTPS y HTTP (https,http) o solo HTTPS (https). El valor predeterminado es https,http.

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 usuario devuelve este valor como parte de la respuesta. El identificador de objeto con firma es un valor GUID que sirve el identificador inmutable para 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 usuario devuelve este valor como parte de la respuesta. El identificador de inquilino firmado es un valor GUID que representa el Azure AD en el que se define una entidad de seguridad.

Especificación de la hora de inicio de la clave firmada

El campo signedKeyStartTime opcional (skt) indica el inicio de la duración de la clave de delegación de usuario en formato de fecha ISO. La operación Obtener clave de delegación de usuario devuelve este valor como parte de la respuesta. Si se omite, 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 usuario devuelve este valor como parte de la respuesta. La hora de expiración de la clave firmada indica el final de la vigencia de la clave de delegación de usuario. 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 signedKeyService campo (sks) es necesario para una SAS de delegación de usuarios. La operación Obtener clave de delegación de usuario 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 usuario es válida. El valor del campo de servicio de clave firmada para el Blob service es b.

Especificación de la versión de 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 usuario devuelve este valor como parte de la respuesta. El campo versión de clave firmada especifica la versión del servicio de almacenamiento que se usa para obtener la clave de delegación de usuario. 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 signedAuthorizedObjectId opcionales (saoid) signedUnauthorizedObjectId y (suoid) permiten 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 Azure AD que está autorizada por el propietario de la clave de delegación de usuario 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 tiene los permisos necesarios antes de conceder 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 Azure AD seguridad 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. Debe habilitarse un espacio de nombres jerárquico para la cuenta de almacenamiento si el suoid campo está incluido 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 usuario se captura en el campo skoid obligatorio. Para especificar un identificador de objeto en el token saoid de SAS con el campo o suoid , skoid a la entidad de seguridad identificada en el campo se le debe asignar un rol 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 saoid campo o suoid también se restringen las operaciones relacionadas con la propiedad del directorio o del blob:

  • Si una operación crea un directorio o 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 persistente 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 del 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 x-ms-owner y se especifica el 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 x-ms-group y se especifica el encabezado, el valor especificado por el identificador de objeto debe ser miembro del grupo especificado por el x-ms-group encabezado.
  • Si una operación establece los permisos o 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 propietario del directorio o blob.
    • El valor del campo signedPermissions (sp) debe incluir el Ownership permiso (o) además del Permissions permiso (p).

El identificador de objeto especificado en el campo saoid o suoid se incluye en los registros de diagnóstico cuando se realiza una solicitud mediante el token de SAS.

El saoid campo suoid o solo se admite si signedVersion el 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 usados por la entidad de seguridad que genera y distribuye la SAS. Por ejemplo, un servicio de autorización de confianza normalmente tendrá 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. La inclusión de un identificador de correlación en el registro de auditoría local y el registro de auditoría de almacenamiento permite correlacionar estos eventos más adelante. El valor es un GUID sin llaves en minúsculas.

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

Especificar la profundidad del directorio

Si el signedResource campo especifica un directorio (sr=d), también signedDirectoryDepth debe especificar el campo (sdd) para indicar el número de subdirectorios del 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 situado debajo del directorio raíz agrega a la profundidad en uno. El directorio https://{account}.blob.core.windows.net/{container}/d1/d2 tiene una profundidad de dos.

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

Especificación de parámetros de consulta para invalidar 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 encabezado Content-Type de respuesta se establece en binary. Este valor reemplaza el valor del encabezado Content-Type almacenado para el blob para una solicitud que usa esta firma de acceso compartido solamente.

Si crea una firma de acceso compartido que especifica los 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. Consulte la sección Construcción de la cadena de firma a continuación para obtener más información.

Especificación del ámbito de cifrado

El signed encryption scope campo (ses) especifica un ámbito de cifrado que la aplicación cliente puede usar al cargar blobs con el token de SAS a través de Put Blob. El signed encryption scope campo se admite cuando el campo de 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 se establece el ámbito de cifrado predeterminado para el contenedor o el sistema de archivos, ses el campo respeta la directiva de cifrado del contenedor. Si hay una discrepancia entre el ses x-ms-default-encryption-scope parámetro de consulta y el encabezado, x-ms-deny-encryption-scope-override truey el encabezado se establece en , el servicio devuelve el código de respuesta de error 403 (Prohibido).

Cuando el x-ms-encryption-scope encabezado y el ses parámetro de consulta se proporcionan en la solicitud PUT, el servicio devuelve el código de respuesta de error 400 (solicitud no correcta) si hay una falta de coincidencia.

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 construida a partir de los campos que se deben comprobar para autorizar la solicitud. La firma es un HMAC calculado sobre string-to-sign (la cadena para firmar) y una clave con el algoritmo SHA256, y después codificado con Base64.

Para construir la cadena de firma de una SAS de delegación de usuarios, cree primero la cadena para firmar a partir de los campos que componen la solicitud y, a continuación, encodifique la cadena como UTF-8 y calcule la firma mediante el algoritmo HMAC-SHA256. Los campos incluidos en la cadena para firmar deben estar codificados con dirección URL.

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

Versión 2020-12-06 y posteriores

La cadena para firmar para la versión de autorización 2020-12-06 o posterior 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 para 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 canonicalizedresouce de la cadena es una ruta de acceso canónica al recurso firmado. Debe incluir el punto Blob service de conexión y el nombre del recurso, y debe estar descodificado por url. Una ruta de acceso de blob debe incluir su contenedor. Una ruta de acceso del directorio debe incluir el número de subdirectorios correspondientes al sdd parámetro .

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

En los ejemplos siguientes se muestra cómo construir la canonicalizedResource parte 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 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 ese campo. No olvide incluir el carácter de nueva línea (\n) después de la cadena vacía.

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 revocando la clave de delegación de usuarios o cambiando o quitando las asignaciones de roles de RBAC para la entidad de seguridad usada 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.

Revocación de la clave de delegación de usuarios

Puede revocar la clave de delegación de usuarios mediante una llamada a la operación Revocar claves de delegación de usuarios. 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 llamar de nuevo a la operación Obtener clave de delegación de usuarios y usar la clave para crear nuevas firmas de acceso compartido. Este enfoque es la manera más rápida de revocar una SAS de delegación de usuarios.

Cambio o eliminación de asignaciones de roles

Puede cambiar o quitar la asignación de roles rbac para la entidad de seguridad usada 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 especificados para el recurso.

Consulte también