Configuración de acceso de lectura público anónimo a contenedores y blobs

Azure Storage admite el acceso de lectura público anónimo opcional a contenedores y blobs. De forma predeterminada, nunca se permite el acceso anónimo a los datos. A menos que habilite explícitamente el acceso anónimo, todas las solicitudes a un contenedor y sus blobs deben estar autorizadas. Si se configura el nivel de acceso público de un contenedor para permitir el acceso anónimo, los clientes pueden leer los datos de dicho contenedor sin autorizar la solicitud.

Advertencia

Cuando se configura un contenedor para el acceso público, cualquier cliente puede leer los datos del mismo. El acceso público supone un riesgo de seguridad, por lo que si el escenario no lo requiere, se recomienda no permitirlo para la cuenta de almacenamiento.

En este artículo se describe cómo configurar el acceso público anónimo de lectura para un contenedor y sus blobs. Para obtener información sobre cómo corregir el acceso anónimo para una seguridad óptima, consulte uno de estos artículos:

Acerca del acceso de lectura público anónimo

El acceso público a los datos siempre está prohibido de forma predeterminada. Hay dos configuraciones independientes que afectan al acceso público:

  1. Permitir el acceso público para la cuenta de almacenamiento. De forma predeterminada, una cuenta de almacenamiento de Azure Resource Manager permite a un usuario con los permisos adecuados configurar el acceso público a un contenedor. Los datos de blobs no están disponibles para el acceso público a menos que el usuario lleve a cabo el paso adicional para configurar explícitamente la configuración de acceso público del contenedor.
  2. Configurar el acceso público del contenedor. De forma predeterminada, la configuración de acceso público de un contenedor está deshabilitada, lo que significa que se requiere autorización para cada solicitud al contenedor o sus datos. Un usuario con los permisos adecuados puede modificar la configuración de acceso público de un contenedor para habilitar el acceso anónimo solo si se permite el acceso anónimo para la cuenta de almacenamiento.

En la tabla siguiente se resume el modo en que ambas opciones afectan a acceso público a un contenedor.

El nivel de acceso público del contenedor se establece en Privado (configuración predeterminada). El nivel de acceso público del contenedor se establece en Contenedor. El nivel de acceso público del contenedor se establece en Blob.
El acceso público no está permitido para la cuenta de almacenamiento No hay acceso público a ningún contenedor de la cuenta de almacenamiento. No hay acceso público a ningún contenedor de la cuenta de almacenamiento. La configuración de la cuenta de almacenamiento invalida la configuración del contenedor. No hay acceso público a ningún contenedor de la cuenta de almacenamiento. La configuración de la cuenta de almacenamiento invalida la configuración del contenedor.
El acceso público está permitido para la cuenta de almacenamiento (configuración predeterminada) No hay acceso público a este contenedor (configuración predeterminada). Se permite el acceso público a este contenedor y sus blobs. Se permite el acceso público a los blobs de este contenedor, pero no al propio contenedor.

Cuando se permite el acceso público anónimo para una cuenta de almacenamiento y se configura para un contenedor específico, el servicio acepta una solicitud para leer un blob en ese contenedor que se pasa sin el encabezado Authorization y se devuelven los datos del blob en la respuesta.

Habilitación o deshabilitación del permiso de acceso de lectura público a una cuenta de almacenamiento

De forma predeterminada, una cuenta de almacenamiento está configurada para permitir a los usuarios con los permisos adecuados configurar el acceso público a contenedores y blobs. Cuando se permite el acceso público, un usuario con los permisos adecuados puede modificar la configuración de acceso público de un contenedor para permitir el acceso público anónimo a los datos de ese contenedor. Los datos de blobs no están nunca disponibles para el acceso público a menos que el usuario lleve a cabo el paso adicional para configurar explícitamente la configuración de acceso público del contenedor.

Tenga en cuenta que el acceso público a un contenedor está siempre desactivado de forma predeterminada y se debe configurar explícitamente para permitir solicitudes anónimas. Independientemente de la configuración de la cuenta de almacenamiento, los datos nunca estarán disponibles para el acceso público a menos que un usuario con los permisos adecuados lleve a cabo este paso adicional para habilitar el acceso público en el contenedor.

No permitir el acceso público para la cuenta de almacenamiento invalida la configuración de acceso público para todos los contenedores de esa cuenta de almacenamiento, lo que impide el acceso anónimo a los datos de blobs de esa cuenta. Cuando no se permite el acceso público para la cuenta, no es posible configurar la configuración de acceso público para que un contenedor permita el acceso anónimo y se producirá un error en las solicitudes anónimas futuras a esa cuenta. Antes de cambiar esta configuración, asegúrese de que entiende el impacto en las aplicaciones cliente que pueden tener acceso a los datos de la cuenta de almacenamiento de forma anónima. Para más información, consulte el artículo en el que se explica cómo impedir el acceso de lectura público anónimo a contenedores y blobs.

Importante

Después de no permitir el acceso público anónimo para una cuenta de almacenamiento, los clientes que usan el desafío de portador anónimo verán que Azure Storage devuelve un error 403 (Prohibido) en lugar de un error 401 (No autorizado). Se recomienda que todos los contenedores sean privados para mitigar este problema. Para más información sobre cómo modificar la configuración de acceso público para los contenedores, consulte Establecimiento del nivel de acceso público en un contenedor.

Recuerde que permitir o denegar el acceso público al blob requiere la versión 2019-04-01 o posterior del proveedor de recursos de Azure Storage. Para obtener más información, consulte la API de REST del proveedor de recursos de Azure Storage.

Permisos para denegar el acceso público

Para establecer la propiedad AllowBlobPublicAccess para la cuenta de almacenamiento, un usuario debe tener permisos para crear y administrar cuentas de almacenamiento. Los roles de control de acceso basado en rol de Azure (Azure RBAC) que proporcionan estos permisos incluyen la acción Microsoft.Storage/storageAccounts/write. Los roles integrados con esta acción incluyen:

Las asignaciones de roles deben tener el ámbito del nivel de la cuenta de almacenamiento o superior para permitir que un usuario deniegue el acceso público para la cuenta de almacenamiento. Para obtener más información sobre el ámbito de los roles, vea Comprensión del ámbito para RBAC de Azure.

Preste atención para restringir la asignación de estos roles solo a aquellos usuarios administrativos que requieran la capacidad de crear una cuenta de almacenamiento o actualizar sus propiedades. Use el principio de privilegios mínimos para asegurarse de que los usuarios tienen los permisos mínimos que necesitan para realizar sus tareas. Para más información sobre la administración del acceso con RBAC de Azure, consulte Procedimientos recomendados para RBAC de Azure.

Estos roles no proporcionan acceso a los datos de una cuenta de almacenamiento a través de Azure Active Directory (Azure AD). Sin embargo, incluyen Microsoft.Storage/storageAccounts/listkeys/action, que concede acceso a las claves de acceso de la cuenta. Con este permiso, un usuario puede usar las claves de acceso de la cuenta para acceder a todos los datos de una cuenta de almacenamiento.

La acción Microsoft.Storage/storageAccounts/listkeys/action en sí concede acceso a los datos a través de las claves de cuenta, pero no concede a un usuario la capacidad de cambiar la propiedad AllowBlobPublicAccess para una cuenta de almacenamiento. Para los usuarios que necesiten acceder a los datos de la cuenta de almacenamiento, pero no deban tener la capacidad de cambiar la configuración de esta, considere la posibilidad de asignar roles tipo Colaborador de datos de Storage Blob, Lector de datos de Storage Blob o Lector y acceso a los datos.

Nota

Los roles clásicos de administrador de suscripciones Administrador del servicio y Coadministrador equivalen al rol Propietario de Azure Resource Manager. El rol Propietario incluye todas las acciones, por lo que un usuario con uno de estos roles administrativos también puede crear cuentas de almacenamiento y administrar la su configuración. Para más información, consulte Roles de administrador de suscripciones clásico, de Azure y de administrador de Azure AD.

Establecer la propiedad AllowBlobPublicAccess de la cuenta de almacenamiento

Para permitir o denegar el acceso público a una cuenta de almacenamiento, configure la propiedad AllowBlobPublicAccess de la cuenta. Esta propiedad está disponible para todas las cuentas de almacenamiento que se crean con el modelo de implementación de Azure Resource Manager. Para más información, consulte Introducción a las cuentas de almacenamiento.

De manera predeterminada la propiedad AllowBlobPublicAccess no se establece para una cuenta de almacenamiento y no devuelve ningún valor hasta que se establece de forma explícita. La cuenta de almacenamiento permite el acceso público cuando el valor de la propiedad es NULL o true.

Para permitir o no permitir el acceso público a una cuenta de almacenamiento en Azure Portal, siga estos pasos:

  1. Vaya a la cuenta de almacenamiento en Azure Portal.

  2. Busque la opción Configuración en Configuración.

  3. Defina Blob public access (Acceso público a blobs) como Habilitado o Deshabilitado.

    Captura de pantalla que muestra cómo permitir o no permitir el acceso público a blobs en una cuenta

Nota:

No permitir el acceso público en una cuenta de almacenamiento no afecta a los sitios web estáticos hospedados en dicha cuenta. Al contenedor $web siempre se puede acceder de forma pública.

Después de actualizar la configuración de acceso público de la cuenta de almacenamiento, el cambio puede tardar hasta 30 segundos en propagarse por completo.

Cuando se configura un contenedor para el acceso público anónimo, no es necesario autorizar las solicitudes para leer blobs en ese contenedor. Sin embargo, las reglas de firewall configuradas para la cuenta de almacenamiento permanecen en vigor y bloquean el tráfico alineado con las ACL configuradas.

Recuerde que permitir o denegar el acceso público al blob requiere la versión 2019-04-01 o posterior del proveedor de recursos de Azure Storage. Para obtener más información, consulte la API de REST del proveedor de recursos de Azure Storage.

En los ejemplos de esta sección se ha mostrado cómo leer la propiedad AllowBlobPublicAccess de la cuenta de almacenamiento para determinar si actualmente se permite el acceso público o no. Para más información sobre cómo comprobar que la configuración de acceso público de una cuenta está configurada para evitar accesos anónimos, consulte Corregir el acceso público anónimo para la cuenta de almacenamiento.

Establecimiento del nivel de acceso público en un contenedor

Para conceder a usuarios anónimos acceso de lectura a un contenedor y sus blobs, primero hay que permitir el acceso público en la cuenta de almacenamiento y, después, establecer el nivel de acceso público del contenedor. Si el acceso público no está permitido en la cuenta de almacenamiento, no podrá configurar un acceso público en un contenedor.

Cuando está permitido el acceso público para una cuenta de almacenamiento, puede configurar un contenedor con los siguientes permisos:

  • Sin acceso de lectura público: Solo puede acceder al contenedor y a sus blobs con una solicitud autorizada. Esta opción es el valor predeterminado para todos los contenedores nuevos.
  • Acceso de lectura público solo para blobs: Los blobs del contenedor los puede leer una solicitud anónima, pero los datos del contenedor no están disponibles de forma anónima. Los clientes anónimos no pueden enumerar los blobs dentro del contenedor.
  • Acceso de lectura público para contenedores y blobs: Los datos de los contenedores y los blobs los puede leer una solicitud anónima, excepto la configuración de los permisos de un contenedor y los metadatos de un contenedor. Los clientes pueden enumerar los blobs del contenedor a través de una solicitud anónima, pero no pueden enumerar los contenedores que están en la cuenta de almacenamiento.

No puede cambiar el nivel de acceso público para un blob individual. El nivel de acceso público se establece en el nivel de contenedor. El nivel de acceso público del contenedor se puede establecer al crear el contenedor o al actualizar este valor de configuración en un contenedor existente.

Para actualizar el nivel de acceso público en uno o varios contenedores desde Azure Portal, siga estos pasos:

  1. Vaya a la información general de su cuenta de almacenamiento en Azure Portal.

  2. En Almacenamiento de datos en la hoja de menú, seleccione Contenedores de blob.

  3. Seleccione los contenedores para el que quiere establecer el nivel de acceso público.

  4. Use el botón Cambiar nivel de acceso para mostrar la configuración de acceso público.

  5. Seleccione el nivel de acceso público deseado en la lista desplegable Nivel de acceso público y haga clic en el botón Aceptar para aplicar el cambio a los contenedores seleccionados.

    Captura de pantalla que muestra cómo establecer el nivel de acceso público en el portal

Cuando el acceso público no está permitido en la cuenta de almacenamiento, no es posible establecer el nivel de acceso público de ningún contenedor. Si intenta establecer el nivel de acceso público del contenedor, verá que el valor está deshabilitado porque el acceso público no está permitido para la cuenta.

Captura de pantalla que muestra que el valor del nivel de acceso público del contenedor está bloqueado cuando no se permite el acceso público

Comprobación de la configuración del acceso público de un conjunto de contenedores

Para comprobar qué contenedores de una o varias cuentas de almacenamiento están configurados para el acceso público, puede enumerar los contenedores y consultar la configuración del acceso público. Este enfoque es una opción práctica cuando una cuenta de almacenamiento no contiene un elevado número de contenedores, o bien cuando se comprueba la configuración de un pequeño número de cuentas de almacenamiento. Sin embargo, el rendimiento puede empeorar si intenta enumerar un elevado número de contenedores.

En el ejemplo siguiente se usa PowerShell para obtener la configuración del acceso público de todos los contenedores de una cuenta de almacenamiento. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores:

$rgName = "<resource-group>"
$accountName = "<storage-account>"
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess

Compatibilidad de características

La compatibilidad con esta característica puede verse afectada al habilitar Data Lake Storage Gen2, el protocolo Network File System (NFS) 3.0 o el Protocolo de transferencia de archivos SSH (SFTP).

Si ha habilitado cualquiera de estas funcionalidades, consulte Compatibilidad con características de Blob Storage en cuentas de Azure Storage para evaluar la compatibilidad con esta característica.

Pasos siguientes