

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.

# Surveillance d’Amazon RDS à l’aide des flux d’activité de base de données
<a name="DBActivityStreams"></a><a name="das"></a>

En utilisant les flux d’activité de base de données, vous pouvez surveiller en temps quasi réel les flux d’activité de base de données.

**Topics**
+ [Présentation des flux d’activité de base de données](#DBActivityStreams.Overview)
+ [Configuration d'un audit unifié pour Oracle Database](DBActivityStreams.configuring-auditing.md)
+ [Configuration de la politique d’audit pour Amazon RDS for Microsoft SQL Server](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [Démarrage d’un flux d’activité de base de données](DBActivityStreams.Enabling.md)
+ [Modification d’un flux d’activité de base de données pour Amazon RDS](DBActivityStreams.Modifying.md)
+ [Obtention de l'état d'un flux d'activité de base de données](DBActivityStreams.Status.md)
+ [Arrêt d’un flux d’activité de base de données](DBActivityStreams.Disabling.md)
+ [Surveillance des flux d’activité de base de données](DBActivityStreams.Monitoring.md)
+ [Exemples de politique IAM pour les flux d’activité de base de données](DBActivityStreams.ManagingAccess.md)

## Présentation des flux d’activité de base de données
<a name="DBActivityStreams.Overview"></a>

En tant qu’administrateur de base de données Amazon RDS, vous devez protéger votre base de données et satisfaire aux exigences en matière de conformité et de réglementation. Une politique consiste à intégrer les flux d’activités de base de données avec vos outils de surveillance. De cette façon, vous surveillez l’activité d’audit dans votre base de données et définissez des alarmes.

Les menaces de sécurité sont à la fois externes et internes. Pour vous protéger contre des menaces internes, vous pouvez contrôler l’accès administrateur aux flux de données à l’aide de la fonction Database Activity Streams. Amazon RDS DBAs n'a pas accès à la collecte, à la transmission, au stockage et au traitement des flux.

**Contents**
+ [Fonctionnement des flux d’activité de base de données](#DBActivityStreams.Overview.how-they-work)
+ [Audit dans Oracle Database et la base de données Microsoft SQL Server](#DBActivityStreams.Overview.auditing)
  + [Audit unifié dans Oracle Database](#DBActivityStreams.Overview.unified-auditing)
  + [Audit dans Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
  + [Champs d’audit non natifs pour Oracle Database et SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [Remplacement de groupe de paramètres de base de données](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [Mode asynchrone pour les flux d'activité de base de données](#DBActivityStreams.Overview.sync-mode)
+ [Exigences et limites pour les flux d’activité de base de données](#DBActivityStreams.Overview.requirements)
+ [Disponibilité des régions et des versions](#DBActivityStreams.RegionVersionAvailability)
+ [Classes d’instance de base de données prises en charge pour les flux d’activité de base de données](#DBActivityStreams.Overview.requirements.classes)

### Fonctionnement des flux d’activité de base de données
<a name="DBActivityStreams.Overview.how-they-work"></a>

Amazon RDS envoie (push) les activités vers un flux de données Amazon Kinesis en temps quasi réel. Le flux Kinesis est créé automatiquement. Kinesis vous permet de configurer des AWS services tels qu'Amazon Data Firehose, de consommer le flux et AWS Lambda de stocker les données.

**Important**  
L’utilisation de la fonction de flux d’activité de base de données dans Amazon RDS est gratuite, mais Amazon Kinesis facture un flux de données. Pour plus d’informations, consultez la [Tarification d’Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).

Vous pouvez configurer les applications de gestion de la conformité pour qu’elles consomment les flux d’activité des bases de données. Ces applications peuvent utiliser le flux pour générer des alertes et auditer l’activité sur votre base de données.

Amazon RDS prend en charge les flux d’activité des bases de données dans les déploiements multi-AZ. Dans ce cas, les flux d’activité de la base de données vérifient à la fois les instances principales et les instances en veille.

### Audit dans Oracle Database et la base de données Microsoft SQL Server
<a name="DBActivityStreams.Overview.auditing"></a>

L’audit est la surveillance et l’enregistrement d’actions de base de données configurées. Amazon RDS ne capture aucune activité de base de données par défaut. Vous créez et gérez vous-même les politiques d’audit dans votre base de données.

**Topics**
+ [Audit unifié dans Oracle Database](#DBActivityStreams.Overview.unified-auditing)
+ [Audit dans Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
+ [Champs d’audit non natifs pour Oracle Database et SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [Remplacement de groupe de paramètres de base de données](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Audit unifié dans Oracle Database
<a name="DBActivityStreams.Overview.unified-auditing"></a>

Dans une base de données Oracle, une *politique d’audit unifié* est un groupe nommé de paramètres d’audit que vous pouvez utiliser pour auditer un aspect du comportement utilisateur. Une politique peut être aussi simple que l’audit des activités d’un seul utilisateur. Vous pouvez également créer des politiques d’audit complexes qui utilisent des conditions.

Une base de données Oracle écrit des enregistrements d’audit, dont des enregistrements d’audit `SYS`, dans la *trace d’audit unifié*. Par exemple, si une erreur survient pendant une instruction `INSERT`, un audit standard indique le numéro d’erreur et le code SQL qui a été exécuté. La trace d’audit se trouve dans une table en lecture seule dans le schéma `AUDSYS`. Pour accéder à ces enregistrements, interrogez la vue du dictionnaire de données `UNIFIED_AUDIT_TRAIL`.

Généralement, vous configurez les flux d’activité de base de données comme suit :

1. Créez une politique d’audit Oracle Database à l’aide de la commande `CREATE AUDIT POLICY`.

   Oracle Database génère des enregistrements d’audit.

1. Activez la politique d’audit à l’aide de la commande `AUDIT POLICY`.

1. Configurer les flux d’activité de base de données.

   Seules les activités qui correspondent aux politiques d’audit d’Oracle Database sont capturées et envoyées au flux de données Amazon Kinesis. Lorsque les flux d’activité de base de données sont activés, un administrateur de base de données Oracle ne peut pas modifier la politique d’audit ou supprimer des journaux d’audit.

Pour en savoir plus sur les politiques d’audit unifié, consultez [About Auditing Activities with Unified Audit Policies and AUDIT](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0) dans *Oracle Database Security Guide*.

#### Audit dans Microsoft SQL Server
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

Database Activity Stream utilise SQLAudit une fonctionnalité pour auditer la base de données SQL Server.

L’instance RDS for SQL Server contient les éléments suivants :
+ Audit de serveur : l’audit SQL Server collecte une instance unique d’actions au niveau du serveur ou de la base de données, ainsi qu’un groupe d’actions à surveiller. Les audits au niveau du serveur `RDS_DAS_AUDIT` et `RDS_DAS_AUDIT_CHANGES` sont gérés par RDS.
+ Spécification d’audit de serveur : la spécification d’audit de serveur enregistre les événements au niveau du serveur. Vous pouvez modifier la spécification `RDS_DAS_SERVER_AUDIT_SPEC`. Cette spécification est liée à l’audit du serveur `RDS_DAS_AUDIT`. La spécification `RDS_DAS_CHANGES_AUDIT_SPEC` est gérée par RDS.
+ Spécification d’audit de base de données : la spécification d’audit de base de données enregistre les événements au niveau du serveur. Vous pouvez créer une spécification d’audit de base de données `RDS_DAS_DB_<name>` et la lier à l’audit de serveur `RDS_DAS_AUDIT`.

Vous pouvez configurer les flux d’activité de base de données à l’aide de la console ou de l’interface de ligne de commande. Généralement, vous configurez les flux d’activité de base de données comme suit :

1. (Facultatif) Créez une spécification d’audit de base de données à l’aide de la commande `CREATE DATABASE AUDIT SPECIFICATION` et associez-la à l’audit de serveur `RDS_DAS_AUDIT`. 

1. (Facultatif) Modifiez la spécification d’audit de serveur à l’aide de la commande `ALTER SERVER AUDIT SPECIFICATION` et définissez les politiques. 

1. Activez les politiques d’audit de base de données et de serveur. Par exemple :

   `ALTER DATABASE AUDIT SPECIFICATION [<Your database specification>] WITH (STATE=ON)`

   `ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC] WITH (STATE=ON)`

1. Configurer les flux d’activité de base de données.

   Seules les activités qui correspondent aux politiques d’audit de serveur et de base de données sont capturées et envoyées au flux de données Amazon Kinesis. Quand les flux d’activité de base de données sont activés et que les politiques sont verrouillées, un administrateur de base de données ne peut pas modifier la politique d’audit ni supprimer des journaux d’audit. 
**Important**  
Si la spécification d’audit de base de données pour une base de données spécifique est activée et que la politique est à l’état verrouillé, la base de données ne peut pas être supprimée.

Pour plus d’informations sur l’audit SQL Server, consultez [Composants d’audit SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) dans la *documentation sur Microsoft SQL Server*.



#### Champs d’audit non natifs pour Oracle Database et SQL Server
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

Lorsque vous démarrez un flux d’activité de base de données, chaque événement de base de données génère un événement de flux d’activité correspondant. Par exemple, un utilisateur de base de données peut exécuter des instructions `SELECT` et `INSERT`. La base de données audite ces événements et les envoie à un flux de données Amazon Kinesis Data Stream.

Les événements sont représentés dans le flux comme des objets JSON. Un objet JSON contient un `DatabaseActivityMonitoringRecord`, qui contient un tableau `databaseActivityEventList`. Les champs prédéfinis dans le tableau sont `class`, `clientApplication` et `command`.

Par défaut, un flux d’activité n’inclut pas de champs d’audit natifs du moteur. Vous pouvez configurer Amazon RDS for Oracle et SQL Server de sorte qu’il inclue ces champs supplémentaires dans l’objet JSON `engineNativeAuditFields`.

Dans Oracle Database, la plupart des événements dans la trace d’audit unifié sont mappés à des champs dans le flux d’activité de données RDS. Par exemple, le champ `UNIFIED_AUDIT_TRAIL.SQL_TEXT` dans un audit mappe au champ `commandText` dans un flux d’activité de base de données. Toutefois, des champs d’audit d’Oracle Database tels que `OS_USERNAME` ne mappent pas à des champs prédéfinis dans un flux d’activité de base de données.

Dans SQL Server, la plupart des champs de l'événement enregistrés par le système SQLAudit correspondent aux champs du flux d'activité de la base de données RDS. Par exemple, le champ `code` issu de `sys.fn_get_audit_file` dans l’audit est mappé sur le champ `commandText` dans un flux d’activité de base de données. Toutefois, les champs d’audit de base de données SQL Server, tels que `permission_bitmask`, ne sont pas mappés sur les champs prédéfinis dans un flux d’activité de base de données.

Pour plus d'informations sur databaseActivityEvent List, consultez[Tableau JSON databaseActivityEventList pour les flux d’activité de base de données](DBActivityStreams.AuditLog.databaseActivityEventList.md).

#### Remplacement de groupe de paramètres de base de données
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

En règle générale, vous activez l’audit unifié dans RDS for Oracle en attachant un groupe de paramètres. Toutefois, les flux d’activité de base de données nécessitent une configuration supplémentaire. Pour améliorer votre expérience client, Amazon RDS procède comme suit :
+ Si vous activez un flux d’activité, RDS for Oracle ignore les paramètres d’audit dans le groupe de paramètres.
+ Si vous désactivez un flux d’activité, RDS for Oracle cesse d’ignorer les paramètres d’audit.

Le flux d’activité de base de données pour SQL Server est indépendant des paramètres que vous définissez dans l’option d’audit SQL.

### Mode asynchrone pour les flux d'activité de base de données
<a name="DBActivityStreams.Overview.sync-mode"></a>

Les flux d’activité dans Amazon RDS sont toujours asynchrones. Quand une session de base de données génère un événement de flux d’activité, la session revient immédiatement aux activités normales. En arrière-plan, Amazon RDS transforme l’événement de flux d’activité en un enregistrement durable.

Si une erreur se produit dans la tâche en arrière-plan, Amazon RDS génère un événement. Cet événement indique le début et la fin de toute fenêtre de temps au cours de laquelle des enregistrements d’événement de flux d’activité ont pu être perdus. Le mode asynchrone favorise les performances de la base de données plutôt que la précision du flux d’activité.

### Exigences et limites pour les flux d’activité de base de données
<a name="DBActivityStreams.Overview.requirements"></a>

Dans RDS, les flux d’activité de base de données présentent les limites et les exigences suivantes :
+ Amazon Kinesis est nécessaire pour les flux d’activité des bases de données.
+ AWS Key Management Service (AWS KMS) est obligatoire pour les flux d'activité de base de données car ils sont toujours chiffrés.
+ L'application d'un chiffrement supplémentaire à votre flux de données Amazon Kinesis est incompatible avec les flux d'activité de base de données, qui sont déjà chiffrés avec votre AWS KMS clé.
+ Vous créez et gérez vous-même les politiques d’audit. Contrairement à Amazon Aurora, RDS for Oracle ne capture aucune activité de base de données par défaut.
+ Vous créez et gérez vous-même les politiques d’audit ou les spécifications. Contrairement à Amazon Aurora, Amazon RDS ne capture aucune activité de base de données par défaut.
+ Dans un déploiement multi-AZ, démarrez le flux d’activité de base de données uniquement sur l’instance de base de données principale. Le flux d’activité vérifie automatiquement les instances de base de données principales et en veille. Aucune étape supplémentaire n’est requise lors d’un basculement.
+ Le fait de renommer une instance de base de données ne crée pas un nouveau flux Kinesis.
+ CDBs ne sont pas pris en charge par RDS pour Oracle.
+ Les réplicas en lecture ne sont pas pris en charge.

### Disponibilité des régions et des versions
<a name="DBActivityStreams.RegionVersionAvailability"></a>

La disponibilité et la prise en charge des fonctionnalités varient selon les versions spécifiques de chaque moteur de base de données, et selon les Régions AWS. Pour obtenir plus d’informations sur la disponibilité des versions et des régions avec les flux d’activité des bases de données, consultez [Régions et moteurs de base de données pris en charge pour les flux d’activité des bases de données dans Amazon RDS](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md).

### Classes d’instance de base de données prises en charge pour les flux d’activité de base de données
<a name="DBActivityStreams.Overview.requirements.classes"></a>

Pour RDS for Oracle, vous pouvez utiliser des flux d’activité de base de données avec les classes d’instance de base de données suivantes :
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5.\$1large.tpc\$1.mem\$1x
+ db.r5b.\$1large
+ db.r5b.\$1large.tpc\$1.mem\$1x
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.r6i.\$1large.tpc\$1.mem\$1x
+ db.x2idn.\$1large
+ db.x2iedn.\$1large
+ db.x2iezn.\$1large
+ db.z1d.\$1large

Pour RDS for SQL Server, vous pouvez utiliser des flux d’activité de base de données avec les classes d’instance de base de données suivantes :
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5b.\$1large
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.x1e.\$1large
+ db.x2iedn.\$1large
+ db.z1d.\$1large

Pour plus d’informations sur les types de classes d’instance , consultez [Classes d'instances de base de données ](Concepts.DBInstanceClass.md).

# Configuration d'un audit unifié pour Oracle Database
<a name="DBActivityStreams.configuring-auditing"></a>

Lorsque vous configurez un audit unifié pour une utilisation avec des flux d'activité de base de données, les situations suivantes peuvent se présenter :
+ L'audit unifié est configuré pour votre base de données Oracle

  Dans ce cas, créez de nouvelles politiques avec la commande `CREATE AUDIT POLICY`, puis activez-les avec la commande `AUDIT POLICY`. L'exemple suivant crée et active une politique pour surveiller les utilisateurs disposant de privilèges et de rôles spécifiques.

  ```
  CREATE AUDIT POLICY table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  ROLES emp_admin, sales_admin;
  
  AUDIT POLICY table_pol;
  ```

  Pour obtenir des instructions complètes, consultez [Configuring Audit Policies](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-22CDB667-5AA2-4051-A262-FBD0236763CB) dans la documentation Oracle Database.
+ L'audit unifié est configuré pour votre base de données Oracle

  Lorsque vous activez un flux d'activité de base de données, RDS pour Oracle efface automatiquement les données d'audit existantes. Il révoque également les privilèges de trace d'audit. RDS for Oracle ne peut plus effectuer les opérations suivantes :
  + Purger les enregistrements de journal d'activité d'audit unifié.
  + Ajouter, supprimer ou modifier la politique d'audit unifié.
  + Mettre à jour le dernier horodatage archivé.
**Important**  
Nous vous recommandons fortement de sauvegarder vos données d'audit avant d'activer un flux d'activité de base de données.

  Pour obtenir une description de la vue `UNIFIED_AUDIT_TRAIL`, consultez [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162). Si vous possédez un compte auprès d'Oracle Support, consultez [How To Purge The UNIFIED AUDIT TRAIL](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1582627_1.html).

# Configuration de la politique d’audit pour Amazon RDS for Microsoft SQL Server
<a name="DBActivityStreams.configuring-auditing-SQLServer"></a>

Une instance de base de données SQL Server comporte l’audit de serveur `RDS_DAS_AUDIT`, qui est géré par Amazon RDS. Vous pouvez définir les politiques d’enregistrement des événements de serveur dans la spécification d’audit de serveur `RDS_DAS_SERVER_AUDIT_SPEC`. Vous pouvez créer une spécification d’audit de base de données, telle que `RDS_DAS_DB_<name>`, et définir les politiques d’enregistrement des événements de base de données. Pour obtenir la liste des groupes d’actions d’audit au niveau du serveur et de la base de données, consultez [Actions et groupes d’actions d’audit SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions) dans la *documentation sur Microsoft SQL Server*.

La politique de serveur par défaut surveille uniquement les échecs de connexion et les modifications apportées aux spécifications d’audit de base de données ou de serveur pour les flux d’activité de base de données.

Les limites de l’audit et des spécifications d’audit sont les suivantes :
+ Vous ne pouvez pas modifier les spécifications d’audit de serveur ou de base de données lorsque le flux d’activité de base de données est à l’état *verrouillé*.
+ Vous ne pouvez pas modifier la spécification `RDS_DAS_AUDIT` d’audit de serveur.
+ Vous ne pouvez pas modifier l’audit SQL Server `RDS_DAS_CHANGES` ni sa spécification d’audit de serveur associée `RDS_DAS_CHANGES_AUDIT_SPEC`.
+ Lors de la création d’une spécification d’audit de base de données, vous devez utiliser le format `RDS_DAS_DB_<name>`, par exemple `RDS_DAS_DB_databaseActions`.

**Important**  
Pour les classes d’instance plus petites, nous vous recommandons de ne pas auditer toutes les données, mais seulement les données requises. Cela permet de réduire l’impact des flux d’activité de base de données sur les performances de ces classes d’instance.

L’exemple de code suivant modifie la spécification d’audit de serveur `RDS_DAS_SERVER_AUDIT_SPEC` et audite toute déconnexion et toute action de connexion réussie :

```
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      WITH (STATE=OFF);
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      ADD (LOGOUT_GROUP),
      ADD (SUCCESSFUL_LOGIN_GROUP)
      WITH (STATE = ON );
```

L’exemple de code suivant crée une spécification d’audit de base de données `RDS_DAS_DB_database_spec` et l’attache à l’audit de serveur `RDS_DAS_AUDIT` :

```
USE testDB;
CREATE DATABASE AUDIT SPECIFICATION [RDS_DAS_DB_database_spec]
     FOR SERVER AUDIT [RDS_DAS_AUDIT]
     ADD ( INSERT, UPDATE, DELETE  
          ON testTable BY testUser )  
     WITH (STATE = ON);
```

Une fois les spécifications d’audit configurées, veillez à ce que les spécifications `RDS_DAS_SERVER_AUDIT_SPEC` et `RDS_DAS_DB_<name>` soient définies sur l’état `ON`. Elles peuvent désormais envoyer les données d’audit à votre flux d’activité de base de données.

# Démarrage d’un flux d’activité de base de données
<a name="DBActivityStreams.Enabling"></a>

Lorsque vous démarrez un flux d'activité pour l'instance de base de données, chaque événement d'activité de base de données que vous avez configuré dans la politique d'audit génère un événement de flux d'activité. Des commandes SQL telles que `CONNECT` et `SELECT` génèrent des événements d’accès. Des commandes SQL telles que `CREATE` et `INSERT` génèrent des événements de modification.

**Important**  
L'activation d'un flux d'activité pour une instance de base de données Oracle efface les données d'audit existantes. Il révoque également les privilèges de trace d'audit. Quand le flux est activé, RDS for Oracle ne peut plus effectuer les opérations suivantes :  
Purger les enregistrements de journal d’activité d’audit unifié.
Ajouter, supprimer ou modifier la politique d'audit unifié.
Mettre à jour le dernier horodatage archivé.

------
#### [ Console ]

**Pour démarrer un flux d’activité de base de données**

1. Ouvrez la console Amazon RDS à l'adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Dans la panneau de navigation, choisissez **Bases de données**.

1. Choisissez l'instance de base de données Amazon RDS sur laquelle vous souhaitez démarrer un flux d'activité. Dans un déploiement Multi-AZ, démarrez le flux uniquement sur l’instance principale. Le flux d'activité vérifie à la fois l'instance principale et l'instance en veille.

1. Pour **Actions**, choisissez **Start activity stream** (Démarrer le flux d’activité). 

   La fenêtre **Démarrer un flux d'activité de base de données : ***nom* s'affiche, où *nom* est votre instance RDS.

1. Définissez les paramètres suivants :
   + Pour une **AWS KMS key**, choisissez une clé dans la liste des AWS KMS keys.

     Amazon RDS utilise la clé KMS pour chiffrer la clé qui va à son tour chiffrer l'activité de base de données. Choisissez une clé KMS différente de la clé par défaut. Pour plus d’informations sur les clés de chiffrement et AWS KMS, consultez [Présentation d’AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) dans le *Manuel du développeur AWS Key Management Service*.
   + Pour **Événements d'activité de base de données**, choisissez **Activer les champs d'audit natifs au moteur** pour inclure les champs d'audit spécifiques du moteur.
   + Choisissez **Immédiatement**.

     Lorsque vous choisissez **Immédiatement**, le instance RDSredémarre tout de suite. Si vous choisissez **Pendant la prochaine fenêtre de maintenance**, le instance RDS ne redémarre pas tout de suite. Dans ce cas, le flux d’activité de base de données ne démarre pas avant la prochaine fenêtre de maintenance.

1. Choisissez **Démarrer le flux d’activité de base de données**.

   Le statut pour la base de données indique que le flux d'activité démarre.
**Note**  
Si l’erreur `You can't start a database activity stream in this configuration` s’affiche, vérifiez [Classes d’instance de base de données prises en charge pour les flux d’activité de base de données](DBActivityStreams.md#DBActivityStreams.Overview.requirements.classes) pour voir si votre instance RDS utilise une classe d’instance prise en charge.

------
#### [ AWS CLI ]

Pour démarrer des flux d'activité de base de données pour une instance de base de données, configurez la base de données à l'aide de la commande AWS CLI [start-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/start-activity-stream.html).
+ `--resource-arn arn` – Spécifie l’Amazon Resource Name (ARN) du instance de base de données.
+ `--kms-key-id key` – Spécifie l’identifiant de clé KMS pour le chiffrement des messages dans le flux d’activité de base de données. L’identifiant de clé KMS AWS est l’ARN de clé, l’ID de clé, l’ARN d’alias ou le nom d’alias pour la AWS KMS key.
+ `--engine-native-audit-fields-included` – Inclut des champs d'audit spécifiques du moteur dans le flux de données. Pour exclure ces champs, spécifiez `--no-engine-native-audit-fields-included` (par défaut).

L’exemple suivant démarre un flux d’activité de base de données pour une instance de base de données en mode asynchrone.

Pour Linux, macOS ou Unix :

```
aws rds start-activity-stream \
    --mode async \
    --kms-key-id my-kms-key-arn \
    --resource-arn my-instance-arn \
    --engine-native-audit-fields-included \
    --apply-immediately
```

Pour Windows :

```
aws rds start-activity-stream ^
    --mode async ^
    --kms-key-id my-kms-key-arn ^
    --resource-arn my-instance-arn ^
    --engine-native-audit-fields-included ^
    --apply-immediately
```

------
#### [ Amazon RDS API ]

Pour démarrer des flux d’activité de base de données pour un instance de base de données, configurez l’instance à l’aide de l’opération [StartActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartActivityStream.html).

Appelez l’action avec les paramètres ci-dessous :
+ `Region`
+ `KmsKeyId`
+ `ResourceArn`
+ `Mode`
+ `EngineNativeAuditFieldsIncluded`

------

# Modification d’un flux d’activité de base de données pour Amazon RDS
<a name="DBActivityStreams.Modifying"></a>

Vous voudrez peut-être personnaliser votre politique d’audit Amazon RDS lors du lancement de votre flux d’activité. Si vous ne voulez pas perdre de temps et de données en arrêtant votre flux d’activité, vous pouvez modifier *l’état de la politique d’audit* en choisissant l’un des paramètres suivants :

**Locked (default)** [Verrouillé (par défaut)]  
Les politiques d'audit de votre base de données sont en lecture seule.

**Unlocked** (Débloqué)  
Les politiques d'audit de votre base de données sont en lecture/écriture.

La procédure de base est la suivante :

1. Modifiez l'état de la politique d'audit pour qu'elle soit déverrouillée.

1. Personnalisez votre politique d'audit.

1. Modifier l'état de la politique d'audit pour qu'elle soit verrouillée.

## Console
<a name="DBActivityStreams.Modifying-collapsible-section-E1"></a>

**Pour modifier l'état de la politique d'audit de votre flux d'activité**

1. Ouvrez la console Amazon RDS à l’adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Dans la panneau de navigation, choisissez **Bases de données**.

1. Pour **Actions**, sélectionnez **Modify database activity stream** (Modifier le flux d'activité de la base de données). 

   La fenêtre **Modify database activity stream: *name*** (Modifier le flux d'activité de la base de données : nom) apparaît, où la valeur *name* (nom) est votre instance RDS.

1. Choisissez l’une des options suivantes :  
**Locked** (Verrouillée)  
Lorsque vous verrouillez votre politique d'audit, elle passe en lecture seule. Vous ne pouvez pas modifier votre politique d'audit à moins de déverrouiller la politique ou d'arrêter le flux d'activité.  
**Unlocked** (Débloqué)  
Lorsque vous déverrouillez votre politique d'audit, elle passe en lecture/écriture. Vous pouvez modifier votre politique d'audit pendant que le flux d'activité est lancé.

1. Sélectionnez **Modify DB activity stream** (Modifier le flux d’activité de la base de données).

   Le statut de la base de données Amazon RDS montre **Configuration du flux d'activité**.

1. (Facultatif) Choisissez le lien de l’instance de base de données. Choisissez ensuite l’onglet **Configuration**.

   Le champ **Audit policy status** (Statut de la politique d'audit) affiche l'une des valeurs suivantes :
   + **Locked** (Verrouillée)
   + **Unlocked** (Débloqué)
   + **Locking policy** (Politique de verrouillage)
   + **Unlocking policy** (Politique de déverrouillage)

## AWS CLI
<a name="DBActivityStreams.Modifying-collapsible-section-E2"></a>

Pour modifier l'état du flux d'activité de l'instance de base de données, utilisez la commande AWS CLI [modify-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-activity-stream.html).


****  

| Option | Obligatoire ? | Description | 
| --- | --- | --- | 
|  `--resource-arn my-instance-ARN`  |  Oui  |  L'Amazon Resource Name (ARN) de votre instance de base de données RDS.  | 
|  `--audit-policy-state`  |  Non  |  Le nouvel état de la politique d'audit pour le flux d'activité de la base de données sur votre instance : `locked` ou `unlocked`.  | 

L’exemple suivant déverrouille la politique d’audit pour le flux d’activité démarré sur *my-instance-ARN*.

Pour Linux, macOS ou Unix :

```
aws rds modify-activity-stream \
    --resource-arn my-instance-ARN \
    --audit-policy-state unlocked
```

Pour Windows :

```
aws rds modify-activity-stream ^
    --resource-arn my-instance-ARN ^
    --audit-policy-state unlocked
```

L’exemple suivant décrit l’instance *my-instance*. L'exemple de sortie partielle montre que la politique d'audit est déverrouillée.

```
aws rds describe-db-instances --db-instance-identifier my-instance

{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "started",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": "unlocked",
            ...
        }
    ]
}
```

## API RDS
<a name="DBActivityStreams.Modifying-collapsible-section-E3"></a>

Pour modifier l'état de la politique du flux d'activité de votre base de données, utilisez l'opération [ModifyActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyActivityStream.html).

Appelez l’action avec les paramètres ci-dessous :
+ `AuditPolicyState`
+ `ResourceArn`

# Obtention de l'état d'un flux d'activité de base de données
<a name="DBActivityStreams.Status"></a>

Vous pouvez obtenir le statut d'un flux d'activité pour votre instance de base de données Amazon RDS en utilisant la console ou AWS CLI.

## console
<a name="DBActivityStreams.Status-collapsible-section-S1"></a>

**Obtention de l'état d'un flux d'activité de base de données**

1. Ouvrez la console Amazon RDS à l'adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Dans le panneau de navigation, choisissez **Bases de données**, puis le lien du instance de base de données.

1. Choisissez l'onglet **Configuration** et cochez l'option **Flux d'activité de base de données** pour obtenir l'état.

## AWS CLI
<a name="DBActivityStreams.Status-collapsible-section-S2"></a>

Vous pouvez obtenir la configuration du flux d'activité pour une instance de base de données en réponse à une demande CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html).

L'exemple suivant décrit *my-instance*.

```
aws rds --region my-region describe-db-instances --db-instance-identifier my-db
```

Voici un exemple de réponse JSON. Les champs suivants s'affichent :
+ `ActivityStreamKinesisStreamName`
+ `ActivityStreamKmsKeyId`
+ `ActivityStreamStatus`
+ `ActivityStreamMode`
+ `ActivityStreamPolicyStatus`



```
{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "starting",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": locked",
            ...
        }
    ]
}
```

## API RDS
<a name="DBActivityStreams.Status-collapsible-section-S3"></a>

Vous pouvez obtenir la configuration du flux d'activité pour une base de données en réponse à une opération [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html).

# Arrêt d’un flux d’activité de base de données
<a name="DBActivityStreams.Disabling"></a>

Vous pouvez arrêter un flux d’activité à partir de la console ou d’AWS CLI.

Si vous supprimez votre instance de base de données Amazon RDS, le flux d'activité est arrêté et le flux Amazon Kinesis sous-jacent est supprimé automatiquement.

## Console
<a name="DBActivityStreams.Disabling-collapsible-section-D1"></a>

**Pour désactiver un flux d’activité**

1. Ouvrez la console Amazon RDS à l'adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Dans la panneau de navigation, choisissez **Databases (Bases de données)**.

1. Choisissez une base de données pour lequel vous souhaitez arrêter le flux d'activité de base de données.

1. Pour **Actions**, choisissez **Stop activity stream** (Arrêter le flux d’activité). La fenêtre **Database Activity Stream** (Flux d’activité de base de données) apparaît.

   1. Choisissez **Immédiatement**.

      Lorsque vous choisissez **Immédiatement**, le instance RDSredémarre tout de suite. Si vous choisissez **Pendant la prochaine fenêtre de maintenance**, le instance RDS ne redémarre pas tout de suite. Dans ce cas, le flux d'activité de base de données ne s'arrête pas avant la prochaine fenêtre de maintenance.

   1. Choisissez **Continuer**.

## AWS CLI
<a name="DBActivityStreams.Disabling-collapsible-section-D2"></a>

Pour arrêter les flux d'activité de base de données pour votre base de données, configurez le instance de base de données à l'aide de la commande AWS CLI [stop-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/stop-activity-stream.html). Identifiez la région AWS pour le instance de base de données avec le paramètre `--region`. Le paramètre `--apply-immediately` est facultatif.

Pour Linux, macOS ou Unix :

```
aws rds --region MY_REGION \
    stop-activity-stream \
    --resource-arn MY_DB_ARN \
    --apply-immediately
```

Pour Windows :

```
aws rds --region MY_REGION ^
    stop-activity-stream ^
    --resource-arn MY_DB_ARN ^
    --apply-immediately
```

## API RDS
<a name="DBActivityStreams.Disabling-collapsible-section-D3"></a>

Pour arrêter les flux d’activité de base de données pour base de données, configurez ce cette instance de base de données à l’aide de l’opération [StopActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StopActivityStream.html). Identifiez la région AWS pour le instance de base de données avec le paramètre `Region`. Le paramètre `ApplyImmediately` est facultatif.

# Surveillance des flux d’activité de base de données
<a name="DBActivityStreams.Monitoring"></a>

Les flux d’activité de base de données surveillent et rapportent les activités. Le flux d'activité est collecté et transmis à Amazon Kinesis. Depuis Kinesis, vous pouvez surveiller le flux d'activité ou d'autres services et applications peuvent utiliser le flux d'activité pour une analyse plus approfondie. Vous pouvez trouver le nom du flux Kinesis sous-jacent à l’aide de la commande `describe-db-instances` de AWS CLI ou de l’opération `DescribeDBInstances` de l’API RDS.

Amazon RDS gère le flux Kinesis pour vous comme suit :
+ Amazon RDS crée automatiquement le flux Kinesis avec une période de rétention de 24 heures. 
+  Amazon RDS met à l'échelle le flux Kinesis si nécessaire. 
+  Si vous arrêtez le flux d’activité de base de données ou supprimez l’instance de base de données, Amazon RDS supprime le flux Kinesis. 

Les catégories d'activité suivantes sont surveillées et incluses dans le journal d'audit de flux d'activité :
+ **Commandes SQL** – Toutes les commandes SQL sont auditées, ainsi que les instructions préparées, les fonctions intégrées et les fonctions en PL/SQL. Les appels aux procédures stockées sont vérifiés. Toutes les instructions SQL émises dans des procédures ou fonctions stockées sont également vérifiées.
+ **Autres informations de bases de données** – L'activité surveillée inclut l'instruction SQL complète, le nombre des lignes affectées par les commandes DML, les objets consultés et le nom unique de base de données. Les flux d'activité de base de données surveillent également les variables de liaison et les paramètres de procédure stockée. 
**Important**  
Le texte SQL complet de chaque instruction est visible dans le journal d'audit du flux d'activité, y compris les données sensibles. Cependant, les mots de passe des utilisateurs de base de données sont expurgés si Oracle peut les déterminer d'après le contexte, comme dans l'instruction SQL suivante.   

  ```
  ALTER ROLE role-name WITH password
  ```
+ **Informations de connexion** – L'activité surveillée inclut les informations de session et de réseau, l'ID de processus serveur et les codes de sortie.

Si un flux d’activité rencontre un échec pendant la surveillance de votre instance de base de données, vous en êtes informé via des événements RDS.

Les sections ci-après vous permettent d’accéder aux flux d’activité des bases de données, de les auditer et de les traiter.

**Topics**
+ [Accès à un flux d’activité depuis Amazon Kinesis](DBActivityStreams.KinesisAccess.md)
+ [Contenu du journal d’audit et exemples pour les flux d’activité de base de données](DBActivityStreams.AuditLog.md)
+ [Tableau JSON databaseActivityEventList pour les flux d’activité de base de données](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [Traitement d’un flux d’activité de base de données à l’aide du kit AWS SDK](DBActivityStreams.CodeExample.md)

# Accès à un flux d’activité depuis Amazon Kinesis
<a name="DBActivityStreams.KinesisAccess"></a>

Lorsque vous activez un flux d’activité pour une base de données, un flux Kinesis est créé pour vous. Depuis Kinesis, vous pouvez surveiller l'activité de votre base de données en temps réel. Pour effectuer des analyses plus poussées de l'activité de base de données, vous pouvez connecter votre flux Kinesis à des applications grand public. Vous pouvez également connecter le flux à des applications de gestion de la conformité telles que Security Guardium d’IBM ou SecureSphere Database Audit and Protection d’Imperva.

Vous pouvez accéder à votre flux Kinesis à partir de la console RDS ou de la console Kinesis.

**Pour accéder à un flux d'activité depuis Kinesis avec la console RDS**

1. Ouvrez la console Amazon RDS à l’adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Dans la panneau de navigation, choisissez **Bases de données**.

1. Choisissez l'instance de base de données Amazon RDS où vous souhaitez démarrer un flux d'activité.

1. Choisissez **Configuration**.

1. Sous **Database activity stream** (Flux d'activité de la base de données), choisissez le lien sous **Kinesis stream** (Flux Kinesis).

1. Dans la console Kinesis, choisissez **Monitoring** (Surveillance) pour commencer à observer l'activité de la base de données.

**Pour accéder à un flux d'activité depuis Kinesis avec la console Kinesis**

1. Ouvrez la console Kinesis à l’adresse [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis).

1. Choisissez votre flux d'activité dans la liste des flux Kinesis.

   Le nom d'un flux d'activité comprend le préfixe `aws-rds-das-db-` suivi de l'ID de ressource de la base de données. Voici un exemple de. 

   ```
   aws-rds-das-db-NHVOV4PCLWHGF52NP
   ```

   Pour utiliser la console Amazon RDS afin de trouver l’ID de ressource pour la base de données, choisissez votre instance de base de données dans la liste des bases de données, puis choisissez l’onglet **Configuration**.

   Pour trouver le nom complet de flux Kinesis pour un flux d’activité à l’aide de AWS CLI, utilisez une demande de CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) et notez la valeur de `ActivityStreamKinesisStreamName` dans la réponse.

1. Choisissez **Surveillance** pour commencer à observer l'activité de base de données.

Pour plus d’informations sur l’utilisation d’Amazon Kinesis, consultez [En quoi consiste le service Amazon Kinesis Data Streams ?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html).

# Contenu du journal d’audit et exemples pour les flux d’activité de base de données
<a name="DBActivityStreams.AuditLog"></a>

Les événements surveillés sont représentés dans le flux d’activité de base de données sous la forme de chaînes JSON. La structure se compose d’un objet JSON contenant un `DatabaseActivityMonitoringRecord`, qui contient lui-même un tableau des événements d’activité `databaseActivityEventList`. 

**Note**  
Pour les flux d’activité de base de données, le tableau JSON `paramList` n’inclut pas les valeurs null des applications Hibernate.

**Topics**
+ [Exemples de journaux d’audit de flux d’activité](#DBActivityStreams.AuditLog.Examples)
+ [DatabaseActivityMonitoringRecords Objet JSON](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [databaseActivityEvents Objet JSON](#DBActivityStreams.AuditLog.databaseActivityEvents)

## Exemples de journaux d’audit de flux d’activité
<a name="DBActivityStreams.AuditLog.Examples"></a>

Vous trouverez ci-après des exemples de journaux d’audits JSON déchiffrés d’enregistrements d’événements d’activité.

**Example Enregistrement d'événement d'activité d' CONNECT**  
L’enregistrement d’événement d’activité suivant indique une connexion à l’aide d’une instruction SQL `CONNECT` (`command`) par un client léger JDBC (`clientApplication`) pour votre base de données Oracle.  

```
{
    "class": "Standard",
    "clientApplication": "JDBC Thin Client",
    "command": "LOGON",
    "commandText": null,
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:15:36.233787",
    "netProtocol": "tcp",
    "objectName": null,
    "objectType": null,
    "paramList": [],
    "pid": 17904,
    "remoteHost": "123.456.789.012",
    "remotePort": "25440",
    "rowCount": null,
    "serverHost": "987.654.321.098",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 987654321,
    "startTime": null,
    "statementId": 1,
    "substatementId": null,
    "transactionId": "0000000000000000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SESSION",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DBID": 123456789
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((ADDRESS\u003d(PROTOCOL\u003dtcp)(HOST\u003d205.251.233.183)(PORT\u003d25440))));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "a1b2c3d4e5f6.amazon.com",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "unknown",
        "OS_USERNAME": "sumepate",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 1,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5124715
    }
}
```
L’enregistrement d’événement d’activité suivant indique un échec de connexion pour votre base de données SQL Server.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "LOGIN",
            "clientApplication": "Microsoft SQL Server Management Studio",
            "command": "LOGIN FAILED",
            "commandText": "Login failed for user 'test'. Reason: Password did not match that for the login provided. [CLIENT: local-machine]",
            "databaseName": "",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 0,
            "logTime": "2022-10-06 21:34:42.7113072+00",
            "netProtocol": null,
            "objectName": "",
            "objectType": "LOGIN",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 0,
            "startTime": null,
            "statementId": "0x1eb0d1808d34a94b9d3dcf5432750f02",
            "substatementId": 1,
            "transactionId": "0",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 0,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 0,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "<action_info "xmlns=\"http://schemas.microsoft.com/sqlserver/2008/sqlaudit_data\"><pooled_connection>0</pooled_connection><error>0x00004818</error><state>8</state><address>local machine</address><PasswordFirstNibbleHash>B</PasswordFirstNibbleHash></action_info>"-->,
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "",
                "connection_id": "98B4F537-0F82-49E3-AB08-B9D33B5893EF",
                "audit_schema_version": 1,
                "database_principal_id": 0,
                "server_principal_sid": null,
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```
Si un flux d’activité de base de données n’est pas activé, le dernier champ du document JSON est `"engineNativeAuditFields": { }`. 

**Example Registre d’événement d’activité d’une instruction CREATE TABLE**  
L’exemple suivant montre un événement `CREATE TABLE` pour votre base de données Oracle.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "CREATE TABLE",
    "commandText": "CREATE TABLE persons(\n    person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,\n    first_name VARCHAR2(50) NOT NULL,\n    last_name VARCHAR2(50) NOT NULL,\n    PRIMARY KEY(person_id)\n)",
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:22:49.535239",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.01",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1234567890,
    "startTime": null,
    "statementId": 43,
    "substatementId": null,
    "transactionId": "090011007F0D0000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SEQUENCE, CREATE TABLE",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-10-13-0-122",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 12,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5133083
    }
}
```
L’exemple suivant montre un événement `CREATE TABLE` pour votre base de données SQL Server.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "SCHEMA",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "ALTER",
            "commandText": "Create table [testDB].[dbo].[TestTable2](\r\ntextA varchar(6000),\r\n    textB varchar(6000)\r\n)",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:44:38.4120677+00",
            "netProtocol": null,
            "objectName": "dbo",
            "objectType": "SCHEMA",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 84,
            "startTime": null,
            "statementId": "0x5178d33d56e95e419558b9607158a5bd",
            "substatementId": 1,
            "transactionId": "4561864",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 1,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "EE1FE3FD-EF2C-41FD-AF45-9051E0CD983A",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

**Example Registre d’événement d’activité d’une instruction SELECT**  
L’exemple suivant montre un événement `SELECT` pour votre base de données Oracle.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "SELECT",
    "commandText": "select count(*) from persons",
    "databaseName": "1234567890",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:25:18.850375",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.09",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1080639707,
    "startTime": null,
    "statementId": 44,
    "substatementId": null,
    "transactionId": null,
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": null,
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-12-34-5-678",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 13,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5136972
    }
}
```
L’exemple suivant montre un événement `SELECT` pour votre base de données SQL Server.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "TABLE",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "SELECT",
            "commandText": "select * from [testDB].[dbo].[TestTable]",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:24:59.9422268+00",
            "netProtocol": null,
            "objectName": "TestTable",
            "objectType": "TABLE",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 62,
            "startTime": null,
            "statementId": "0x03baed90412f564fad640ebe51f89b99",
            "substatementId": 1,
            "transactionId": "4532935",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "dbo",
                "is_column_permission": true,
                "object_id": 581577110,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000001",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "AD3A5084-FB83-45C1-8334-E923459A8109",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

## DatabaseActivityMonitoringRecords Objet JSON
<a name="DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords"></a>

Les enregistrements d’événement d’activité de base de données se trouvent dans un objet JSON qui contient les informations suivantes.


****  

| Champ JSON | Type de données | Description | 
| --- | --- | --- | 
|  `type`  | chaîne |  Type de l’enregistrement JSON. La valeur est `DatabaseActivityMonitoringRecords`.  | 
| version | chaîne |  Version des enregistrements de surveillance d’activité de base de données. La base de données Oracle utilise la version 1.3 et SQL Server utilise la version 1.4. Ces versions du moteur introduisent l’objet JSON engineNativeAuditFields.  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | chaîne |  Objet JSON qui contient les événements d’activité.  | 
| key | chaîne | Clé de chiffrement que vous utilisez pour déchiffrer [Tableau JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)  | 

## databaseActivityEvents Objet JSON
<a name="DBActivityStreams.AuditLog.databaseActivityEvents"></a>

L’objet JSON `databaseActivityEvents` contient les informations suivantes.

### Champs de niveau supérieur dans l’enregistrement JSON
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 Chaque événement du journal d’audit est encapsulé dans un enregistrement au format JSON. Cet enregistrement contient les champs suivants. 

**type**  
 Ce champ a toujours la valeur `DatabaseActivityMonitoringRecords`. 

**version ;**  
 Ce champ représente la version du contrat ou du protocole de données de flux d’activité de base de données. Il définit les champs disponibles.

**databaseActivityEvents**  
 Chaîne chiffrée représentant un ou plusieurs événements d’activité. Elle est représentée sou la forme d’un tableau base64 octets. Lorsque vous déchiffrez la chaîne, le résultat est un enregistrement au format JSON avec des champs comme ceux des exemples de cette section.

**key**  
 Clé de données chiffrée utilisée pour chiffrer la chaîne `databaseActivityEvents`. Il s'agit du même AWS KMS key que celui que vous avez fourni lorsque vous avez démarré le flux d'activité de la base de données.

 L’exemple suivant illustre le format de cet enregistrement.

```
{
  "type":"DatabaseActivityMonitoringRecords",
  "version":"1.3",
  "databaseActivityEvents":"encrypted audit records",
  "key":"encrypted key"
}
```

```
           "type":"DatabaseActivityMonitoringRecords",
           "version":"1.4",
           "databaseActivityEvents":"encrypted audit records",
           "key":"encrypted key"
```

Pour déchiffrer le contenu du champ `databaseActivityEvents`, procédez comme suit :

1.  Déchiffrez la valeur dans le champ JSON `key` à l’aide de la clé KMS que vous avez fournie lors du démarrage du flux d’activité de base de données. Cette opération renvoie la clé de chiffrement des données en texte clair. 

1.  Décodez en base64 la valeur dans le champ JSON `databaseActivityEvents` pour obtenir le texte chiffré, au format binaire, de la charge utile d’audit. 

1.  Déchiffrez le chiffrement binaire avec la clé de chiffrement de données que vous avez décodée au cours de la première étape. 

1.  Décompressez la charge utile déchiffrée. 
   +  La charge utile chiffrée se trouve dans le champ `databaseActivityEvents`. 
   +  Le champ `databaseActivityEventList` contient un tableau d’enregistrements d’audits. Les champs `type` du tableau peuvent être `record` ou `heartbeat`. 

L’enregistrement d’événement d’activité du journal d’audit est un objet JSON qui contient les informations suivantes.


****  

| Champ JSON | Type de données | Description | 
| --- | --- | --- | 
|  `type`  | chaîne |  Type de l’enregistrement JSON. La valeur est `DatabaseActivityMonitoringRecord`.  | 
| instanceId | chaîne | Identifiant de ressource d’instance de base de données. Il correspond à l’attribut d’instance de base de données DbiResourceId. | 
|  [Tableau JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | chaîne |  Tableau d’enregistrements d’audits d’activité ou de messages de pulsations.  | 

# Tableau JSON databaseActivityEventList pour les flux d’activité de base de données
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

Les données utiles du journal d’audit sont un tableau JSON `databaseActivityEventList` chiffré. Ci-dessous, le tableau répertorie par ordre alphabétique les champs de chaque événement d'activité dans le tableau `DatabaseActivityEventList` déchiffré d'un journal d'audit. 

Lorsque l'audit unifié est activé dans Oracle Database, les enregistrements d'audit sont renseignés dans cette nouvelle trace d'audit. La vue `UNIFIED_AUDIT_TRAIL` affiche les enregistrements d'audit sous forme de tableau en extrayant les enregistrements d'audit de la trace d'audit. Lorsque vous démarrez un flux d'activité de base de données, une colonne dans `UNIFIED_AUDIT_TRAIL` mappe à un champ dans le tableau `databaseActivityEventList`.

**Important**  
Il se peut que la structure d'événement change. Il se peut qu'Amazon RDS ajoute de nouveaux champs aux événements d'activité à l'avenir. Dans les applications qui analysent les données JSON, assurez-vous que votre code peut ignorer ou prendre les mesures appropriées pour les noms de champs inconnus. 

## Champs databaseActivityEventList pour Amazon RDS for Oracle
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

Voici les champs `databaseActivityEventList` pour Amazon RDS for Oracle.


| Champ | Type de données | Source | Description | 
| --- | --- | --- | --- | 
|  `class`  |  chaîne  |  Colonne `AUDIT_TYPE` dans `UNIFIED_AUDIT_TRAIL`  |  La classe d'un événement d'activité. Celle-ci correspond à la colonne `AUDIT_TYPE` dans la vue `UNIFIED_AUDIT_TRAIL`. Les valeurs valides pour Amazon RDS for Oracle sont les suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) Pour plus d'informations, consultez [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D) dans la documentation Oracle.  | 
|  `clientApplication`  |  chaîne  |  `CLIENT_PROGRAM_NAME` dans `UNIFIED_AUDIT_TRAIL`  |  Application utilisée par le client pour se connecter, telle que signalée par le client. Le client n'a pas à fournir cette information, la valeur peut être « null ». Un exemple de valeur est `JDBC Thin Client`.  | 
|  `command`  |  chaîne  |  Colonne `ACTION_NAME` dans `UNIFIED_AUDIT_TRAIL`  |  Nom de l'action exécutée par l'utilisateur. Pour comprendre l'action complète, lisez le nom de la commande et la valeur `AUDIT_TYPE`. Un exemple de valeur est `ALTER DATABASE`.  | 
|  `commandText`  |  chaîne  |  Colonne `SQL_TEXT` dans `UNIFIED_AUDIT_TRAIL`  |  Instruction SQL associée à l'événement. Un exemple de valeur est `ALTER DATABASE BEGIN BACKUP`.  | 
|  `databaseName`  |  chaîne  |  Colonne `NAME` dans `V$DATABASE`  |  Nom de la base de données.  | 
|  `dbid`  |  nombre  |  Colonne `DBID` dans `UNIFIED_AUDIT_TRAIL`  |  Identifiant numérique de la base de données. Un exemple de valeur est `1559204751`.  | 
|  `dbProtocol`  |  chaîne  |  N/A  |  Protocole de la base de données. Dans cette version bêta, la valeur est `oracle`.  | 
|  `dbUserName`  |  chaîne  |  Colonne `DBUSERNAME` dans `UNIFIED_AUDIT_TRAIL`  |  Nom de l'utilisateur de la base de données dont les actions ont été auditées. Un exemple de valeur est `RDSADMIN`.  | 
|  `endTime`  |  chaîne  |  N/A  |  Ce champ n'est pas utilisé pour RDS for Oracle. Sa valeur est toujours null.  | 
|  `engineNativeAuditFields`  |  objet  |  `UNIFIED_AUDIT_TRAIL`  |  Par défaut, cet objet est vide. Lorsque vous démarrez le flux d'activité avec l'option `--engine-native-audit-fields-included`, cet objet inclut les colonnes et leurs valeurs suivantes : <pre>ADDITIONAL_INFO<br />APPLICATION_CONTEXTS<br />AUDIT_OPTION<br />AUTHENTICATION_TYPE<br />CLIENT_IDENTIFIER<br />CURRENT_USER<br />DBLINK_INFO<br />DBPROXY_USERNAME<br />DIRECT_PATH_NUM_COLUMNS_LOADED<br />DP_BOOLEAN_PARAMETERS1<br />DP_TEXT_PARAMETERS1<br />DV_ACTION_CODE<br />DV_ACTION_NAME<br />DV_ACTION_OBJECT_NAME<br />DV_COMMENT<br />DV_EXTENDED_ACTION_CODE<br />DV_FACTOR_CONTEXT<br />DV_GRANTEE<br />DV_OBJECT_STATUS<br />DV_RETURN_CODE<br />DV_RULE_SET_NAME<br />ENTRY_ID<br />EXCLUDED_OBJECT<br />EXCLUDED_SCHEMA<br />EXCLUDED_USER<br />EXECUTION_ID<br />EXTERNAL_USERID<br />FGA_POLICY_NAME<br />GLOBAL_USERID<br />INSTANCE_ID<br />KSACL_SERVICE_NAME<br />KSACL_SOURCE_LOCATION<br />KSACL_USER_NAME<br />NEW_NAME<br />NEW_SCHEMA<br />OBJECT_EDITION<br />OBJECT_PRIVILEGES<br />OLS_GRANTEE<br />OLS_LABEL_COMPONENT_NAME<br />OLS_LABEL_COMPONENT_TYPE<br />OLS_MAX_READ_LABEL<br />OLS_MAX_WRITE_LABEL<br />OLS_MIN_WRITE_LABEL<br />OLS_NEW_VALUE<br />OLS_OLD_VALUE<br />OLS_PARENT_GROUP_NAME<br />OLS_POLICY_NAME<br />OLS_PRIVILEGES_GRANTED<br />OLS_PRIVILEGES_USED<br />OLS_PROGRAM_UNIT_NAME<br />OLS_STRING_LABEL<br />OS_USERNAME<br />PROTOCOL_ACTION_NAME<br />PROTOCOL_MESSAGE<br />PROTOCOL_RETURN_CODE<br />PROTOCOL_SESSION_ID<br />PROTOCOL_USERHOST<br />PROXY_SESSIONID<br />RLS_INFO<br />RMAN_DEVICE_TYPE<br />RMAN_OBJECT_TYPE<br />RMAN_OPERATION<br />RMAN_SESSION_RECID<br />RMAN_SESSION_STAMP<br />ROLE<br />SCN<br />SYSTEM_PRIVILEGE<br />SYSTEM_PRIVILEGE_USED<br />TARGET_USER<br />TERMINAL<br />UNIFIED_AUDIT_POLICIES<br />USERHOST<br />XS_CALLBACK_EVENT_TYPE<br />XS_COOKIE<br />XS_DATASEC_POLICY_NAME<br />XS_ENABLED_ROLE<br />XS_ENTITY_TYPE<br />XS_INACTIVITY_TIMEOUT<br />XS_NS_ATTRIBUTE<br />XS_NS_ATTRIBUTE_NEW_VAL<br />XS_NS_ATTRIBUTE_OLD_VAL<br />XS_NS_NAME<br />XS_PACKAGE_NAME<br />XS_PROCEDURE_NAME<br />XS_PROXY_USER_NAME<br />XS_SCHEMA_NAME<br />XS_SESSIONID<br />XS_TARGET_PRINCIPAL_NAME<br />XS_USER_NAME</pre> Pour plus d'informations, consultez [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162) dans la documentation Oracle Database.  | 
|  `errorMessage`  |  chaîne  |  N/A  |  Ce champ n'est pas utilisé pour RDS for Oracle. Sa valeur est toujours null.  | 
|  `exitCode`  |  nombre  |  Colonne `RETURN_CODE` dans `UNIFIED_AUDIT_TRAIL`  |  Code d'erreur Oracle Database généré par l'action. Si l'action a réussi, la valeur est `0`.  | 
|  `logTime`  |  chaîne  |  Colonne `EVENT_TIMESTAMP_UTC` dans `UNIFIED_AUDIT_TRAIL`  |  Horodatage de la création de l'entrée de trace d'audit. Un exemple de valeur est `2020-11-27 06:56:14.981404`.  | 
|  `netProtocol`  |  chaîne  |  Colonne `AUTHENTICATION_TYPE` dans `UNIFIED_AUDIT_TRAIL`  |  Protocole de communication réseau. Un exemple de valeur est `TCP`.  | 
|  `objectName`  |  chaîne  |  Colonne `OBJECT_NAME` dans `UNIFIED_AUDIT_TRAIL`  |  Nom de l'objet affecté par l'action. Un exemple de valeur est `employees`.  | 
|  `objectType`  |  chaîne  |  Colonne `OBJECT_SCHEMA` dans `UNIFIED_AUDIT_TRAIL`  |  Nom de schéma de l'objet affecté par l'action. Un exemple de valeur est `hr`.  | 
|  `paramList`  |  liste  |  Colonne `SQL_BINDS` dans `UNIFIED_AUDIT_TRAIL`  |  La liste des variables de liaison éventuelles associées à `SQL_TEXT`. Un exemple de valeur est `parameter_1,parameter_2`.  | 
|  `pid`  |  nombre  |  Colonne `OS_PROCESS` dans `UNIFIED_AUDIT_TRAIL`  |  Identifiant de processus du système d’exploitation du processus de base de données Oracle. Un exemple de valeur est `22396`.  | 
|  `remoteHost`  |  chaîne  |  Colonne `AUTHENTICATION_TYPE` dans `UNIFIED_AUDIT_TRAIL`  |  Soit l'adresse IP du client, soit le nom de l'hôte à partir duquel la session a été générée. Un exemple de valeur est `123.456.789.123`.  | 
|  `remotePort`  |  chaîne  |  Colonne `AUTHENTICATION_TYPE` dans `UNIFIED_AUDIT_TRAIL`  |  Numéro de port du client. Une valeur typique dans les environnements Oracle Database est `1521`.  | 
|  `rowCount`  |  nombre  |  N/A  |  Ce champ n'est pas utilisé pour RDS for Oracle. Sa valeur est toujours null.  | 
|  `serverHost`  |  chaîne  |  Hôte de base de données   |  Adresse IP de l'hôte du serveur de base de données. Un exemple de valeur est `123.456.789.123`.  | 
|  `serverType`  |  chaîne  |  N/A  |  Type de serveur de base de données. La valeur est toujours `ORACLE`.  | 
|  `serverVersion`  |  chaîne  |  Hôte de base de données   |  Version d'Amazon RDS for Oracle, Release Update (RU) et Release Update Revision (RUR). Un exemple de valeur est `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`.  | 
|  `serviceName`  |  chaîne  |  Hôte de base de données   |  Nom du service. Un exemple de valeur est `oracle-ee`.   | 
|  `sessionId`  |  nombre  |  Colonne `SESSIONID` dans `UNIFIED_AUDIT_TRAIL`  |  Identifiant de session de l’audit. Par exemple : `1894327130`.  | 
|  `startTime`  |  chaîne  |  N/A  |  Ce champ n'est pas utilisé pour RDS for Oracle. Sa valeur est toujours null.  | 
|  `statementId`  |  nombre  |  Colonne `STATEMENT_ID` dans `UNIFIED_AUDIT_TRAIL`  |  ID numérique pour chaque exécution d'instruction. Une instruction peut provoquer de nombreuses actions. Un exemple de valeur est `142197`.  | 
|  `substatementId`  |  N/A  |  N/A  |  Ce champ n'est pas utilisé pour RDS for Oracle. Sa valeur est toujours null.  | 
|  `transactionId`  |  chaîne  |  Colonne `TRANSACTION_ID` dans `UNIFIED_AUDIT_TRAIL`  |  L’identifiant de la transaction dans laquelle l’objet est modifié. Un exemple de valeur est `02000800D5030000`.  | 

## Champs databaseActivityEventList pour Amazon RDS for SQL Server
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

Voici les champs `databaseActivityEventList` pour Amazon RDS for SQL Server.


| Champ | Type de données | Source | Description | 
| --- | --- | --- | --- | 
|  `class`  |  chaîne  |  ` sys.fn_get_audit_file.class_type` mappé sur `sys.dm_audit_class_type_map.class_type_desc`  |  La classe d’un événement d’activité. Pour plus d'informations, consultez [Audit SQL Server (moteur de base de données)](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) dans la documentation Microsoft.  | 
|  `clientApplication`  |  chaîne  |  `sys.fn_get_audit_file.application_name`  |  Application à laquelle le client se connecte, comme indiqué par le client (SQL Server versions 14 et ultérieures). Ce champ a la valeur null dans SQL Server version 13.  | 
|  `command`  |  chaîne  |  `sys.fn_get_audit_file.action_id` mappé sur `sys.dm_audit_actions.name`  |  Catégorie générale de l’instruction SQL. La valeur de ce champ dépend de la valeur de la classe.  | 
|  `commandText`  |  chaîne  |  `sys.fn_get_audit_file.statement`  |  Ce champ indique l'instruction SQL.  | 
|  `databaseName`  |  chaîne  |  `sys.fn_get_audit_file.database_name`  |  Nom du moteur de la base de données.  | 
|  `dbProtocol`  |  chaîne  |  N/A  |  Protocole de la base de données. Cette valeur est `SQLSERVER`.  | 
|  `dbUserName`  |  chaîne  |  `sys.fn_get_audit_file.server_principal_name`  |  L'utilisateur de la base de données pour l'authentification du client.  | 
|  `endTime`  |  chaîne  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `engineNativeAuditFields`  |  objet  |  Chaque champ dans `sys.fn_get_audit_file` qui n'est pas répertorié dans cette colonne.  |  Par défaut, cet objet est vide. Lorsque vous démarrez le flux d'activité avec l'option `--engine-native-audit-fields-included`, cet objet inclut d'autres champs d'audit de moteur natifs, qui ne sont pas renvoyés par cette carte JSON.  | 
|  `errorMessage`  |  chaîne  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `exitCode`  |  entier  |  `sys.fn_get_audit_file.succeeded`  |  Indique si l'action qui a démarré l'événement a réussi. Ce champ ne peut pas avoir la valeur null. Pour tous les événements, à l'exception des événements de connexion, ce champ indique si la vérification des autorisations a réussi ou échoué, mais pas si l'opération a réussi ou échoué. Les valeurs sont les suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  chaîne  |  `sys.fn_get_audit_file.event_time`  |  Horodatage de l'événement enregistré par le serveur SQL Server.  | 
|  `netProtocol`  |  chaîne  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `objectName`  |  chaîne  |  `sys.fn_get_audit_file.object_name`  |  Nom de l'objet de base de données si l'instruction SQL agit sur un objet.  | 
|  `objectType`  |  chaîne  |  `sys.fn_get_audit_file.class_type` mappé sur `sys.dm_audit_class_type_map.class_type_desc`  |  Type de l'objet de base de données si l'instruction SQL agit sur un type d'objet.  | 
|  `paramList`  |  chaîne  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `pid`  |  entier  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `remoteHost`  |  chaîne  |  `sys.fn_get_audit_file.client_ip`  |  L'adresse IP ou le nom d'hôte du client qui a émis l'instruction SQL (SQL Server versions 14 et ultérieures). Ce champ a la valeur null dans SQL Server version 13.  | 
|  `remotePort`  |  entier  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `rowCount`  |  entier  |  `sys.fn_get_audit_file.affected_rows`  |  Nombre de lignes de la table affectées par l'instruction SQL (SQL Server versions 14 et ultérieures). Ce champ figure dans SQL Server version 13.  | 
|  `serverHost`  |  chaîne  |  Hôte de base de données  |  Adresse IP du serveur de base de données hôte.  | 
|  `serverType`  |  chaîne  |  N/A  |  Type de serveur de base de données. La valeur est `SQLSERVER`.  | 
|  `serverVersion`  |  chaîne  |  Hôte de base de données  |  Version du serveur de base de données, par exemple 15.00.4073.23.v1.R1 pour SQL Server 2017.  | 
|  `serviceName`  |  chaîne  |  Hôte de base de données  |  Nom du service. Un exemple de valeur est `sqlserver-ee`.  | 
|  `sessionId`  |  entier  |  `sys.fn_get_audit_file.session_id`  |  Identifiant unique de la session.  | 
|  `startTime`  |  chaîne  |  N/A  |  Ce champ n’est pas utilisé par Amazon RDS for SQL Server et la valeur est null.  | 
|  `statementId`  |  chaîne  |  `sys.fn_get_audit_file.sequence_group_id`  |  Identifiant unique de l’instruction SQL du client. L’identifiant est différent pour chaque événement généré. Un exemple de valeur est `0x38eaf4156267184094bb82071aaab644`.  | 
|  `substatementId`  |  entier  |  `sys.fn_get_audit_file.sequence_number`  |  Identifiant permettant de déterminer le numéro de séquence d’une instruction. Cet identifiant est utile quand des enregistrements volumineux sont divisés en plusieurs enregistrements.  | 
|  `transactionId`  |  entier  |  `sys.fn_get_audit_file.transaction_id`  |  Identifiant d’une transaction. S'il n'existe pas de transactions actives, la valeur est zéro.  | 
|  `type`  |  chaîne  |  Flux d'activité de base de données généré  |  Type d’événement. Les valeurs sont `record` ou `heartbeat`.  | 

# Traitement d’un flux d’activité de base de données à l’aide du kit AWS SDK
<a name="DBActivityStreams.CodeExample"></a>

Vous pouvez traiter par programmation un flux d’activité à l’aide du kit AWS SDK. Les exemples suivants sont des exemples Java et Python entièrement fonctionnels d'utilisation des enregistrements de flux d'activité de base de données pour une activation basée sur des instances.

------
#### [ Java ]

```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.zip.GZIPInputStream;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CryptoInputStream;
import com.amazonaws.encryptionsdk.jce.JceMasterKey;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.InvalidStateException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ThrottlingException;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.Builder;
import com.amazonaws.services.kinesis.model.Record;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.DecryptRequest;
import com.amazonaws.services.kms.model.DecryptResult;
import com.amazonaws.util.Base64;
import com.amazonaws.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class DemoConsumer {

    private static final String STREAM_NAME = "aws-rds-das-[instance-external-resource-id]"; // aws-rds-das-db-ABCD123456
    private static final String APPLICATION_NAME = "AnyApplication"; //unique application name for dynamo table generation that holds kinesis shard tracking
    private static final String AWS_ACCESS_KEY = "[AWS_ACCESS_KEY_TO_ACCESS_KINESIS]";
    private static final String AWS_SECRET_KEY = "[AWS_SECRET_KEY_TO_ACCESS_KINESIS]";
    private static final String RESOURCE_ID = "[external-resource-id]"; // db-ABCD123456
    private static final String REGION_NAME = "[region-name]"; //us-east-1, us-east-2...
    private static final BasicAWSCredentials CREDENTIALS = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
    private static final AWSStaticCredentialsProvider CREDENTIALS_PROVIDER = new AWSStaticCredentialsProvider(CREDENTIALS);

    private static final AwsCrypto CRYPTO = new AwsCrypto();
    private static final AWSKMS KMS = AWSKMSClientBuilder.standard()
            .withRegion(REGION_NAME)
            .withCredentials(CREDENTIALS_PROVIDER).build();

    class Activity {
        String type;
        String version;
        String databaseActivityEvents;
        String key;
    }

    class ActivityEvent {
        @SerializedName("class") String _class;
        String clientApplication;
        String command;
        String commandText;
        String databaseName;
        String dbProtocol;
        String dbUserName;
        String endTime;
        String errorMessage;
        String exitCode;
        String logTime;
        String netProtocol;
        String objectName;
        String objectType;
        List<String> paramList;
        String pid;
        String remoteHost;
        String remotePort;
        String rowCount;
        String serverHost;
        String serverType;
        String serverVersion;
        String serviceName;
        String sessionId;
        String startTime;
        String statementId;
        String substatementId;
        String transactionId;
        String type;
    }

    class ActivityRecords {
        String type;
        String clusterId; // note that clusterId will contain an empty string on RDS Oracle and RDS SQL Server
        String instanceId;
        List<ActivityEvent> databaseActivityEventList;
    }

    static class RecordProcessorFactory implements IRecordProcessorFactory {
        @Override
        public IRecordProcessor createProcessor() {
            return new RecordProcessor();
        }
    }

    static class RecordProcessor implements IRecordProcessor {

        private static final long BACKOFF_TIME_IN_MILLIS = 3000L;
        private static final int PROCESSING_RETRIES_MAX = 10;
        private static final long CHECKPOINT_INTERVAL_MILLIS = 60000L;
        private static final Gson GSON = new GsonBuilder().serializeNulls().create();

        private static final Cipher CIPHER;
        static {
            Security.insertProviderAt(new BouncyCastleProvider(), 1);
            try {
                CIPHER = Cipher.getInstance("AES/GCM/NoPadding", "BC");
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) {
                throw new ExceptionInInitializerError(e);
            }
        }

        private long nextCheckpointTimeInMillis;

        @Override
        public void initialize(String shardId) {
        }

        @Override
        public void processRecords(final List<Record> records, final IRecordProcessorCheckpointer checkpointer) {
            for (final Record record : records) {
                processSingleBlob(record.getData());
            }

            if (System.currentTimeMillis() > nextCheckpointTimeInMillis) {
                checkpoint(checkpointer);
                nextCheckpointTimeInMillis = System.currentTimeMillis() + CHECKPOINT_INTERVAL_MILLIS;
            }
        }

        @Override
        public void shutdown(IRecordProcessorCheckpointer checkpointer, ShutdownReason reason) {
            if (reason == ShutdownReason.TERMINATE) {
                checkpoint(checkpointer);
            }
        }

        private void processSingleBlob(final ByteBuffer bytes) {
            try {
                // JSON $Activity
                final Activity activity = GSON.fromJson(new String(bytes.array(), StandardCharsets.UTF_8), Activity.class);

                // Base64.Decode
                final byte[] decoded = Base64.decode(activity.databaseActivityEvents);
                final byte[] decodedDataKey = Base64.decode(activity.key);

                Map<String, String> context = new HashMap<>();
                context.put("aws:rds:db-id", RESOURCE_ID);

                // Decrypt
                final DecryptRequest decryptRequest = new DecryptRequest()
                        .withCiphertextBlob(ByteBuffer.wrap(decodedDataKey)).withEncryptionContext(context);
                final DecryptResult decryptResult = KMS.decrypt(decryptRequest);
                final byte[] decrypted = decrypt(decoded, getByteArray(decryptResult.getPlaintext()));

                // GZip Decompress
                final byte[] decompressed = decompress(decrypted);
                // JSON $ActivityRecords
                final ActivityRecords activityRecords = GSON.fromJson(new String(decompressed, StandardCharsets.UTF_8), ActivityRecords.class);

                // Iterate throught $ActivityEvents
                for (final ActivityEvent event : activityRecords.databaseActivityEventList) {
                    System.out.println(GSON.toJson(event));
                }
            } catch (Exception e) {
                // Handle error.
                e.printStackTrace();
            }
        }

        private static byte[] decompress(final byte[] src) throws IOException {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src);
            GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
            return IOUtils.toByteArray(gzipInputStream);
        }

        private void checkpoint(IRecordProcessorCheckpointer checkpointer) {
            for (int i = 0; i < PROCESSING_RETRIES_MAX; i++) {
                try {
                    checkpointer.checkpoint();
                    break;
                } catch (ShutdownException se) {
                    // Ignore checkpoint if the processor instance has been shutdown (fail over).
                    System.out.println("Caught shutdown exception, skipping checkpoint." + se);
                    break;
                } catch (ThrottlingException e) {
                    // Backoff and re-attempt checkpoint upon transient failures
                    if (i >= (PROCESSING_RETRIES_MAX - 1)) {
                        System.out.println("Checkpoint failed after " + (i + 1) + "attempts." + e);
                        break;
                    } else {
                        System.out.println("Transient issue when checkpointing - attempt " + (i + 1) + " of " + PROCESSING_RETRIES_MAX + e);
                    }
                } catch (InvalidStateException e) {
                    // This indicates an issue with the DynamoDB table (check for table, provisioned IOPS).
                    System.out.println("Cannot save checkpoint to the DynamoDB table used by the Amazon Kinesis Client Library." + e);
                    break;
                }
                try {
                    Thread.sleep(BACKOFF_TIME_IN_MILLIS);
                } catch (InterruptedException e) {
                    System.out.println("Interrupted sleep" + e);
                }
            }
        }
    }

    private static byte[] decrypt(final byte[] decoded, final byte[] decodedDataKey) throws IOException {
        // Create a JCE master key provider using the random key and an AES-GCM encryption algorithm
        final JceMasterKey masterKey = JceMasterKey.getInstance(new SecretKeySpec(decodedDataKey, "AES"),
                "BC", "DataKey", "AES/GCM/NoPadding");
        try (final CryptoInputStream<JceMasterKey> decryptingStream = CRYPTO.createDecryptingStream(masterKey, new ByteArrayInputStream(decoded));
             final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            IOUtils.copy(decryptingStream, out);
            return out.toByteArray();
        }
    }

    public static void main(String[] args) throws Exception {
        final String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID();
        final KinesisClientLibConfiguration kinesisClientLibConfiguration =
                new KinesisClientLibConfiguration(APPLICATION_NAME, STREAM_NAME, CREDENTIALS_PROVIDER, workerId);
        kinesisClientLibConfiguration.withInitialPositionInStream(InitialPositionInStream.LATEST);
        kinesisClientLibConfiguration.withRegionName(REGION_NAME);
        final Worker worker = new Builder()
                .recordProcessorFactory(new RecordProcessorFactory())
                .config(kinesisClientLibConfiguration)
                .build();

        System.out.printf("Running %s to process stream %s as worker %s...\n", APPLICATION_NAME, STREAM_NAME, workerId);

        try {
            worker.run();
        } catch (Throwable t) {
            System.err.println("Caught throwable while processing data.");
            t.printStackTrace();
            System.exit(1);
        }
        System.exit(0);
    }

    private static byte[] getByteArray(final ByteBuffer b) {
        byte[] byteArray = new byte[b.remaining()];
        b.get(byteArray);
        return byteArray;
    }
}
```

------
#### [ Python ]

```
import base64
import json
import zlib
import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy
from aws_encryption_sdk.internal.crypto import WrappingKey
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
from aws_encryption_sdk.identifiers import WrappingAlgorithm, EncryptionKeyType
import boto3

REGION_NAME = '<region>'                    # us-east-1
RESOURCE_ID = '<external-resource-id>'      # db-ABCD123456
STREAM_NAME = 'aws-rds-das-' + RESOURCE_ID  # aws-rds-das-db-ABCD123456

enc_client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)

class MyRawMasterKeyProvider(RawMasterKeyProvider):
    provider_id = "BC"

    def __new__(cls, *args, **kwargs):
        obj = super(RawMasterKeyProvider, cls).__new__(cls)
        return obj

    def __init__(self, plain_key):
        RawMasterKeyProvider.__init__(self)
        self.wrapping_key = WrappingKey(wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
                                        wrapping_key=plain_key, wrapping_key_type=EncryptionKeyType.SYMMETRIC)

    def _get_raw_key(self, key_id):
        return self.wrapping_key


def decrypt_payload(payload, data_key):
    my_key_provider = MyRawMasterKeyProvider(data_key)
    my_key_provider.add_master_key("DataKey")
    decrypted_plaintext, header = enc_client.decrypt(
        source=payload,
        materials_manager=aws_encryption_sdk.materials_managers.default.DefaultCryptoMaterialsManager(master_key_provider=my_key_provider))
    return decrypted_plaintext


def decrypt_decompress(payload, key):
    decrypted = decrypt_payload(payload, key)
    return zlib.decompress(decrypted, zlib.MAX_WBITS + 16)


def main():
    session = boto3.session.Session()
    kms = session.client('kms', region_name=REGION_NAME)
    kinesis = session.client('kinesis', region_name=REGION_NAME)

    response = kinesis.describe_stream(StreamName=STREAM_NAME)
    shard_iters = []
    for shard in response['StreamDescription']['Shards']:
        shard_iter_response = kinesis.get_shard_iterator(StreamName=STREAM_NAME, ShardId=shard['ShardId'],
                                                         ShardIteratorType='LATEST')
        shard_iters.append(shard_iter_response['ShardIterator'])

    while len(shard_iters) > 0:
        next_shard_iters = []
        for shard_iter in shard_iters:
            response = kinesis.get_records(ShardIterator=shard_iter, Limit=10000)
            for record in response['Records']:
                record_data = record['Data']
                record_data = json.loads(record_data)
                payload_decoded = base64.b64decode(record_data['databaseActivityEvents'])
                data_key_decoded = base64.b64decode(record_data['key'])
                data_key_decrypt_result = kms.decrypt(CiphertextBlob=data_key_decoded,
                                                      EncryptionContext={'aws:rds:db-id': RESOURCE_ID})
                print (decrypt_decompress(payload_decoded, data_key_decrypt_result['Plaintext']))
            if 'NextShardIterator' in response:
                next_shard_iters.append(response['NextShardIterator'])
        shard_iters = next_shard_iters


if __name__ == '__main__':
    main()
```

------

# Exemples de politique IAM pour les flux d’activité de base de données
<a name="DBActivityStreams.ManagingAccess"></a>

Tout utilisateur disposant des privilèges de rôle Gestion des identités et des accès AWS (IAM) appropriés pour les flux d'activité de base de données peut créer, démarrer, arrêter et modifier les paramètres des flux d'activité pour une instance de base de données de  de base de données. Ces actions sont consignées dans le journal d’audit du flux. Pour des raisons de conformité optimales, nous vous recommandons de ne pas octroyer ces privilèges à DBAs.

Vous devrez paramétrer les accès aux flux d’activité de base de données à l’aide de politiques IAM. Pour plus d’informations sur l’authentification Amazon RDS, consultez [Identity and Access Management pour Amazon RDS](UsingWithRDS.IAM.md). Pour plus d’informations sur la création des stratégies IAM, consultez [Création et utilisation d'une politique IAM pour l'accès à une base de données IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). 

**Example politique pour autoriser la configuration de Database Activity Streams**  
Pour donner aux utilisateurs des accès précis en vue de modifier les flux d’activité, utilisez les clés de contexte d’opération spécifiques au service `rds:StartActivityStream` et `rds:StopActivityStream` dans une stratégie IAM. L’exemple de politique IAM suivant autorise un utilisateur ou un rôle à configurer des flux d’activité.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureActivityStreams",
            "Effect": "Allow",
            "Action": [
                "rds:StartActivityStream",
                "rds:StopActivityStream"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example politique pour autoriser le démarrage de Database Activity Streams**  
L’exemple de politique IAM suivant autorise un utilisateur ou un rôle à démarrer des flux d’activité.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStartActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
    ]
}
```

**Example politique pour autoriser l’arrêt de Database Activity Streams**  
L’exemple de politique IAM suivant autorise un utilisateur ou un rôle à arrêter des flux d’activité.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStopActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example politique pour refuser le démarrage de Database Activity Streams**  
La politique IAM suivante empêche un utilisateur ou un rôle de démarrer des flux d’activité.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStartActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example politique pour refuser l’arrêt de Database Activity Streams**  
La politique IAM suivante empêche un utilisateur ou un rôle d’arrêter des flux d’activité.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStopActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
    ]
}
```