Share via


403 Error de autorización de acceso denegado cuando el bit sticky está habilitado en ADLS Gen2

Este artículo le ayuda a comprender el bit sticky y proporciona información sobre cómo comprobar esta configuración al configurarla en Azure Data Lake Storage (ADLS) Gen2 y obtener problemas.

¿Cuál es el bit pegajoso de ADLS Gen2?

A menudo, los usuarios de ADLS Gen2 necesitan administrar permisos para distintos usuarios y una manera de hacerlo es mediante una lista de control de acceso (ACL). ACL es un sistema de control de acceso similar a POSIX con una configuración específica denominada bit sticky que puede causar errores de autorización. Para obtener más información sobre el modo de control de permisos y el bit sticky, consulte Listas de control de acceso (ACL) en Azure Data Lake Storage Gen2.

El bit sticky es una característica avanzada que no es necesaria en la configuración de ACL de la cuenta de almacenamiento de ADLS Gen2. En su lugar, puede usar la característica de máscara para limitar los permisos máximos para los usuarios con nombre, los grupos con nombre y el grupo propietario. Esto funciona de forma similar al bit pegajoso y se configura fácilmente en el Azure Portal.

403 Error de autorización de acceso denegado

Imagine la siguiente situación:

  • Una cuenta de almacenamiento de ADLS Gen2 tiene un contenedor denominado contenedor y una ruta de acceso de carpeta denominada carpeta/carpeta secundaria.
  • Use ACL como método de autorización.
  • En la configuración de ACL de la cuenta de almacenamiento de ADLS Gen2, se configura con el permiso Ejecutar (X) en el directorio raíz y la carpeta y con el permiso Escribir y ejecutar (WX) en la carpeta secundaria.
  • El bit sticky está habilitado en la carpeta secundaria.
  • Intenta crear o cargar un nuevo archivo, por ejemplo, test.txt, en la ruta de acceso de la carpeta de la cuenta de almacenamiento de ADLS Gen2 container/folder/child-folder/.

En este escenario, obtendrá un error de autorización 403 Acceso denegado.

Este error se produce por dos motivos:

  • No tiene permisos suficientes para acceder a la ruta de acceso de la carpeta.
  • Tiene permisos suficientes, pero habilitar el bit sticky hace que no sea el propietario de esta ruta de acceso de carpeta.

Identificar si el bit sticky provoca un error 403 Access Denied

Compruebe la configuración de ACL de la carpeta y las carpetas primarias y compárela con los escenarios comunes relacionados con los permisos de ACL. Si los permisos son suficientes, el error 403 puede deberse al bit sticky.

Comprobación de la configuración de bits persistentes mediante la CLI de Azure

Hay muchas maneras de comprobar esta configuración, como una llamada a la API REST, un comando de PowerShell y la CLI de Azure. Se recomienda la opción de la CLI de Azure porque no requiere que se instale ningún software adicional y el comando es fácil de entender.

Para comprobar la configuración de bits persistentes mediante la CLI de Azure, siga estos pasos:

  1. Inicie sesión en el Azure Portal con su cuenta. Asegúrese de que esta cuenta tiene la asignación de roles Propietario de datos de Storage Blob en la cuenta de almacenamiento de ADLS Gen2.

  2. Seleccione Cloud Shell en el portal de Azure.

                                 Captura de pantalla del botón Cloud Shell en el portal de Azure.                                     

  3. Use el siguiente comando para obtener la ACL y la configuración de bits persistentes del directorio contenedor/carpeta :

    az storage fs access show -p folder -f container --account-name account --auth-mode login
    

    Para comprobar la ACL y la configuración de bits persistentes del directorio raíz, que es la ACL de nivel de contenedor y la configuración de bits sticky, use el siguiente comando:

    az storage fs access show -p / -f container --account-name account --auth-mode login
    

    Esta es una salida de ejemplo:

    Captura de pantalla del ejemplo de salida del comando.

    En el cuerpo JSON de la respuesta, céntrese en permissions. Normalmente contiene 9 o 10 bits con un símbolo "+" adicional. Para obtener más información sobre estas letras, consulte Usuarios e identidades.

    En el ejemplo anterior se indica que todos los permisos de usuario están habilitados y que el bit permanente está habilitado. Para obtener más información sobre cómo leer esta notación de permisos, vea Notación de permisos de Unix tradicionales.

    La novena letra tiene cuatro valores posibles: "-", "x", "t" y "T". Si el valor de esta letra es "t" o "T", significa que el bit sticky está habilitado. "t" es "x" con el bit sticky habilitado y "T" es "-" con el bit sticky habilitado.

    "rwxrwxrwt" se puede explicar mediante lo siguiente:

    • Los permisos r,w y x están habilitados para el propietario.
    • Los permisos r,w y x están habilitados para el grupo Propietario.
    • Los permisos r,w y x están habilitados para otros usuarios y el bit sticky está habilitado.

    Para entenderlo mejor, este es otro ejemplo de "rwxr-xr-T":

    • Los permisos r,w y x están habilitados para el propietario.
    • Los permisos r y x están habilitados para el grupo Propietario.
    • Solo el permiso r está habilitado para otros usuarios y el bit persistente está habilitado.

    Según los formularios cortos para permisos, el permiso de formulario corto se calcula para cada grupo de tres letras ("r" como 4, "w" como 2 y "x" como 1). Por lo tanto, "rw-rwx--x" será igual a 4+2+0, 4+2+1, 0+0+1, 671. En función de esta regla de cálculo, solo tiene que agregar la cuarta letra al principio. Si el bit sticky está habilitado, establézcalo como 1. Si el bit sticky está deshabilitado, establézcalo como 0.

    Estos son algunos ejemplos:

    • rwxrwxrwt => 1777
    • rwxr-xr-T => 1754
    • rw-rwx--x => 0671

Deshabilitar o habilitar la configuración de bits persistentes

Para deshabilitar o habilitar la configuración de bits persistentes, establezca permisos en los valores esperados.

La cuenta de Azure que se usa para modificar esta configuración debe tener el rol Propietario de datos de Storage Blob en la cuenta de almacenamiento de ADLS Gen2 de destino. Hay muchas maneras posibles de modificar la configuración de bits persistentes. Estos son los SDK admitidos:

SDK Versión compatible Más información
API de REST 2019-12-12 y versiones posteriores de la API Ruta de acceso
Módulo az de PowerShell 5.6.0 y versiones posteriores Uso de PowerShell para administrar las ACL en Azure Data Lake Storage Gen2
Azure CLI 2.38.0 y versiones posteriores Uso de la CLI de Azure para administrar las ACL en Azure Data Lake Storage Gen2
SDK de .NET 12.14.0 y versiones posteriores Uso de .NET para administrar las ACL en Azure Data Lake Storage Gen2
Java SDK 12.11.0 y versiones posteriores Uso de Java para administrar acl en Azure Data Lake Storage Gen2
SDK de Python 12.8.0 y versiones posteriores Uso de Python para administrar las ACL en Azure Data Lake Storage Gen2
SDK de JavaScript 12.11.0-beta.1 y versiones posteriores Uso del SDK de JavaScript en Node.js para administrar las ACL en Azure Data Lake Storage Gen2
HDFS CLI 3.3.3 y versiones posteriores Uso de la CLI de HDFS con Data Lake Storage Gen2 y Apache Hadoop 3.3.3: Guía de permisos de HDFS

Este es un ejemplo de deshabilitación o habilitación de la configuración de bits persistentes con la CLI de Azure.

  1. Inicie sesión en la Azure Portal con la cuenta que tiene la asignación de roles Propietario de datos de Storage Blob en la cuenta de almacenamiento de ADLS Gen2 de destino.

  2. Seleccione Cloud Shell en el portal de Azure.

                                 Captura de pantalla del botón Cloud Shell en el portal de Azure.                                     

  3. Para establecer la ACL y la configuración de bits persistentes del directorio contenedor/carpeta en los permisos "rwxrwxrwt" y habilitar el bit sticky, use el siguiente comando:

    az storage fs access set --permissions rwxrwxrwt -p folder -f container --account-name account --auth-mode login
    

    Para modificar la configuración del directorio raíz, que es la ACL de nivel de contenedor y la configuración de bits sticky, use el siguiente comando:

    az storage fs access set --permissions rwxrwxrwt -p / -f container --account-name account --auth-mode login
    

    en {permission notation} el comando anterior puede aceptar las notaciones de formato largo y corto. Esto significa que el siguiente comando también está calificado:

    az storage fs access set --permissions 1776 -p folder -f container --account-name account --auth-mode login
    

    Esta es una salida de ejemplo:

    Captura de pantalla del ejemplo de salida del comando.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.