Auditoría de eventos de Amazon DocumentDB
Con Amazon DocumentDB (con compatibilidad con MongoDB), puede auditar eventos que se realizaron en su clúster. Los intentos de autenticación correctos e incorrectos, la eliminación de una colección en una base de datos o la creación de un índice son algunos ejemplos de eventos registrados. De forma predeterminada, la auditoría está deshabilitada en Amazon DocumentDB y, para utilizar esta característica, es necesario suscribirse.
Cuando la auditoría está habilitada, Amazon DocumentDB registra los eventos del lenguaje de definición de datos (DDL), de manipulación (DML), de autenticación, de autorización y de administración de usuarios en Registros de Amazon CloudWatch. Cuando la auditoría está habilitada, Amazon DocumentDB exporta los registros de auditoría del clúster (documentos JSON) a Registros de Amazon CloudWatch. Puede utilizar Registros de Amazon CloudWatch para analizar, monitorizar y archivar sus eventos de auditoría de Amazon DocumentDB.
Aunque Amazon DocumentDB no cobra una tarifa adicional por habilitar la auditoría, se le cobrarán las tarifas estándar por el uso de los registros de CloudWatch. Para obtener más información sobre los precios de CloudWatch Logs, consulte Precios de Amazon CloudWatch
La característica de auditoría de Amazon DocumentDB es claramente diferente del uso de los recursos de servicio que se monitorea con AWS CloudTrail. CloudTrail registra las operaciones que se realizan con la AWS Command Line Interface (AWS CLI) o la AWS Management Console en recursos como clústeres, instancias, grupos de parámetros e instantáneas. La auditoría de recursos de con CloudTrail está activada de forma predeterminada y no se puede deshabilitar. La característica de auditoría de Amazon DocumentDB es opcional. Registra las operaciones que tienen lugar dentro del clúster en los distintos objetos, como, por ejemplo, bases de datos, colecciones, índices y usuarios.
Temas
Eventos admitidos
La auditoría de Amazon DocumentDB admite las siguientes categorías de eventos:
-
Lenguaje de definición de datos (DDL): incluye las operaciones de administración de bases de datos, las conexiones, la administración de usuarios y la autorización.
-
Eventos de lectura del lenguaje de manipulación de datos (lecturas DML): incluye
find()
y los distintos operadores de agregación, operadores aritméticos, operadores booleanos y otros operadores de consulta de lectura. -
Eventos de escritura del lenguaje de manipulación de datos (escrituras en DML): incluye operadores
insert(), update(), delete(),
ybulkWrite()
Los tipos de eventos son los siguientes.
Tipo de evento | Categoría | Descripción |
---|---|---|
authCheck |
Autorización | Código de resultado 0: éxito |
Código de resultado 13: intentos no autorizados de realizar una operación. | ||
authenticate |
Connection | Intentos de autenticación correctos e incorrectos en una nueva conexión. |
auditConfigure |
DDL | Auditoría de la configuración de filtrado. |
createDatabase |
DDL | Creación de una nueva base de datos. |
createCollection |
DDL | Creación de una nueva colección en una base de datos. |
createIndex |
DDL | Creación de un nuevo índice en una colección. |
dropCollection |
DDL | Eliminación de una nueva colección en una base de datos. |
dropDatabase |
DDL | Eliminación de una base de datos. |
dropIndex |
DDL | Eliminación de un índice en una colección. |
modifyChangeStreams |
DDL | Se creó el flujo de cambios. |
renameCollection |
DDL | Renombrar una nueva colección en una base de datos. |
createRole |
Administración de roles | Creación de un rol. |
dropAllRolesFromDatabase |
Administración de roles | Eliminación de todos los roles en una base de datos. |
dropRole |
Administración de roles | Descartando un rol. |
grantPrivilegesToRole |
Administración de roles | Concediendo privilegios a un rol. |
grantRolesToRole |
Administración de roles | Concediendo roles a un rol definido por el usuario. |
revokePrivilegesFromRole |
Administración de roles | Revocando los privilegios de un rol. |
revokeRolesFromRole |
Administración de roles | Revocando roles de un rol definido por el usuario. |
updateRole |
Administración de roles | Actualización de un rol. |
createUser |
Administración de usuarios | Creación de un nuevo usuario. |
dropAllUsersFromDatabase |
Administración de usuarios | Eliminación de todos los usuarios en una base de datos. |
dropUser |
Administración de usuarios | Eliminación de un usuario existente. |
grantRolesToUser |
Administración de usuarios | Concesión de roles a un usuario. |
revokeRolesFromUser |
Administración de usuarios | Revocando roles de un usuario. |
updateUser |
UserManagement | Actualización de un usuario existente. |
insert |
Escritura DML | Inserta uno o varios documentos en una colección. |
delete |
Escritura DML | Elimina uno o varios documentos de una colección. |
update |
Escritura DML | Modifica uno o varios documentos existentes en una colección. |
bulkWrite |
Escritura DML | Realiza múltiples operaciones de escritura con controles para determinar el orden de ejecución. |
setAuditConfig |
Escritura DML | Establezca un filtro nuevo para la auditoría de DML. |
count |
Lectura de DML | Devuelve el recuento de documentos que coincidirían con una consulta find() de la colección o vista. |
countDocuments |
Lectura de DML | Devuelve el recuento de documentos que coinciden con una consulta para una colección o vista. |
find |
Lectura de DML | Selecciona los documentos de una colección o vista y devuelve el cursor a los documentos seleccionados. |
getAuditConfig |
Lectura de DML | Recupere el filtro actual para la auditoría de DML. |
findAndModify |
Lectura de DML y escritura de DML | Modifica y devuelve un único documento. |
findOneAndDelete |
Lectura de DML y escritura de DML | Elimina un solo documento en función de los criterios de filtro y clasificación y devuelve el documento eliminado. |
findOneAndReplace |
Lectura de DML y escritura de DML | Sustituye un único documento en función del filtro especificado. |
findOneAndUpdate |
Lectura de DML y escritura de DML | Actualiza un único documento en función de los criterios de filtrado y clasificación. |
aggregate |
Lectura de DML y escritura de DML | Admite las API en la canalización de agregación. |
distinct |
Lectura de DML | Busca los valores distintos de un campo especificado en una sola colección o vista y devuelve los resultados en una matriz. |
nota
Los valores del campo de parámetros del documento de eventos de DML tienen un límite de tamaño de 1 KB. Amazon DocumentDB trunca el valor si supera 1 KB.
nota
Los eventos de eliminación de TTL no se auditan en este momento.
Habilitación de auditorías
Para habilitar la auditoría en un clúster, hay que seguir un proceso de dos pasos. Asegúrese de que se realizan ambos pasos, o los registros de auditoría no se enviarán a los registros de CloudWatch.
Paso 1. Habilitación del parámetro de clúster audit_logs
Para habilitar la auditoría, debe modificar el parámetro audit_logs
en el grupo de parámetros. audit_logs
es una lista delimitada por comas de los eventos que se deben registrar. Los eventos se deben especificar en minúsculas y no debe haber espacios en blanco entre los elementos de la lista.
Puede especificar los siguientes valores para el grupo de parámetro:
Valor | Descripción |
---|---|
ddl |
Al configurarlo, se habilitará la auditoría de eventos de DDL como createDatabase, dropDatabase, createCollection, dropCollection, createIndex, dropIndex, authCheck, authenticate, createUser, dropUser, grantRolesToUser, revokeRolesFromUser, updateUser y dropAllUsersFromDatabase |
dml_read |
Al configurar esto, se habilitará la auditoría de eventos de lectura de DML como find, sort count, distinct, group, projecta, unwind, GeoNear, GeoIntersects, GeoWithin y otros operadores de consulta de lectura de MongoDB. |
dml_write |
Al configurarlo, se habilitará la auditoría de eventos de escritura de DML como insert(), update(), delete() y bulkWrite() |
all |
Al configurarlo, se habilitará la auditoría de los eventos de la base de datos, como las consultas de lectura y escritura, las acciones de la base de datos y las acciones del administrador. |
none |
Si lo configura, se deshabilitará la auditoría |
enabled (heredado) |
Se trata de una configuración de parámetros antigua que equivale a “ddl”. Al configurarlo, se habilitará la auditoría de eventos de DDL como createDatabase, dropDatabase, createCollection, dropCollection, createIndex, dropIndex, authCheck, authenticate, createUser, dropUser, grantRolesToUser, revokeRolesFromUser, updateUser y dropAllUsersFromDatabase. No se recomienda utilizar este ajuste porque se trata de un ajuste heredado. |
disabled (heredado) |
Se trata de una configuración de parámetros antigua que equivale a “none”. No se recomienda utilizar este ajuste porque se trata de un ajuste heredado. |
nota
El valor predeterminado del parámetro de clúster audit_logs es none
(“disabled
” heredado).
También puede utilizar los valores mencionados anteriormente en combinaciones.
Valor | Descripción |
---|---|
ddl, dml_read |
Si lo configura, se habilitará la audición de los eventos DDL y los eventos de lectura de DML. |
ddl, dml_write |
Si lo configura, se habilitará la audición de los eventos DDL y la lectura de DML. |
dml_read, dml_write |
Si lo configura, se habilitará la audición de los eventos DDL |
nota
No es posible modificar un grupo de parámetros predeterminado.
Para más información, consulte los siguientes temas:
-
Creación de grupos de parámetros de clúster de Amazon DocumentDB
Después de crear un grupo de parámetros, para modificarlo, debe cambiar el valor del parámetro
audit_logs
aall
. -
Modificación de grupos de parámetros de clúster de Amazon DocumentDB
Paso 2. Habilitación de la exportación de registros de Amazon CloudWatch
Cuando el valor del parámetro de clúster audit_logs
sea enabled
, ddl
, dml_read
, o dml_write
, también debe permitir que Amazon DocumentDB exporte los registros a Amazon CloudWatch. Si omite cualquiera de estos pasos, los registros de auditoría no se enviarán a CloudWatch.
Al crear un clúster, realizar una restauración a un momento dado o restaurar una instantánea, puede habilitar los registros de CloudWatch siguiendo estos pasos.
Deshabilitación de auditorías
Puede deshabilitar la auditoría deshabilitando la exportación de registros de CloudWatch y deshabilitando el parámetro audit_logs
.
Deshabilitación de la exportación de registros de CloudWatch
Puede deshabilitar la exportación de registros de auditoría mediante la AWS Management Console o la AWS CLI.
Deshabilitación del parámetro audit_logs
Para deshabilitar el parámetro audit_logs
del clúster, puede modificar el clúster para que utilice un grupo de parámetros donde el valor del parámetro audit_logs
esté disabled
. O bien, puede modificar el valor del parámetro audit_logs
en el grupo de parámetros del clúster para que esté disabled
.
Para obtener más información, consulte los temas siguientes:
Acceso a los eventos de auditoría
Siga estos pasos para obtener acceso a los eventos de auditoría en Amazon CloudWatch.
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
Asegúrese de que se encuentra en la misma región que el clúster de Amazon DocumentDB.
-
En el panel de navegación, elija Logs (Registros).
-
Para buscar los registros de auditoría del clúster, busque y elija en la lista
/aws/docdb/
.yourClusterName
/auditLos eventos de auditoría de cada una de las instancias están disponibles debajo del nombre de instancia correspondiente.
Filtrado de eventos de auditoría de DML
Introducción al filtrado de auditoría de DML
Los eventos de auditoría de DML se pueden filtrar antes de escribirlos en Amazon CloudWatch. Para utilizar esta característica, el registro de auditoría y el registro de DML deben estar habilitados. Amazon DocumentDB admite el filtrado en atype
, command
, user
, namespace
y auditAuthorizationSuccess
.
nota
Los eventos DDL no se filtran.
Para habilitar el filtrado de auditoría en cualquier momento, especifique el filtro de auditoría mediante los parámetros setAuditConfig
, filter
y auditAuthorizationSuccess
de la operación db.adminCommand( { command } )
:
db.admin.runCommand( { setAuditConfig: 1, filter: { //filter conditions }, auditAuthorizationSuccess: true | false } )
También puede recuperar la configuración del filtro de auditoría mediante la ejecución del siguiente comando:
db.admin.runCommand( { getAuditConfig: 1})
Requisitos de seguridad
Solo los usuarios o roles de la base de datos con la acción privilegiada auditConfigure
pueden ejecutar los comandos anteriores en admindb
al configurar o enumerar los filtros de auditoría de DML. Puede utilizar uno de los roles integrados de [clusterAdmin
, hostManager
, root
] o crear roles personalizados con privilegios de auditConfigure
. A continuación, se muestra un ejemplo del uso de los roles existentes con el privilegio de auditConfigure
y un ejemplo con los roles personalizados.
Usuario con rol integrado:
use admin db.createUser( { user: "myClusterAdmin", pwd: "password123", roles: [ { role: "clusterAdmin", db: "admin" } ] } )
Usuario con roles personalizados:
use admin db.createRole( { role: "myRole", privileges: [ { resource: { cluster: true }, actions: [ "auditConfigure" ] } ], roles: [] } ) db.createUser( { user: "myUser", pwd: "myPassword", roles: [ { role: "myRole", db: "admin" } ] } )
Filtrado de casos de uso
Ejemplo: filtrado de eventos por comandos
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.command": { $in: [ "find","count", "insert", "delete", "update", "findandmodify" ] } } ] }, auditAuthorizationSuccess: true } )
Ejemplo: filtrado de eventos por nombre de usuario
En este ejemplo, solo se registrará el usuario “myUser”:
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.user": { $in: [ "myUser" ] } } ]}, auditAuthorizationSuccess: true})
Ejemplo: filtrado mediante atype
db.admin.runCommand( { setAuditConfig: 1, filter: {atype: "authCheck"}, auditAuthorizationSuccess: true })
nota
Todos los registros de DML tienen authCheck
como atype
. Solo DDL tiene un atype
diferente. Si coloca un valor que no sea authCheck
en el filter
, no se generará un registro de DML en CloudWatch.
Ejemplo: filtrado mediante varios filtros unidos por operadores
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.command": { $in: [ "find","count", "insert", "delete", "update", "findandmodify" ] } } ], "$nor": [ { "param.command": { $in: ["count", "insert", "delete", "update", "findandmodify" ] } }] }, auditAuthorizationSuccess: true})
nota
En el nivel superior, solo se admiten $and
, $or
y $nor
. Los demás operadores no se admiten y provocarán un error.
Ejemplo: filtrado mediante eventos por auditAuthorizationSuccess
En este filtro, no se registrarán todos los comandos que hayan pasado la autorización correctamente:
db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: false } )
Ejemplo: filtrado con condiciones $in
y $nin
Si se utiliza $in
y $nin
, el comando no se registrará, ya que habrá un “y” implícito entre las condiciones. En este ejemplo, regex bloqueará el comando find
para que no se registre nada:
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ], $nin: ["count", "insert", "delete", "update", "findandmodify" ], $not: /^^find.*/ } }, ], "$or": [ { "param.command": { $nin: ["count", "insert", "delete", "update", "findandmodify" ] } }] }, auditAuthorizationSuccess: true})
Ejemplo: filtrado mediante namespace
db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.ns": { $in: [ "test.foo" ] } } ]}, auditAuthorizationSuccess: true})
Ejemplo: restablecimiento del filtro predeterminado
Si se restablece el valor predeterminado, se registrarán todos los eventos de auditoría de DML. Para restablecer el filtrado al valor predeterminado, ejecute el siguiente comando:
db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: true } )