Auditoría de operaciones de plano de control de Azure Cosmos DB

SE APLICA A: NoSQL MongoDB Cassandra Gremlin Table

El plano de control en Azure Cosmos DB es un servicio RESTful que le permite realizar un conjunto diverso de operaciones en la cuenta de Azure Cosmos DB. Expone un modelo de recursos público (por ejemplo: base de datos, cuenta) y varias operaciones a los usuarios finales para realizar acciones en el modelo de recursos. Las operaciones del plano de control incluyen cambios en la cuenta o el contenedor de Azure Cosmos DB. Por ejemplo, algunas de las operaciones del plano de control son crear una cuenta de Azure Cosmos DB, agregar una región, actualizar el rendimiento, conmutar por error regiones o agregar una red virtual. En este artículo se explica cómo auditar las operaciones de plano de control en Azure Cosmos DB. Puede ejecutar las operaciones del plano de control sobre las cuentas de Azure Cosmos DB mediante la CLI de Azure, PowerShell o Azure Portal; sin embargo, para los contenedores, use la CLI de Azure o PowerShell.

A continuación se muestran algunos escenarios de ejemplo en los que resulta útil auditar operaciones del plano de control:

  • Quiere recibir una alerta cuando se modifiquen las reglas de firewall de la cuenta de Azure Cosmos DB. La alerta es necesaria para encontrar modificaciones no autorizadas en reglas que rigen la seguridad de red de la cuenta de Azure Cosmos DB y emprender acciones rápidas.

  • Quiere recibir una alerta cuando se agregue o quite una nueva región en la cuenta de Azure Cosmos DB. La adición o eliminación de regiones tiene consecuencias en la facturación y en los requisitos de soberanía de datos. Esta alerta le ayudará a detectar una adición o eliminación accidentales de la región en su cuenta.

  • Quiere obtener más detalles sobre lo que ha cambiado en los registros de diagnóstico. Por ejemplo, una red virtual ha cambiado.

Deshabilitar el acceso de escritura de metadatos basado en claves

Antes de auditar las operaciones de plano de control en Azure Cosmos DB, deshabilite el acceso de escritura de los metadatos basado en claves en su cuenta. Al deshabilitar el acceso de escritura de metadatos basado en claves, los clientes que se conecten a la cuenta de Azure Cosmos DB mediante claves de cuenta no podrán acceder a la cuenta. Para deshabilitar el acceso de escritura, defina la propiedad disableKeyBasedMetadataWriteAccess como true. Una vez definida esta propiedad, pueden aplicar cambios en los recursos los usuarios con las credenciales y el rol de Azure adecuados. Para obtener más información sobre cómo establecer esta propiedad, consulte el artículo Evitar cambios de SDK.

Una vez activado disableKeyBasedMetadataWriteAccess, si los clientes basados en SDK ejecutan operaciones de creación o actualización, se devuelve un error de tipo no se permite la operación "POST" en el recurso "ContainerNameorDatabaseName" mediante el punto de conexión de Azure Cosmos DB. Tendrá que activar el acceso a dichas operaciones para su cuenta o realizar las operaciones de creación y actualización mediante Azure Resource Manager, la CLI de Azure o Azure PowerShell. Para volver al estado anterior, establezca el valor disableKeyBasedMetadataWriteAccess en false mediante la CLI de Azure, tal como se describe en el artículo Evitar cambios en el SDK de Azure Cosmos DB. Asegúrese de cambiar el valor de disableKeyBasedMetadataWriteAccess a falso en lugar de a true.

Tenga en cuenta los siguientes puntos al desactivar el acceso de escritura de metadatos:

  • Evalúe y asegúrese de que las aplicaciones no realizan llamadas de metadatos que cambian los recursos anteriores (por ejemplo, crear una colección, actualizar el rendimiento, etc.) mediante el SDK o las claves de cuenta.

  • Cuando disableKeyBasedMetadataWriteAccess se establece en true, las operaciones de metadatos emitidas por el SDK se bloquean. Como alternativa, puede usar implementaciones de plantillas de Azure Portal, CLI de Azure, Azure PowerShell o Azure Resource Manager para realizar estas operaciones.

Habilitar registros de diagnóstico para las operaciones del plano de control

Puede habilitar los registros de diagnóstico para las operaciones del plano de control mediante Azure Portal. Después de habilitar, los registros de diagnóstico registrarán la operación como un par de eventos de inicio y finalización con los detalles pertinentes. Por ejemplo, RegionFailoverStart y RegionFailoverComplete completarán el evento de conmutación por error de la región.

Siga estos pasos para habilitar el registro en las operaciones del plano de control:

  1. Inicie sesión en Azure Portal y vaya a su cuenta de Azure Cosmos DB.

  2. Abra el panel de configuración de diagnóstico y proporcione un Nombre para crear los registros.

  3. Seleccione ControlPlaneRequests para el tipo de registro y seleccione la opción Enviar a Log Analytics.

  4. Opcionalmente, envíe los registros de diagnóstico a Azure Storage, Azure Event Hubs, Azure Monitor o a un tercero.

También puede almacenar los registros en una cuenta de almacenamiento o transmitir a un centro eventos. En este artículo se muestra cómo enviar registros a Log Analytics y, a continuación, consultarlos. Después de habilitarlos, los registros de diagnóstico tardan unos minutos en estar disponibles. Se puede realizar un seguimiento de todas las operaciones del plano de control realizadas después de ese punto. La captura de pantalla siguiente muestra cómo habilitar los registros del plano de control:

Habilitación del registro de solicitudes del plano de control

Ver las operaciones del plano de control

Después de activar el registro, siga estos pasos para realizar un seguimiento de las operaciones de una cuenta específica:

  1. Inicie sesión en Azure Portal.

  2. Abra la pestaña Monitor desde la navegación izquierda y seleccione el panel Registros. Se abre una interfaz de usuario donde se pueden ejecutar fácilmente consultas con esa cuenta específica en el ámbito. Ejecute la siguiente consulta para ver los registros del plano de control:

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="ControlPlaneRequests"
    | where TimeGenerated >= ago(1h)
    

    Las capturas de pantalla siguientes capturan registros cuando se cambia un nivel de coherencia para una cuenta de Azure Cosmos DB. El valor activityId_g de los resultados es diferente del identificador de actividad de una operación:

    Registros del plano de control cuando se agrega una red virtual

    Las capturas de pantalla siguientes capturan los registros cuando se crea el espacio de claves o una tabla de una cuenta de Cassandra, y cuando se actualiza el rendimiento. Los registros del plano de control para las operaciones de creación y actualización en la base de datos y en el contenedor se registran por separado, tal como se muestra en la siguiente captura de pantalla:

    Registros de plano de control cuando se actualiza el rendimiento

Identificar la identidad asociada con una operación específica

Si quiere depurar más, puede identificar una operación específica en el Registro de actividad mediante el activityId_g o la marca de tiempo de la operación. La marca de tiempo se usa para algunos clientes de Resource Manager cuando el identificador de actividad no se pasa explícitamente. El registro de actividad proporciona detalles sobre la identidad con la que se inició la operación. En la captura de pantalla siguiente se muestra cómo usar el activityId_g para buscar las operaciones asociadas con él en el registro de actividad:

Uso del identificador de actividad y búsqueda de las operaciones

Operaciones del plano de control para la cuenta de Azure Cosmos DB

A continuación se indican las operaciones del plano de control disponibles en el nivel de cuenta. En el nivel de cuenta se realiza un seguimiento de la mayoría de las operaciones. Estas operaciones están disponibles como métricas en Azure Monitor:

  • Región agregada
  • Región quitada
  • Cuenta eliminada
  • Región conmutada por error
  • Cuenta creada
  • Red virtual eliminada
  • Configuración actualizada de la red de la cuenta
  • Configuración actualizada de replicación de la cuenta
  • Claves de cuenta actualizadas
  • Configuración actualizada de copia de seguridad de la cuenta
  • Configuración actualizada de diagnóstico de la cuenta

Operaciones del plano de control para bases de datos o contenedores

A continuación se indican las operaciones del plano de control disponibles en el nivel de base de datos y contenedor. Estas operaciones están disponibles como métricas en Azure Monitor:

  • Base de datos SQL creada
  • SQL Database actualizada
  • Rendimiento de SQL Database actualizado
  • SQL Database eliminada
  • Contenedor SQL creado
  • Contenedor SQL actualizado
  • Rendimiento de contenedor de SQL actualizado
  • Contenedor de SQL eliminado
  • Espacio de claves de Cassandra creado
  • Espacio de claves de Cassandra actualizado
  • Rendimiento de un espacio de claves de Cassandra actualizado
  • Espacio de claves de Cassandra eliminado
  • Tabla de Cassandra creada
  • Tabla de Cassandra actualizada
  • Rendimiento de una tabla de Cassandra actualizado
  • Tabla de Cassandra eliminada
  • Base de datos de Gremlin creada
  • Base de datos de Gremlin actualizada
  • Rendimiento de una base de datos de Gremlin actualizado
  • Base de datos de Gremlin eliminada
  • Grafo de Gremlin creado
  • Grafo de Gremlin actualizado
  • Rendimiento de un grafo de Gremlin actualizado
  • Gráfico de Gremlin eliminado
  • Base de datos de Mongo creada
  • Base de datos de Mongo actualizada
  • Rendimiento de la base de datos de Mongo actualizado
  • Base de datos de Mongo eliminada
  • Colección de Mongo creada
  • Colección de Mongo actualizada
  • Rendimiento de la colección de Mongo actualizado
  • Colección de Mongo eliminada
  • Tabla de AzureTable creada
  • Tabla AzureTable actualizada
  • Rendimiento de la tabla AzureTable actualizado
  • Tabla AzureTable eliminada

Operaciones del registro de diagnóstico

A continuación se muestran los nombres de operación en los registros de diagnóstico para distintas operaciones:

  • RegionAddStart, RegionAddComplete
  • RegionRemoveStart, RegionRemoveComplete
  • AccountDeleteStart, AccountDeleteComplete
  • RegionFailoverStart, RegionFailoverComplete
  • AccountCreateStart, AccountCreateComplete
  • AccountUpdateStart, AccountUpdateComplete
  • VirtualNetworkDeleteStart, VirtualNetworkDeleteComplete
  • DiagnosticLogUpdateStart, DiagnosticLogUpdateComplete

Para las operaciones específicas de la API, la operación se denomina con el siguiente formato:

  • ApiKind + ApiKindResourceType + OperationType
  • ApiKind + ApiKindResourceType + "Rendimiento" + operationType

Ejemplo

  • CassandraKeyspacesCreate
  • CassandraKeyspacesUpdate
  • CassandraKeyspacesThroughputUpdate
  • SqlContainersUpdate

La propiedad ResourceDetails contiene el cuerpo del recurso completo como una carga de solicitud y contiene todas las propiedades solicitadas para actualizar.

Consultas de registros de diagnóstico para las operaciones del plano de control

A continuación se muestran algunos ejemplos para obtener registros de diagnóstico de las operaciones del plano de control:

AzureDiagnostics 
| where Category startswith "ControlPlane"
| where OperationName contains "Update"
| project httpstatusCode_s, statusCode_s, OperationName, resourceDetails_s, activityId_g
AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| where TimeGenerated >= todatetime('2020-05-14T17:37:09.563Z')
| project TimeGenerated, OperationName, apiKind_s, apiKindResourceType_s, operationType_s, resourceDetails_s
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersUpdate"
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersThroughputUpdate"

Realice una consulta para obtener el parámetro activityId y el autor de la llamada que inició la operación de eliminación del contenedor:

(AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName == "SqlContainersDelete"
| where TimeGenerated >= todatetime('9/3/2020, 5:30:29.300 PM')
| summarize by activityId_g )
| join (
AzureActivity
| parse HTTPRequest with * "clientRequestId\": \"" activityId_g "\"" * 
| summarize by Caller, HTTPRequest, activityId_g)
on activityId_g
| project Caller, activityId_g

Realice una consulta para obtener actualizaciones de índice o TTL. A continuación, puede comparar el resultado de esta consulta con una actualización anterior para ver el cambio en el índice o el TTL.

AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where  OperationName == "SqlContainersUpdate"
| project resourceDetails_s

salida:

{id:skewed,indexingPolicy:{automatic:true,indexingMode:consistent,includedPaths:[{path:/*,indexes:[]}],excludedPaths:[{path:/_etag/?}],compositeIndexes:[],spatialIndexes:[]},partitionKey:{paths:[/pk],kind:Hash},defaultTtl:1000000,uniqueKeyPolicy:{uniqueKeys:[]},conflictResolutionPolicy:{mode:LastWriterWins,conflictResolutionPath:/_ts,conflictResolutionProcedure:}

Pasos siguientes