View a markdown version of this page

Audit des événements Amazon DocumentDB - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Audit des événements Amazon DocumentDB

Avec Amazon DocumentDB (avec compatibilité avec MongoDB), vous pouvez auditer les événements qui ont été exécutés dans votre cluster. Les exemples d'événements enregistrés incluent les tentatives d'authentification réussies et celles ayant échoué, la suppression d'une collection dans une base de données ou la création d'un index. Par défaut, l'audit est désactivé sur Amazon DocumentDB et vous devez vous inscrire pour utiliser cette fonctionnalité.

Lorsque l'audit est activé, Amazon DocumentDB enregistre les événements liés au langage de définition des données (DDL), au langage de manipulation des données (DML), à l'authentification, à l'autorisation et à la gestion des utilisateurs dans Amazon Logs. CloudWatch Lorsque l'audit est activé, Amazon DocumentDB exporte les enregistrements d'audit de votre cluster (documents JSON) vers Amazon CloudWatch Logs. Vous pouvez utiliser Amazon CloudWatch Logs pour analyser, surveiller et archiver vos événements d'audit Amazon DocumentDB.

Bien qu'Amazon DocumentDB ne facture aucun coût supplémentaire pour activer l'audit, des tarifs standard vous sont facturés pour l'utilisation des CloudWatch journaux. Pour plus d'informations sur la tarification de CloudWatch Logs, consultez la page CloudWatch Tarification Amazon.

La fonction d'audit d'Amazon DocumentDB est nettement différente de l'utilisation des ressources de service qui est surveillée. AWS CloudTrail CloudTrail enregistre les opérations effectuées avec le AWS Command Line Interface (AWS CLI) ou Console de gestion AWS sur des ressources telles que des clusters, des instances, des groupes de paramètres et des instantanés. L'audit des ressources CloudTrail est activé par défaut et ne peut pas être désactivé. La fonctionnalité d'audit d'Amazon DocumentDB est une fonctionnalité optionnelle. Elle enregistre les opérations qui ont lieu au sein de votre cluster sur des objets, par exemple sur des bases de données, des collections, des index et des utilisateurs.

Événements pris en charge

L'audit Amazon DocumentDB prend en charge les catégories d'événements suivantes :

  • Langage de définition des données (DDL)  : inclut les opérations de gestion de base de données, les connexions, la gestion des utilisateurs et les autorisations.

  • Événements de lecture du langage de manipulation des données (lectures DML)  : inclut find() les différents opérateurs d'agrégation, opérateurs arithmétiques, opérateurs booléens et autres opérateurs de requête de lecture.

  • Événements d'écriture dans le langage de manipulation des données (écritures DML)  : inclut insert(), update(), delete(), et opérateurs bulkWrite()

Les types d'événements sont les suivants.

Type d’événement Catégorie Description
authCheck Autorisation Code de résultat 0 : Succès
Code de résultat 13 : Tentatives non autorisées d'exécution d'une opération.
authenticate Connexion Tentatives d'authentification réussies ou en échec sur une nouvelle connexion.
auditConfigure DDL Configuration du filtre d'audit.
createDatabase DDL Création d'une nouvelle base de données.
createCollection DDL Création d'une nouvelle collection dans une base de données.
createIndex DDL Création d'un nouvel index dans une collection.
dropCollection DDL Suppression d'une collection dans une base de données.
dropDatabase DDL Suppression d'une base de données.
dropIndex DDL Suppression d'un index dans une collection.
modifyChangeStreams DDL Le flux de modifications a été créé.
renameCollection DDL Renommer une collection au sein d'une base de données.
createRole Gestion des rôles Création d'un rôle.
dropAllRolesFromDatabase Gestion des rôles Suppression de tous les rôles dans une base de données.
dropRole Gestion des rôles Supprimer un rôle.
grantPrivilegesToRole Gestion des rôles Octroi de privilèges à un rôle.
grantRolesToRole Gestion des rôles Attribution de rôles à un rôle défini par l'utilisateur.
revokePrivilegesFromRole Gestion des rôles Révocation des privilèges d'un rôle.
revokeRolesFromRole Gestion des rôles Révocation de rôles d'un rôle défini par l'utilisateur.
updateRole Gestion des rôles Mettre à jour un rôle.
createUser Gestion des utilisateurs Création d'un nouvel utilisateur.
dropAllUsersFromDatabase Gestion des utilisateurs Suppression de tous les utilisateurs dans une base de données.
dropUser Gestion des utilisateurs Suppression d'un utilisateur existant.
grantRolesToUser Gestion des utilisateurs Attribution de rôles à un utilisateur.
revokeRolesFromUser Gestion des utilisateurs Révocation des rôles d'un utilisateur.
updateUser UserManagement Mise à jour d'un utilisateur existant.
insert écriture DML Insère un ou plusieurs documents dans une collection.
delete écriture DML Supprime un ou plusieurs documents d'une collection.
update écriture DML Modifie un ou plusieurs documents existants dans une collection.
bulkWrite écriture DML Effectue plusieurs opérations d'écriture avec des commandes pour l'ordre d'exécution.
setAuditConfig écriture DML Définissez un nouveau filtre pour l'audit DML.
count Lecture DML Renvoie le nombre de documents qui correspondraient à une requête find () pour la collection ou la vue.
countDocuments Lecture DML Renvoie le nombre de documents correspondant à la requête pour une collection ou une vue.
find Lecture DML Sélectionne les documents d'une collection ou d'une vue et renvoie le curseur sur les documents sélectionnés.
getAuditConfig Lecture DML Récupérez le filtre actuel pour l'audit DML.
findAndModify Lecture DML et écriture DML Modifie et renvoie un seul document.
findOneAndDelete Lecture DML et écriture DML Supprime un seul document en fonction des critères de filtrage et de tri, et renvoie le document supprimé.
findOneAndReplace Lecture DML et écriture DML Remplace un seul document en fonction du filtre spécifié.
findOneAndUpdate Lecture DML et écriture DML Met à jour un document unique en fonction des critères de filtrage et de tri.
aggregate Lecture DML et écriture DML Supporte les API dans le pipeline d'agrégation.
distinct Lecture DML Recherche les valeurs distinctes d'un champ spécifié dans une collection ou une vue unique et renvoie les résultats dans un tableau.
Note

Les valeurs du champ de paramètres du document d'événement DML ont une taille limite de 1 Ko. Amazon DocumentDB tronque la valeur si elle dépasse 1 Ko.

Note

Les événements de suppression TTL ne sont pas audités pour le moment.

Activation de l'audit

L'activation de l'audit sur un cluster est un processus en deux étapes. Assurez-vous que les deux étapes sont terminées, sinon les journaux d'audit ne seront pas envoyés aux CloudWatch journaux.

Étape 1. Activez le paramètre de cluster audit_logs

Pour activer l'audit, vous devez modifier le audit_logs paramètre dans le groupe de paramètres. audit_logsest une liste d'événements à enregistrer, séparés par des virgules. Les événements doivent être spécifiés en minuscules et il ne doit pas y avoir d'espace entre les éléments de la liste.

Vous pouvez définir les valeurs suivantes pour le groupe de paramètres :

Value Description
ddl Cette configuration permettra d'auditer les événements DDL tels que CreateDatabase, DropDatabase, CreateCollection, DropCollection, CreateIndex, DropIndex, AuthCheck, authenticate, CreateUser, DropUser, grant, revoke, UpdateUser et drop RolesToUser RolesFromUser AllUsersFromDatabase
dml_read Cette configuration permettra d'auditer les événements de lecture DML tels que find, sort count, distinct, group, projecta, unwind, GeoNear, GeoIntersects, GeoWithin et d'autres opérateurs de requêtes de lecture MongoDB.
dml_write Cette configuration permettra d'auditer les événements d'écriture DML tels que insert (), update (), delete () et bulkWrite ()
all Cette configuration permettra d'auditer les événements de votre base de données, tels que les requêtes de lecture, les requêtes d'écriture, les actions de base de données et les actions de l'administrateur.
none Cette configuration désactivera l'audit
enabled (hérité) Il s'agit d'un paramètre existant équivalent à « ddl ». Cette configuration permettra d'auditer les événements DDL tels que CreateDatabase, DropDatabase, CreateCollection, DropCollection, CreateIndex, DropIndex, AuthCheck, authenticate, CreateUser, DropUser, grant, revoke, UpdateUser et drop. RolesToUser RolesFromUser AllUsersFromDatabase Nous vous déconseillons d'utiliser ce paramètre car il s'agit d'un paramètre existant.
disabled (héritage) Il s'agit d'un paramètre existant qui est équivalent à « aucun ». Nous vous déconseillons d'utiliser ce paramètre car il s'agit d'un paramètre existant.
Note

La valeur par défaut du paramètre de cluster audit_logs est none (legacy "disabled«).

Vous pouvez également utiliser les valeurs mentionnées ci-dessus en combinaison.

Value Description
ddl, dml_read Ce réglage permettra d'auditer les événements DDL et les événements de lecture DML.
ddl, dml_write Ce réglage activera l'audit des événements DDL et l'écriture DML.
dml_read, dml_write Ce réglage activera l'audit de tous les événements DML
Note

Vous ne pouvez pas modifier un groupe de paramètres par défaut.

Pour plus d’informations, consultez les ressources suivantes :

Étape 2. Activer l'exportation d'Amazon CloudWatch Logs

Lorsque la valeur du paramètre de audit_logs cluster estenabled,ddl, ou dml_readdml_write, vous devez également autoriser Amazon DocumentDB à exporter les journaux vers Amazon CloudWatch. Si vous omettez l'une de ces étapes, les journaux d'audit ne seront pas envoyés à CloudWatch.

Lorsque vous créez un cluster, effectuez une restauration ponctuelle ou restaurez un instantané, vous pouvez activer les CloudWatch journaux en suivant ces étapes.

Using the Console de gestion AWS

Pour permettre à Amazon DocumentDB d'exporter des journaux à CloudWatch l'aide de la console, consultez les rubriques suivantes :

Using the AWS CLI
Pour activer les journaux d'audit lors de la création d'un cluster

Le code suivant crée le cluster sample-cluster et active les journaux CloudWatch d'audit.

Exemple

Pour Linux, macOS ou Unix :

aws docdb create-db-cluster \ --db-cluster-identifier sample-cluster \ --port 27017 \ --engine docdb \ --master-username master-username \ --master-user-password password \ --db-subnet-group-name default \ --enable-cloudwatch-logs-exports audit

Pour Windows :

aws docdb create-db-cluster ^ --db-cluster-identifier sample-cluster ^ --port 27017 ^ --engine docdb ^ --master-username master-username ^ --master-user-password password ^ --db-subnet-group-name default ^ --enable-cloudwatch-logs-exports audit
Pour activer les journaux d'audit lors de la modification d'un cluster existant

Le code suivant modifie le cluster sample-cluster et active les journaux CloudWatch d'audit.

Exemple

Pour Linux, macOS ou Unix :

aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit"]}'

Pour Windows :

aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit"]}'

Le résultat de ces opérations ressemble à ceci (format JSON).

{ "DBCluster": { "HostedZoneId": "ZNKXH85TT8WVW", "StorageEncrypted": false, "DBClusterParameterGroup": "default.docdb4.0", "MasterUsername": "<user-name>", "BackupRetentionPeriod": 1, "Port": 27017, "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-77186e0d" } ], "DBClusterArn": "arn:aws:rds:us-east-1:900083794985:cluster:sample-cluster", "Status": "creating", "Engine": "docdb", "EngineVersion": "4.0.0", "MultiAZ": false, "AvailabilityZones": [ "us-east-1a", "us-east-1c", "us-east-1f" ], "DBSubnetGroup": "default", "DBClusterMembers": [], "ReaderEndpoint": "sample-cluster.cluster-ro-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "EnabledCloudwatchLogsExports": [ "audit" ], "PreferredMaintenanceWindow": "wed:03:08-wed:03:38", "AssociatedRoles": [], "ClusterCreateTime": "2019-02-13T16:35:04.756Z", "DbClusterResourceId": "cluster-YOS52CUXGDTNKDQ7DH72I4LED4", "Endpoint": "sample-cluster.cluster-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "PreferredBackupWindow": "07:16-07:46", "DBClusterIdentifier": "sample-cluster" } }

Désactivation de l'audit

Vous pouvez désactiver l'audit en désactivant l'exportation CloudWatch des journaux et en désactivant le audit_logs paramètre.

Désactivation de l'exportation CloudWatch des journaux

Vous pouvez désactiver l'exportation des journaux d'audit à l'aide du Console de gestion AWS ou du AWS CLI.

Using the Console de gestion AWS

La procédure suivante permet de désactiver l' Console de gestion AWS exportation des journaux vers CloudWatch Amazon DocumentDB.

Pour désactiver les journaux d'audit
  1. Connectez-vous au et ouvrez Console de gestion AWS la console Amazon DocumentDB à https://console.aws.amazon.com/docdb l'adresse.

  2. Dans le panneau de navigation, choisissez Clusters. Choisissez ensuite le bouton à gauche du nom du cluster pour lequel vous souhaitez désactiver l'exportation des journaux.

  3. Choisissez Actions, puis Modify (Modifier).

  4. Faites défiler jusqu'à la section Log exports (Exportations de journaux), puis choisissez Disabled (Désactivé).

  5. Sélectionnez Continuer.

  6. Vérifiez vos modifications, puis choisissez quand cette modification devra être appliquée à votre cluster.

    • Appliquer pendant la fenêtre de maintenance planifiée suivante

    • Appliquer immédiatement

  7. Choisissez Modifier le cluster.

Using the AWS CLI

Le code suivant modifie le cluster sample-cluster et désactive les journaux CloudWatch d'audit.

Exemple

Pour Linux, macOS ou Unix :

aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit"]}'

Pour Windows :

aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit"]}'

La sortie de cette opération ressemble à ceci (format JSON).

{ "DBCluster": { "DBClusterParameterGroup": "default.docdb4.0", "HostedZoneId": "ZNKXH85TT8WVW", "MasterUsername": "<user-name>", "Status": "available", "Engine": "docdb", "Port": 27017, "AvailabilityZones": [ "us-east-1a", "us-east-1c", "us-east-1f" ], "EarliestRestorableTime": "2019-02-13T16:35:50.387Z", "DBSubnetGroup": "default", "LatestRestorableTime": "2019-02-13T16:35:50.387Z", "DBClusterArn": "arn:aws:rds:us-east-1:900083794985:cluster:sample-cluster2", "Endpoint": "sample-cluster2.cluster-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "ReaderEndpoint": "sample-cluster2.cluster-ro-corcjozrlsfc.us-east-1.docdb.amazonaws.com", "BackupRetentionPeriod": 1, "EngineVersion": "4.0.0", "MultiAZ": false, "ClusterCreateTime": "2019-02-13T16:35:04.756Z", "DBClusterIdentifier": "sample-cluster2", "AssociatedRoles": [], "PreferredBackupWindow": "07:16-07:46", "DbClusterResourceId": "cluster-YOS52CUXGDTNKDQ7DH72I4LED4", "StorageEncrypted": false, "PreferredMaintenanceWindow": "wed:03:08-wed:03:38", "DBClusterMembers": [], "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-77186e0d" } ] } }

Désactivation du paramètre audit_logs

Pour désactiver le paramètre audit_logs de votre cluster, vous pouvez modifier ce dernier de façon à ce qu'il utilise un groupe de paramètres dans lequel la valeur du paramètre audit_logs est disabled. Vous pouvez également modifier la valeur du paramètre audit_logs dans le groupe de paramètres du cluster afin qu'elle soit disabled.

Pour plus d’informations, consultez les rubriques suivantes :

Accès à vos événements d'audit

Suivez les étapes ci-dessous pour accéder à vos événements d'audit sur Amazon CloudWatch.

  1. Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/.

  2. Assurez-vous que vous vous trouvez dans la même région que votre cluster Amazon DocumentDB.

  3. Dans le panneau de navigation, sélectionnez Logs (Journaux).

  4. Pour rechercher les journaux d'audit de votre cluster, dans la liste, trouvez et choisissez /aws/docdb/yourClusterName/audit.

    Les événements d'audit pour chacune de vos instances sont disponibles sous chacun des noms d'instance respectifs.

Filtrage des événements d'audit DML

Commencer à utiliser le filtrage d'audit DML

Les événements d'audit DML peuvent être filtrés avant d'être écrits sur Amazon CloudWatch. Pour utiliser cette fonctionnalité, le journal d'audit et la journalisation DML doivent être activés. Amazon DocumentDB prend en charge le filtrage sur atype commanduser,namespace, etauditAuthorizationSuccess.

Note

Les événements DDL ne sont pas filtrés.

Vous pouvez activer le filtrage d'audit à tout moment en spécifiant le filtre d'audit à l'aide des auditAuthorizationSuccess paramètres setAuditConfigfilter, et de l'db.adminCommand( { command } )opération :

db.admin.runCommand( { setAuditConfig: 1, filter: { //filter conditions }, auditAuthorizationSuccess: true | false } )

Vous pouvez également récupérer les paramètres du filtre d'audit en exécutant la commande suivante :

db.admin.runCommand( { getAuditConfig: 1})

Exigences en matière de sécurité

Seule la base de données users/roles dotée d'une action privilégiée auditConfigure peut exécuter les commandes ci-dessus admindb lors de la définition ou de la liste des filtres d'audit DML. Vous pouvez utiliser l'un des rôles intégrés de [clusterAdmin,hostManager,root] ou créer des rôles personnalisés dotés de auditConfigure privilèges. Voici un exemple d'utilisation de rôles existants avec ce auditConfigure privilège et un exemple avec des rôles personnalisés.

Utilisateur avec rôle intégré :

use admin db.createUser( { user: "myClusterAdmin", pwd: "password123", roles: [ { role: "clusterAdmin", db: "admin" } ] } )

Utilisateur doté de rôles personnalisés :

use admin db.createRole( { role: "myRole", privileges: [ { resource: { cluster: true }, actions: [ "auditConfigure" ] } ], roles: [] } ) db.createUser( { user: "myUser", pwd: "myPassword", roles: [ { role: "myRole", db: "admin" } ] } )

Filtrer les cas d'utilisation

Exemple : filtrage des événements par commandes

db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.command": { $in: [ "find","count", "insert", "delete", "update", "findandmodify" ] } } ] }, auditAuthorizationSuccess: true } )

Exemple : filtrage des événements par nom d'utilisateur

Dans cet exemple, seul l'utilisateur « MyUser » sera enregistré :

db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.user": { $in: [ "myUser" ] } } ]}, auditAuthorizationSuccess: true})

Exemple : filtrage par atype

db.admin.runCommand( { setAuditConfig: 1, filter: {atype: "authCheck"}, auditAuthorizationSuccess: true })
Note

Tous les journaux DML ont authCheck commeatype. Seul le DDL a une différence. atype Si vous saisissez une valeur autre que celle authCheck defilter, aucune connexion DML ne sera générée CloudWatch.

Exemple : filtrage à l'aide de plusieurs filtres joints par des opérateurs

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})
Note

Au niveau supérieur, seuls $and$or, et $nor sont pris en charge. Tout autre opérateur n'est pas pris en charge et provoquera une erreur.

Exemple : filtrage par événements par auditAuthorizationSuccess

Dans ce filtre, toutes les commandes qui ont été autorisées avec succès ne seront pas enregistrées :

db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: false } )

Exemple : filtrage avec $in et $nin conditions

Lorsque vous utilisez à la fois in $in et$nin, la commande ne sera pas enregistrée car il y aura un « et » implicite entre les conditions. Dans cet exemple, regex bloquera la find commande afin que rien ne soit enregistré :

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})

Exemple : filtrage par namespace

db.admin.runCommand( { setAuditConfig: 1, filter: { "$and": [ { "param.ns": { $in: [ "test.foo" ] } } ]}, auditAuthorizationSuccess: true})

Exemple : rétablissement du filtre par défaut

La réinitialisation de la valeur par défaut signifie que chaque événement d'audit DML sera enregistré. Pour rétablir la valeur par défaut du filtrage, exécutez la commande suivante :

db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: true } )