Compartir a través de


Procedimientos recomendados para supervisar Azure Blob Storage

En este artículo se ofrece una colección de escenarios comunes de supervisión de almacenamiento y se proporcionan directrices de procedimientos recomendados para realizarlos.

Identificación de cuentas de almacenamiento sin uso o con uso bajo

Storage Insights es un panel sobre las métricas Azure Storage y los registros. Puede usar Storage Insights para examinar el volumen de transacciones y la capacidad usada de todas las cuentas. Esa información puede ayudarle a decidir qué cuentas desea retirar. Para configurar Storage Insights, consulte Supervisión del servicio de almacenamiento con Azure Monitor Storage Insights.

Análisis del volumen de transacciones

Desde la vista Storage Insights en Azure monitor, ordene sus cuentas en orden ascendente utilizando la columna Transacciones. En la imagen siguiente se muestra una cuenta con un volumen de transacción bajo durante el período especificado.

Volumen de transacciones en Storage Insights

Haga clic en el vínculo de la cuenta para obtener más información sobre estas transacciones. En este ejemplo, la mayoría de las solicitudes se realizan al servicio de Storage Blob.

Transacción por tipo de servicio

Para determinar qué tipo de solicitudes se están realizando, profundice en el gráfico Transacciones por nombre de API.

API de transacciones de Storage

En este ejemplo, todas las solicitudes enumeran operaciones o solicitudes de información de propiedades de cuenta. No hay transacciones de lectura y escritura. Esto podría llevar a pensar que la cuenta no se está utilizando de forma significativa.

Análisis de la capacidad usada

Desde la pestaña Capacidad de la vista Información de Storage en Azure Monitor, ordene las cuentas en orden ascendente mediante la columna Capacidad de cuenta usada. En la imagen siguiente se muestra una cuenta con un volumen de capacidad inferior al de otras cuentas.

Capacidad de almacenamiento usada

Para examinar los blobs asociados a esta capacidad usada, puede usar Explorador de Storage. Para un gran número de blobs, considere la posibilidad de generar un informe mediante una directiva de inventario de Blob.

Supervisión del uso de un contenedor

Si particiona los datos del cliente por contenedor, puede supervisar la cantidad de capacidad que usa cada cliente. Puede usar el inventario de Azure Storage Blob para realizar un inventario de blobs con información de tamaño. A continuación, puede agregar el tamaño y el recuento en el nivel de contenedor. Por ejemplo, consulte Cálculo del recuento de blobs y su tamaño total por contenedor mediante el inventario de Azure Storage.

También puede evaluar el tráfico en el nivel de contenedor consultando los registros. Para obtener más información sobre la escritura de consultas en Log Analytics, consulte Log Analytics. Para obtener más información sobre el esquema de registros de almacenamiento, consulte la referencia de supervisión de datos en Azure Blob Storage .

Esta es una consulta para obtener el número de transacciones de lectura y el número de bytes leídos en cada contenedor.

StorageBlobLogs
| where OperationName  == "GetBlob"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize ReadSize = sum(ResponseBodySize), ReadCount = count() by tostring(ContainerName)

La consulta siguiente usa una consulta similar para obtener información sobre las operaciones de escritura.

StorageBlobLogs
| where OperationName == "PutBlob" or
  OperationName == "PutBlock" or
  OperationName == "PutBlockList" or
  OperationName == "AppendBlock" or
  OperationName == "SnapshotBlob" or
  OperationName == "CopyBlob" or
  OperationName == "SetBlobTier"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize WriteSize = sum(RequestBodySize), WriteCount = count() by tostring(ContainerName)

La consulta anterior hace referencia a los nombres de varias operaciones porque más de un tipo de operación puede contar como una operación de escritura. Para obtener más información sobre qué operaciones se consideran de lectura y escritura, consulte los precios de Azure Blob Storage o Azure Data Lake Storage.

Auditoría de la actividad de las cuentas

En muchos casos, deberá auditar las actividades de las cuentas de almacenamiento para garantizar la seguridad y el cumplimiento. Las operaciones en las cuentas de almacenamiento se dividen en dos categorías: Plano de control y Plano de datos.

Una operación de plano de control es una solicitud de Azure Resource Manager para crear una cuenta de almacenamiento o actualizar una propiedad de una cuenta de almacenamiento existente. Para obtener más información, vea Azure Resource Manager.

Una operación del plano de datos es una operación en los datos de una cuenta de almacenamiento que es el resultado de una solicitud al punto de conexión del servicio de almacenamiento. Por ejemplo, se ejecuta una operación de plano de datos cuando se carga un blob en una cuenta de almacenamiento o se descarga un blob desde una cuenta de almacenamiento. Para obtener más información, consulte la API de Azure Storage.

En la sección se muestra cómo identificar la información "cuándo", "quién", "qué" y "cómo" de las operaciones de plano de datos y de control.

Auditoría de las operaciones del plano de control

Las operaciones de Resource Manager se capturan en el registro de actividad de Azure. Para ver el registro de actividad, abra la cuenta de almacenamiento en Azure Portal y, a continuación, seleccione Registro de actividad.

Registro de actividad

Abra cualquier entrada de registro para ver el archivo JSON que describa la actividad. El siguiente JSON muestra la información "cuándo", "qué" y "cómo" de una operación de plano de control:

JSON de registro de actividad

La disponibilidad de la información "quién" depende del método de autenticación que se ha usado para realizar la operación del plano de control. Si una entidad de seguridad de Microsoft Entra ha realizado la autorización, el identificador de objeto de esa entidad de seguridad también aparecería en esta salida JSON (por ejemplo: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Dado que es posible que no vea siempre otra información relacionada con la identidad, como una dirección de correo electrónico o un nombre, el identificador de objeto siempre es la mejor manera de identificar de forma única la entidad de seguridad.

Puede encontrar el nombre descriptivo de esa entidad de seguridad tomando el valor del identificador de objeto y buscando la entidad de seguridad en la página Microsoft Entra ID de Azure Portal. En la captura de pantalla siguiente, se muestra un resultado de búsqueda en Microsoft Entra ID.

Buscar en Microsoft Entra ID

Auditoría de operaciones del plano de datos

Las operaciones del plano de datos se capturan en los registros de recursos de Azure Storage. Puede configurar la opción Diagnóstico para exportar los registros al área de trabajo de Log Analytics para una experiencia de consulta nativa.

Esta es una consulta de Log Analytics que recupera la información "cuándo", "quién", "qué" y "cómo" en una lista de entradas de registro.

StorageBlobLogs
| where TimeGenerated > ago(3d)
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

Para la parte "cuándo" de la auditoría, el campo TimeGenerated muestra cuándo se registró la entrada del registro.

Para la parte "qué" de la auditoría, el campo Uri muestra el elemento que fue modificado o leído.

Para la parte "cómo" de la auditoría, el campo OperationName muestra qué operación se ejecutó.

Sugerencia

Por ejemplo, si sospecha que un blob o contenedor se ha eliminado por error, agregue una cláusula where que devuelva solo las entradas de registro en las que OperationName se establece en Eliminar blob o Eliminar contenedor. Para la parte "quién" de la auditoría, AuthenticationType muestra qué tipo de autenticación se usó para realizar una solicitud. Este campo puede mostrar cualquiera de los tipos de autenticación que admite Azure Storage, incluido el uso de una clave de cuenta, un token de SAS o Microsoft Entra.

Si la solicitud está autorizada mediante Microsoft Entra ID, puede usar el campo RequestObjectId para identificar el "quién". La clave compartida y la autenticación sas no proporcionan ningún medio para auditar identidades individuales. En esos casos, los campos callerIPAddress y userAgentHeader pueden ayudarle a identificar el origen de la operación. Si se usó un token de SAS para autorizar una operación, puede identificar ese token y, si ha asignado tokens a destinatarios de tokens en su extremo, puede identificar qué usuario, organización o aplicación ha realizado la operación. Consulte Identificación del token de SAS usado para autorizar una solicitud.

Identificación de la entidad de seguridad usada para autorizar una solicitud

Si una solicitud se ha autenticado mediante Microsoft Entra ID, el campo RequesterObjectId proporciona la manera más confiable de identificar la entidad de seguridad. Puede encontrar el nombre descriptivo de esa entidad de seguridad tomando el valor del campo RequesterObjectId y buscando la entidad de seguridad en la página Microsoft Entra ID de Azure Portal. En la captura de pantalla siguiente, se muestra un resultado de búsqueda en Microsoft Entra ID.

Buscar en Microsoft Entra ID

En algunos casos, un nombre de usuario principal o UPN puede aparecer en los registros. Por ejemplo, si la entidad de seguridad es un usuario de Microsoft Entra, es probable que aparezca el UPN. Para otros tipos de entidades de seguridad, como identidades administradas asignadas por el usuario, o en determinados escenarios, como la autenticación entre inquilinos de Microsoft Entra, el UPN no aparecerá en los registros.

Esta consulta muestra todas las operaciones de lectura realizadas por entidades de seguridad de OAuth.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "GetBlob"
  and AuthenticationType == "OAuth"
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

La clave compartida y la autenticación sas no proporcionan ningún medio para auditar identidades individuales. Por lo tanto, si desea mejorar la capacidad de realizar auditorías en función de la identidad, se recomienda realizar la transición a Microsoft Entra ID y evitar la autenticación de clave compartida y SAS. Para obtener información sobre cómo evitar la autenticación de clave compartida y SAS, consulte Prevent Shared Key authorization for an Azure Storage account (Impedir la autorización de clave compartida para una Azure Storage compartido). Para empezar a trabajar con Microsoft Entra ID, consulte Autorización del acceso a blobs mediante Microsoft Entra ID.

Identificación del token de SAS usado para autorizar una solicitud

Puede consultar las operaciones que se autorizaron mediante un token de SAS. Por ejemplo, esta consulta devuelve todas las operaciones de escritura que se autorizaron mediante un token de SAS.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "PutBlob"
  and AuthenticationType == "SAS"
| project TimeGenerated, AuthenticationType, AuthenticationHash, OperationName, Uri

Por motivos de seguridad, los tokens de SAS no aparecen en los registros. Sin embargo, el hash SHA-256 de la firma del token de SAS aparecerá en el campo AuthenticationHash devuelto por esta consulta.

Si ha distribuido varios tokens de SAS y quiere saber qué tokens de SAS se usan, tendrá que convertir la parte de firma de cada uno de los tokens de SAS en un hash SHA-256 y a continuación, comparar ese hash con el valor hash que aparece en los registros.

En primer lugar, descodifique cada cadena de token de SAS. En el ejemplo siguiente se descodifica la parte de firma de la cadena de token de SAS mediante PowerShell.

[uri]::UnescapeDataString("<SAS signature here>")

Puede usar cualquier herramienta o SDK para convertir la firma descodificada en SHA-256 tiene esa firma. Por ejemplo, en un sistema Linux, puede usar el siguiente comando:

echo -n "<Decoded SAS signature>" | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()), end='');"  | sha256sum

Otra manera de convertir la firma descodificada es pasar la cadena descodificada a la función hash_sha256() como parte de una consulta cuando se usa Azure Data Explorer.

Los tokens de SAS no contienen información de identidad. Una manera de realizar un seguimiento de las actividades de los usuarios u organizaciones es mantener una asignación de usuarios u organizaciones a varios hashes de token de SAS.

Optimización del coste de las consultas poco frecuentes

Puede exportar registros a Log Analytics para obtener funcionalidades de consulta nativas enriquecidas. Si tiene transacciones masivas en la cuenta de almacenamiento, el coste de usar registros con Log Analytics puede ser alto. Para obtener más información, vea Precios de Azure Log Analytics. Si solo tiene previsto consultar registros ocasionalmente (por ejemplo, los registros de consulta para la auditoría de cumplimiento), puede considerar la posibilidad de reducir el coste total mediante la exportación de registros a la cuenta de almacenamiento y, a continuación, usar una solución de consulta sin servidor sobre los datos de registro, por ejemplo, Azure Synapse.

Con Azure Synapse, puede crear un grupo de SQL sin servidores para consultar los datos de registro cuando sea necesario. Esto podría ahorrar costes significativamente.

  1. Enrutamiento de registros a la cuenta de almacenamiento Para obtener más información, vea Creación de una configuración de diagnóstico.

  2. Creación y configuración del área de trabajo de Synapse Para obtener más información, vea Inicio rápido: Creación de un área de trabajo de Synapse.

  3. Registros de consultas. Para obtener más información, vea Consulta de archivos JSON mediante un grupo de SQL sin servidor en Azure Synapse Analytics.

    Este es un ejemplo:

     select
         JSON_VALUE(doc, '$.time') AS time,
         JSON_VALUE(doc, '$.properties.accountName') AS accountName,
         JSON_VALUE(doc, '$.identity.type') AS identityType,
         JSON_VALUE(doc, '$.identity.requester.objectId') AS requesterObjectId,
         JSON_VALUE(doc, '$.operationName') AS operationName,
         JSON_VALUE(doc, '$.callerIpAddress') AS callerIpAddress,
         JSON_VALUE(doc, '$.uri') AS uri
         doc
     from openrowset(
             bulk 'https://demo2uswest4log.blob.core.windows.net/insights-logs-storageread/resourceId=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/mytestrp/providers/Microsoft.Storage/storageAccounts/demo2uswest/blobServices/default/y=2021/m=03/d=19/h=*/m=*/PT1H.json',
             format = 'csv', fieldterminator ='0x0b', fieldquote = '0x0b'
         ) with (doc nvarchar(max)) as rows
     order by JSON_VALUE(doc, '$.time') desc
    
    

Vea también