

# Supervisión de Amazon RDS con flujos de actividad de la base de datos
<a name="DBActivityStreams"></a><a name="das"></a>

Mediante la característica de flujos de actividad de la base de datos, puede supervisar flujos de actividad de la base de datos prácticamente en tiempo real.

**Topics**
+ [Información general sobre flujos de actividad de la base de datos](#DBActivityStreams.Overview)
+ [Configuración de la auditoría unificada para Oracle Database](DBActivityStreams.configuring-auditing.md)
+ [Configuración de la política de auditoría para Amazon RDS para Microsoft SQL Server](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [Inicio de una secuencia de actividades de la base de datos](DBActivityStreams.Enabling.md)
+ [Modificación de una secuencia de actividades de la base de datos para Amazon RDS](DBActivityStreams.Modifying.md)
+ [Obtención del estado de un flujo de actividad de la base de datos](DBActivityStreams.Status.md)
+ [Detención de un flujo de actividad de la base de datos](DBActivityStreams.Disabling.md)
+ [Monitoreo de secuencias de actividades de la base de datos](DBActivityStreams.Monitoring.md)
+ [Ejemplos de políticas de IAM para flujos de actividad de base de datos](DBActivityStreams.ManagingAccess.md)

## Información general sobre flujos de actividad de la base de datos
<a name="DBActivityStreams.Overview"></a>

Como administrador de base de datos de Amazon RDS, debe proteger su base de datos y cumplir los requisitos normativos y de conformidad. Una estrategia es integrar flujos de actividad de la base de datos con sus herramientas de monitoreo. De esta manera, monitoriza y configura alarmas para la actividad de auditoría en su base de datos.

Las amenazas de seguridad son tanto externas como internas. Para protegerse contra amenazas internas, puede controlar el acceso del administrador a los flujos de datos mediante la configuración de la característica de flujos de actividad de la base de datos. Los DBA de Amazon RDS no tienen acceso a la recopilación, transmisión, almacenamiento ni procesamiento de los flujos.

**Contents**
+ [Cómo funcionan los flujos de actividad de la base de datos](#DBActivityStreams.Overview.how-they-work)
+ [Auditoría en Oracle Database y Microsoft SQL Server Database](#DBActivityStreams.Overview.auditing)
  + [Auditoría unificada en la base de datos de Oracle](#DBActivityStreams.Overview.unified-auditing)
  + [Auditoría en Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
  + [Campos de auditoría no nativos para Oracle Database y SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [Anulación del grupo de parámetros de base de datos](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [Modo asíncrono para flujos de actividad de la base de datos](#DBActivityStreams.Overview.sync-mode)
+ [Requisitos y limitaciones de los flujos de actividad de la base de datos](#DBActivityStreams.Overview.requirements)
+ [Disponibilidad en regiones y versiones](#DBActivityStreams.RegionVersionAvailability)
+ [Clases de instancia de base de datos admitidas para los flujos de actividad de la base de datos](#DBActivityStreams.Overview.requirements.classes)

### Cómo funcionan los flujos de actividad de la base de datos
<a name="DBActivityStreams.Overview.how-they-work"></a>

Amazon RDS envía actividades a un flujo de datos de Amazon Kinesis prácticamente en tiempo real. El flujo de Kinesis se crea automáticamente. Desde Kinesis, puede configurar servicios de AWS como Amazon Data Firehose y AWS Lambda para utilizar el flujo y almacenar los datos.

**importante**  
La característica de flujo de actividad de la base de datos en Amazon RDS se puede utilizar de forma gratuita, pero Amazon Kinesis cobra por un flujo de datos. Para obtener más información, consulte los [Precios de Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).

Puede configurar aplicaciones para administrar la conformidad para consumir los flujos de actividad de la base de datos. Esas aplicaciones pueden utilizar el flujo para generar alertas y auditar la actividad la base de datos.

Amazon RDS admite flujos de actividad de bases de datos en implementaciones multi-AZ. En este caso, los flujos de actividad de la base de datos auditan tanto las instancias principales como en espera.

### Auditoría en Oracle Database y Microsoft SQL Server Database
<a name="DBActivityStreams.Overview.auditing"></a>

La auditoría es el monitoreo y registro de acciones de base de datos configuradas. Amazon RDS no captura las actividades de la base de datos de forma predeterminada. Cree y administre usted mismo políticas de auditoría en la base de datos.

**Topics**
+ [Auditoría unificada en la base de datos de Oracle](#DBActivityStreams.Overview.unified-auditing)
+ [Auditoría en Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
+ [Campos de auditoría no nativos para Oracle Database y SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [Anulación del grupo de parámetros de base de datos](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Auditoría unificada en la base de datos de Oracle
<a name="DBActivityStreams.Overview.unified-auditing"></a>

En una base de datos de Oracle, una *política de auditoría unificada* es un grupo con nombre de configuración de auditoría que se puede utilizar para auditar un aspecto del comportamiento del usuario. Una política puede ser tan simple como auditar las actividades de un solo usuario. También puede crear políticas de auditoría complejas que utilicen condiciones.

Una base de datos de Oracle escribe registros de auditoría, incluidos registros de auditoría `SYS`, en los *seguimientos de auditoría unificada*. Por ejemplo, si se produce un error durante una instrucción `INSERT`, la auditoría estándar indica el número de error y el SQL que se ejecutó. El seguimiento de auditoría reside en una tabla de solo lectura en el esquema `AUDSYS`. Para acceder a estos registros, consulte la vista `UNIFIED_AUDIT_TRAIL` del diccionario de datos.

Por lo general, se configuran flujos de actividad de la base de datos de la siguiente manera:

1. Cree una política de auditoría de base de datos de Oracle mediante el comando `CREATE AUDIT POLICY`.

   La base de datos de Oracle genera registros de auditoría.

1. Habilite la política de auditoría mediante el comando `AUDIT POLICY`.

1. Configure los flujos de actividad de la base de datos.

   Solo las actividades que coincidan con las políticas de auditoría de la base de datos de Oracle se capturan y envían al flujo de datos de Amazon Kinesis. Cuando se habilitan los flujos de actividad de la base de datos, un administrador de base de datos de Oracle no puede modificar la política de auditoría ni eliminar registros de auditoría.

Para obtener más información sobre las políticas de auditoría unificadas, consulte la sección [acerca de las actividades de auditoría con políticas de auditoría unificadas y AUDIT](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0) en la *guía de seguridad de la base de datos de Oracle*.

#### Auditoría en Microsoft SQL Server
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

El flujo de actividad de la base de datos utiliza la característica SQLAudit para auditar la base de datos de SQL Server.

La instancia de RDS para SQL Server contiene lo siguiente:
+ Auditoría de servidor: la auditoría de SQL server recopila una sola instancia de acciones a nivel de servidor o base de datos y un grupo de acciones para supervisar. Las auditorías a nivel de servidor `RDS_DAS_AUDIT` y `RDS_DAS_AUDIT_CHANGES` las administra RDS.
+ Especificación de auditoría del servidor: la especificación de auditoría del servidor registra los eventos a nivel de servidor. Puede modificar la especificación `RDS_DAS_SERVER_AUDIT_SPEC`. Esta especificación está vinculada a la auditoría del servidor `RDS_DAS_AUDIT`. La especificación `RDS_DAS_CHANGES_AUDIT_SPEC` la administra RDS.
+ Especificación de auditoría de base de datos: la especificación de auditoría de base de datos registra los eventos a nivel de base de datos. Puede crear una especificación de auditoría de base de datos `RDS_DAS_DB_<name>` y vincularla a la auditoría del servidor `RDS_DAS_AUDIT`.

Puede configurar los flujos de actividad de la base de datos mediante la consola o la CLI. Por lo general, se configuran flujos de actividad de la base de datos de la siguiente manera:

1. (Opcional) Cree una especificación de auditoría de base de datos con el comando `CREATE DATABASE AUDIT SPECIFICATION` y vincúlela a la auditoría `RDS_DAS_AUDIT` del servidor. 

1. (Opcional) Modifique la especificación de auditoría del servidor con el comando `ALTER SERVER AUDIT SPECIFICATION` y defina las políticas. 

1. Active las políticas de auditoría de base de datos y servidor. Por ejemplo:

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

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

1. Configure los flujos de actividad de la base de datos.

   Solo las actividades que coincidan con las políticas de auditoría de base de datos y servidor se capturan y envían a Amazon Kinesis Data Streams. Cuando se habilitan los flujos de actividad de base de datos y las políticas están bloqueadas, un administrador de base de datos no puede modificar la política de auditoría ni eliminar registros de auditoría. 
**importante**  
Si la especificación de auditoría de base de datos para una base de datos específica está habilitada y la política está bloqueada, no se puede eliminar la base de datos.

Para obtener más información sobre la auditoría de SQL Server, consulte [SQL Server Audit Components](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) (Componentes de auditoría de SQL Server) en la *documentación de Microsoft SQL Server*.



#### Campos de auditoría no nativos para Oracle Database y SQL Server
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

Cuando inicia un flujo de actividad de la base de datos, cada evento de base de datos genera un evento de flujo de actividad correspondiente. Por ejemplo, un usuario de base de datos puede ejecutar las instrucciones `SELECT` y `INSERT`. La base de datos audita estos eventos y los envía a un flujo de datos de Amazon Kinesis.

Los eventos se representan como objetos JSON en el flujo. Un objeto JSON contiene un `DatabaseActivityMonitoringRecord`, que contiene una matriz `databaseActivityEventList`. Los campos predefinidos en la matriz incluyen `class`, `clientApplication` y `command`.

De forma predeterminada, un flujo de actividad no incluye campos de auditoría nativos del motor. Puede configurar Amazon RDS para Oracle y SQL Server para que incluyan estos campos adicionales en el objeto JSON `engineNativeAuditFields`.

En Oracle Database, la mayoría de los eventos del seguimiento de auditoría unificado se asignan a campos del flujo de actividad de datos de RDS. Por ejemplo, el campo `UNIFIED_AUDIT_TRAIL.SQL_TEXT` en los mapas unificados de auditoría al campo `commandText` en un flujo de actividad de la base de datos. Sin embargo, los campos de auditoría de la base de datos de Oracle, como `OS_USERNAME`, no se asignan a campos predefinidos en un flujo de actividad de la base de datos.

En SQL Server, la mayoría de los campos del evento que registra SQLAudit se asignan a los campos del flujo de actividad de la base de datos de RDS. Por ejemplo, el campo `code` de `sys.fn_get_audit_file` en la auditoría se asigna al campo `commandText` en un flujo de actividad de la base de datos. Sin embargo, los campos de auditoría de la base de datos de SQL Server, como `permission_bitmask`, no se asignan a campos predefinidos en un flujo de actividad de la base de datos.

Para obtener más información acerca de databaseActivityEventList, consulte [Matriz JSON databaseActivityEventList para flujos de actividad de base de datos](DBActivityStreams.AuditLog.databaseActivityEventList.md).

#### Anulación del grupo de parámetros de base de datos
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

Por lo general, se adjunta un grupo de parámetros para activar la auditoría unificada en RDS para Oracle. Sin embargo, los flujos de actividad de la base de datos requieren una configuración adicional. Para mejorar la experiencia del cliente, Amazon RDS realiza lo siguiente:
+ Si activa un flujo de actividad, RDS para Oracle ignora los parámetros de auditoría del grupo de parámetros.
+ Si desactiva un flujo de actividad, RDS para Oracle deja de ignorar los parámetros de auditoría.

El flujo de actividad de la base de datos para SQL Server es independiente de los parámetros que establezca en la opción de auditoría de SQL.

### Modo asíncrono para flujos de actividad de la base de datos
<a name="DBActivityStreams.Overview.sync-mode"></a>

Los flujos de actividad en Amazon RDS siempre son asíncronos. Cuando una sesión de la base de datos genere un evento de flujo de actividad, la sesión volverá de inmediato a las actividades normales. En segundo plano, Amazon RDS convierte el evento de flujo de actividad en un registro permanente.

Si se produce un error en la tarea en segundo plano, Amazon RDS generará un evento. Dicho evento marca el principio y el fin de todo período de tiempo en el que podrían haberse perdido registros de eventos de la secuencia de actividades. El modo asíncrono favorece el rendimiento de la base de datos con respecto a la precisión de la secuencia de actividades.

### Requisitos y limitaciones de los flujos de actividad de la base de datos
<a name="DBActivityStreams.Overview.requirements"></a>

En RDS, los flujos de actividad de la base de datos tienen los límites y los requisitos siguientes:
+ Los flujos de actividad de la base de datos requieren Amazon Kinesis.
+ Se requiere AWS Key Management Service (AWS KMS) porque los flujos de actividad de la base de datos siempre están cifrados.
+ La aplicación de cifrado adicional al flujo de datos de Amazon Kinesis no es compatible con los flujos de actividad de la base de datos, que ya están cifrados con su clave AWS KMS.
+ Usted mismo debe crear y administrar las políticas de auditoría. A diferencia de Amazon Aurora, RDS para Oracle no captura las actividades de la base de datos de forma predeterminada.
+ Usted mismo debe crear y administrar las políticas o especificaciones de la auditoría. A diferencia de Amazon Aurora, Amazon RDS no captura las actividades de la base de datos de forma predeterminada.
+ En una implementación multi-AZ, inicie el flujo de actividad de la base de datos solo en la instancia de base de datos principal. El flujo de actividad audita automáticamente las instancias de base de datos principal y en espera. No hace falta realizar ningún otro paso durante una conmutación por error.
+ Al cambiar el nombre de una instancia de base de datos, no se crea un flujo de Kinesis nuevo.
+ No se admiten CDB en RDS para Oracle.
+ No se admiten réplicas de lectura.

### Disponibilidad en regiones y versiones
<a name="DBActivityStreams.RegionVersionAvailability"></a>

La disponibilidad de las características varía según las versiones específicas de cada motor de base de datos y entre Regiones de AWS. Para obtener más información sobre la disponibilidad de versiones y regiones de los flujos de actividades de base de datos, consulte [Regiones y motores de base de datos admitidos para los flujos de actividad de bases de datos en Amazon RDS](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md).

### Clases de instancia de base de datos admitidas para los flujos de actividad de la base de datos
<a name="DBActivityStreams.Overview.requirements.classes"></a>

Para RDS para Oracle, puede utilizar flujos de actividad de bases de datos con las siguientes clases de instancias de base de datos:
+ 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

Para RDS para SQL Server, puede utilizar flujos de actividad de bases de datos con las siguientes clases de instancias de base de datos:
+ 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

Para obtener más información sobre los tipos de clases de instancia, consulte [Clases de instancia de base de datos de ](Concepts.DBInstanceClass.md).

# Configuración de la auditoría unificada para Oracle Database
<a name="DBActivityStreams.configuring-auditing"></a>

Al configurar la auditoría unificada para usarse con flujos de actividad de la base de datos, son posibles las siguientes situaciones:
+ La auditoría unificada no está configurada para la base de datos de Oracle.

  En este caso, cree nuevas políticas con el comando `CREATE AUDIT POLICY` y, después, actívelas con el comando `AUDIT POLICY`. En el ejemplo siguiente, se crea y activa una política para supervisar usuarios con privilegios y roles específicos.

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

  Para obtener instrucciones completas, consulte [Configuring Audit Policies](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-22CDB667-5AA2-4051-A262-FBD0236763CB) en la documentación de Oracle Database.
+ La auditoría unificada está configurada para la base de datos de Oracle.

  Al activar un flujo de actividad de la base de datos, RDS for Oracle borra automáticamente los datos de auditoría existentes. También revoca los privilegios de seguimiento de auditoría. RDS for Oracle ya no puede hacer lo siguiente:
  + Depure registros de traza de auditoría unificados.
  + agregar, eliminar ni modificar la política de auditoría unificada
  + actualizar la última marca temporal archivada.
**importante**  
Le recomendamos realizar una copia de seguridad de los datos de auditoría antes de activar un flujo de actividad de la base de datos.

  Para obtener una descripción de la vista `UNIFIED_AUDIT_TRAIL`, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162). Si tiene una cuenta con Oracle Support, consulte [How To Purge The UNIFIED AUDIT TRAIL](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1582627_1.html).

# Configuración de la política de auditoría para Amazon RDS para Microsoft SQL Server
<a name="DBActivityStreams.configuring-auditing-SQLServer"></a>

Una instancia de base de datos de SQL Server tiene la auditoría del servidor `RDS_DAS_AUDIT`, que administra Amazon RDS. Puede definir políticas para registrar los eventos del servidor en la especificación de auditoría del servidor `RDS_DAS_SERVER_AUDIT_SPEC`. Puede crear una especificación de auditoría de base de datos, por ejemplo `RDS_DAS_DB_<name>`, y definir políticas para registrar eventos de la base de datos. Para obtener la lista de grupos de acciones de auditoría a nivel de servidor y base de datos, consulte [SQL Server Audit Action Groups and Actions](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions) (Grupos de acciones y acciones de auditoría de SQL Server) en la *documentación de Microsoft SQL Server*.

La política de servidor predeterminada solo supervisa los inicios de sesión fallidos y los cambios en cualquier especificación de auditoría de bases de datos o servidores para los flujos de actividad de las bases de datos.

Estas son algunas de las limitaciones de la auditoría y las especificaciones de auditoría:
+ No puede modificar las especificaciones de auditoría del servidor o la base de datos cuando el flujo de actividad de la base de datos esté *bloqueado*.
+ No puede modificar la especificación de auditoría `RDS_DAS_AUDIT` del servidor.
+ No puede modificar la auditoría de SQL Server `RDS_DAS_CHANGES` ni su especificación de auditoría de servidor relacionada `RDS_DAS_CHANGES_AUDIT_SPEC`.
+ Al crear una especificación de auditoría de base de datos, debe utilizar el formato `RDS_DAS_DB_<name>`; por ejemplo,`RDS_DAS_DB_databaseActions`.

**importante**  
Para clases de instancias más pequeñas, recomendamos que solo audite los datos necesarios. Esto ayuda a reducir el impacto en el rendimiento de los flujos de actividad de las bases de datos en estas clases de instancias.

El siguiente código de ejemplo modifica la especificación de auditoría del servidor `RDS_DAS_SERVER_AUDIT_SPEC` y audita todas las acciones de cierre de sesión y de inicio de sesión que se realizan correctamente:

```
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 );
```

El siguiente código de ejemplo crea una especificación de auditoría de base de datos `RDS_DAS_DB_database_spec` y la asocia a la auditoría del servidor `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);
```

Una vez configuradas las especificaciones de auditoría, asegúrese de que las especificaciones `RDS_DAS_SERVER_AUDIT_SPEC` y `RDS_DAS_DB_<name>` estén configuradas en el estado `ON`. Ahora pueden enviar los datos de auditoría al flujo de actividad de su base de datos.

# Inicio de una secuencia de actividades de la base de datos
<a name="DBActivityStreams.Enabling"></a>

Cuando inicie un flujo de actividad para la instancia de base de datos, todos los eventos de actividad de la base de datos que haya configurado en la política de auditoría generarán un evento del flujo de actividad. Los eventos de acceso se generan a partir de comandos SQL como `CONNECT` y `SELECT`. Los eventos de cambio se generan a partir de comandos SQL como `CREATE` y `INSERT`.

**importante**  
La activación de un flujo de actividad para una instancia de Oracle Database borra los datos de auditoría existentes. También revoca los privilegios de seguimiento de auditoría. Cuando el flujo está habilitado, RDS para Oracle ya no puede hacer lo siguiente:  
Depure registros de traza de auditoría unificados.
agregar, eliminar ni modificar la política de auditoría unificada
actualizar la última marca temporal archivada

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

**Inicio de un flujo de actividad de la base de datos**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Databases (Bases de datos)**.

1. Elija la instancia de base de datos de Amazon RDS en la que desea iniciar un flujo de actividad. En una implementación Multi-AZ, inicie el flujo solo en la instancia principal. El flujo de actividad audita automáticamente las instancias de base de datos principal y en espera.

1. En **Actions (Acciones)**, elija **Start activity stream (Iniciar secuencia de actividades)**. 

   Aparecerá la ventana **Start database activity stream: ***name* (Iniciar el flujo de actividad de la base de datos: nombre), donde *name* (nombre) equivale a su instancia de RDS.

1. Ingrese la siguiente configuración:
   + En **AWS KMS key**, seleccione una clave de la lista de AWS KMS keys.

     Amazon RDS utiliza la clave de KMS para cifrar la clave que, a su vez, cifra la actividad de la base de datos. Elija una clave de KMS distinta de la clave predeterminada. Para obtener más información sobre las claves de cifrado y AWS KMS, consulte [¿Qué es AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) en la *guía para desarrolladores de AWS Key Management Service*.
   + En **Eventos de actividades de base de datos**, elija **Habilitar campos de auditoría nativos de Oracle** para incluir campos de auditoría específicos del motor.
   + Elija **Immediately** (De inmediato).

     Cuando elige **Immediately (De inmediato)**, la instancia de RDS se reinicia de inmediato. Si elige **During the next maintenance window (Durante el siguiente periodo de mantenimiento)**, la instancia de RDS no se reinicia de inmediato. En este caso, la secuencia de actividades de la base de datos no se inicia hasta la siguiente ventana de mantenimiento.

1. Seleccione **Start database activity stream** (Iniciar secuencia de actividades de base de datos).

   El estado la base de datos muestra que el flujo de actividad se está iniciando.
**nota**  
Si aparece el error `You can't start a database activity stream in this configuration`, compruebe [Clases de instancia de base de datos admitidas para los flujos de actividad de la base de datos](DBActivityStreams.md#DBActivityStreams.Overview.requirements.classes) para ver si su instancia de RDS utiliza una clase de instancia compatible.

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

Para empezar a transmitir la actividad de la base de datos de una instancia de base de datos, configure la base de datos mediante el comando [start-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/start-activity-stream.html) de la AWS CLI.
+ `--resource-arn arn`: especifica el nombre de recurso de Amazon (ARN) de la instancia de base de datos.
+ `--kms-key-id key`: especifica el identificador de clave KMS para cifrar mensajes en el flujo de actividad de la base de datos. El identificador de clave de KMS AWS es el ARN clave, el ID de clave, el ARN de alias o el nombre de alias de la AWS KMS key.
+ `--engine-native-audit-fields-included`: incluye campos de auditoría unificados específicos del motor en el flujo de datos. Para excluir estos campos, especifique `--no-engine-native-audit-fields-included` (predeterminada).

El siguiente ejemplo inicia un flujo de actividad de la base de datos para una instancia de base de datos en modo asíncrono.

Para Linux, macOS o 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
```

Para 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 ]

Para iniciar flujos de actividad de base de datos de una instancia de base de datos, configure la instancia mediante la operación [StartActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartActivityStream.html).

Llame a la acción con los siguientes parámetros:
+ `Region`
+ `KmsKeyId`
+ `ResourceArn`
+ `Mode`
+ `EngineNativeAuditFieldsIncluded`

------

# Modificación de una secuencia de actividades de la base de datos para Amazon RDS
<a name="DBActivityStreams.Modifying"></a>

Es posible que desee personalizar la política de auditoría de Amazon RDS cuando se inicie el flujo de actividad. Si no quiere perder tiempo ni datos deteniendo la secuencia de actividades, puede cambiar el *estado de la política de auditoría* a cualquiera de las siguientes opciones:

**Locked (Bloqueado) (predeterminado)**  
Las políticas de auditoría de la base de datos son de solo lectura.

**Unlocked (Desbloqueado)**  
Las políticas de auditoría de la base de datos son de lectura/escritura.

Los pasos básicos son los siguientes:

1. Cambie el estado de la política de auditoría a desbloqueado.

1. Personalice su política de auditoría.

1. Cambie el estado de la política de auditoría a bloqueado.

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

**Para cambiar el estado de la política de auditoría de la secuencia de actividades**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, elija **Databases** (Bases de datos).

1. En **Actions (Acciones)**, elija **Modify database activity stream (Modificar secuencia de actividades de la base de datos)**. 

   Aparece la ventana **Modify database activity stream: *name*(Modificar secuencia de actividad de la base de datos: nombre)**, donde *name* es su instancia de RDS.

1. Elija cualquiera de las siguientes opciones:  
**Locked (Bloqueado)**  
Cuando se bloquea la política de auditoría, pasa a ser de solo lectura. No puede editar la política de auditoría a menos que la desbloquee o detenga la secuencia de actividades.  
**Unlocked (Desbloqueado)**  
Al desbloquear la política de auditoría, pasa a ser de lectura/escritura. Puede editar su política de auditoría mientras se inicia el flujo de actividades.

1. Elija **Modify DB activity stream (Modificar flujo de actividades de la base de datos)**.

   El estado de Amazon RDS muestra **Configurando el flujo de actividad**.

1. (Opcional) Elija el enlace de la instancia de base de datos. A continuación, elija la pestaña **Configuration (Configuración)**.

   El campo **Audit policy status (Estado de política de auditoría)** muestra uno de los siguientes valores:
   + **Locked (Bloqueado)**
   + **Unlocked (Desbloqueado)**
   + **Locking policy (Política de bloqueo)**
   + **Unlocking policy (Política de desbloqueo)**

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

Para modificar el estado del flujo de actividad de una instancia de base de datos, utilice el comando [modify-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-activity-stream.html) de la AWS CLI.


****  

| Opción | ¿Obligatorio? | Descripción | 
| --- | --- | --- | 
|  `--resource-arn my-instance-ARN`  |  Sí  |  El nombre de recurso de Amazon (ARN) de la instancia de base de datos de RDS.  | 
|  `--audit-policy-state`  |  No  |  El nuevo estado de la política de auditoría para el flujo de actividades de la base de datos en su instancia: `locked` o `unlocked`.  | 

El siguiente ejemplo desbloquea la política de auditoría de la secuencia de actividades iniciada en *my-instance-ARN*.

Para Linux, macOS o:Unix

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

En:Windows

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

En el siguiente ejemplo, se describe la instancia *my-instance*. El resultado de ejemplo parcial muestra que la política de auditoría está desbloqueada.

```
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 de RDS
<a name="DBActivityStreams.Modifying-collapsible-section-E3"></a>

Para modificar el estado de la política de flujo de actividades de la base de datos, utilice la operación [ModifyActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyActivityStream.html).

Llame a la acción con los siguientes parámetros:
+ `AuditPolicyState`
+ `ResourceArn`

# Obtención del estado de un flujo de actividad de la base de datos
<a name="DBActivityStreams.Status"></a>

Puede obtener el estado de un flujo de actividad para su instancia de base de datos de Amazon RDS mediante la consola o AWS CLI.

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

**Obtención del estado de un flujo de actividad de la base de datos**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, elija **Databases (Bases de datos)** y, luego, el enlace de la instancia de base de datos.

1. Elija la pestaña **Configuración** y consulte el estado en **Secuencia de actividades de base de datos**.

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

Puede usar la configuración del flujo de actividad para una instancia de base de datos como respuesta a una solicitud [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) de la CLI.

En el siguiente ejemplo, se describe *my-instance*.

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

El ejemplo siguiente muestra una respuesta JSON. Se muestran los siguientes campos:
+ `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 de RDS
<a name="DBActivityStreams.Status-collapsible-section-S3"></a>

Puede usar la configuración del flujo de actividad de un una base de datos como respuesta a una operación [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html).

# Detención de un flujo de actividad de la base de datos
<a name="DBActivityStreams.Disabling"></a>

Puede detener una secuencia de actividades mediante la consola o AWS CLI.

Si elimina su instancia de base de datos de Amazon RDS, el flujo de actividad se detiene y el flujo subyacente de Amazon Kinesis se elimina automáticamente.

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

**Para desactivar una secuencia de actividades**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Databases (Bases de datos)**.

1. Elija una base de datos cuyo flujo de actividad de la base de datos quiera detener.

1. En **Actions (Acciones)**, elija **Stop activity stream (Detener secuencia de actividades)**. Se visualizará la ventana **Database Activity Stream (Secuencia de actividades de base de datos)**.

   1. Elija **Immediately** (De inmediato).

      Cuando elige **Immediately (De inmediato)**, la instancia de RDS se reinicia de inmediato. Si elige **During the next maintenance window** (Durante el siguiente periodo de mantenimiento), la instancia de RDS no se reinicia de inmediato. En este caso, el flujo de actividad de la base de datos no se detiene hasta el siguiente periodo de mantenimiento.

   1. Elija **Continue**.

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

Para detener flujos de actividad de la base de datos de su base de datos, configure la instancia de base de datos ejecutando el comando [stop-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/stop-activity-stream.html) de AWS CLI. Identifique la región de AWS de la instancia de base de datos mediante el parámetro `--region`. El parámetro `--apply-immediately` es opcional.

Para Linux, macOS o:Unix

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

En:Windows

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

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

Para detener los flujos de actividad la base de datos, configure el la instancia de base de datos mediante la operación [StopActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StopActivityStream.html). Identifique la región de AWS de la instancia de base de datos mediante el parámetro `Region`. El parámetro `ApplyImmediately` es opcional.

# Monitoreo de secuencias de actividades de la base de datos
<a name="DBActivityStreams.Monitoring"></a>

Los flujos de actividad de la base de datos monitorean y notifican las actividades. La secuencia de actividades se recopila y se transmite a Amazon Kinesis. Desde Kinesis, puede monitorear la secuencia de actividad, o bien otros servicios y aplicaciones pueden consumir la secuencia de actividades para un análisis posterior. Puede encontrar el nombre del flujo de Kinesis subyacente mediante el comando `describe-db-instances` de la AWS CLI o la operación de la API de RDS `DescribeDBInstances`.

Amazon RDS administra el flujo de Kinesis de la siguiente manera:
+ Amazon RDS crea el flujo de Kinesis automáticamente con un periodo de retención de 24 horas. 
+  Amazon RDS escala el flujo de Kinesis si es necesario. 
+  Si detiene el flujo de actividad de la base de datos o elimina la instancia de base de datos, Amazon RDS elimina el flujo de Kinesis. 

Las categorías de actividad siguientes se monitorizan y se ponen en el registro de auditoría de secuencias de actividades:
+ **Comandos SQL**: todos los comandos SQL se auditan, así como las instrucciones preparadas, las funciones integradas y las funciones en lenguaje de procedimientos para SQL (PL/SQL). Las llamadas a procedimientos almacenados se auditan. Cualquier instrucción SQL emitida dentro de procedimientos o funciones almacenados también se auditan.
+ **Otra información de la base de datos**: la actividad monitoreada incluye la instrucción SQL completa, el recuento de las filas afectadas de los comandos DML, los objetos a los que se accede y el nombre único de la base de datos. Los flujos de actividad de la base de datos también monitorean las variables de enlace y los parámetros del procedimiento almacenados. 
**importante**  
El texto SQL completo de cada instrucción está visible en el registro de auditoría de secuencia de actividades, incluida la información confidencial. Sin embargo, las contraseñas de usuario de base de datos se redactan siOracle las puede determinar a partir del contexto, tal y como pasa con la siguiente instrucción SQL.   

  ```
  ALTER ROLE role-name WITH password
  ```
+ **Información de conexión**: la actividad monitorizada incluye la información de sesión y de red, el ID de proceso del servidor y los códigos de salida.

Si un flujo de actividad tiene un error mientras monitorea una instancia de base de datos, se lo notificará mediante eventos RDS.

En las siguientes secciones, puede acceder a los flujos de actividad de base de datos, auditarlos y procesarlos.

**Topics**
+ [Acceso a un flujo de actividad desde Amazon Kinesis](DBActivityStreams.KinesisAccess.md)
+ [Ejemplos y contenido sobre el registro de auditoría en flujos de actividad de bases de datos](DBActivityStreams.AuditLog.md)
+ [Matriz JSON databaseActivityEventList para flujos de actividad de base de datos](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [Procesamiento de un flujo de actividad de la base de datos mediante SDK de AWS](DBActivityStreams.CodeExample.md)

# Acceso a un flujo de actividad desde Amazon Kinesis
<a name="DBActivityStreams.KinesisAccess"></a>

Cuando habilite un flujo de actividad para una base de datos, se creará un flujo de Kinesis para usted. En Kinesis podrá monitorizar la actividad de la base de datos en tiempo real. Para profundizar en el análisis de la actividad de la base de datos, puede conectar su secuencia de Kinesis a aplicaciones de consumidor. También puede conectar el flujo de datos con aplicaciones de administración de conformidad como Security Guardium de IBM o SecureSphere Database Audit and Protection de Imperva.

Puede acceder a su transmisión de Kinesis desde la consola de RDS o la consola de Kinesis.

**Para acceder a una secuencia de actividades desde Kinesis utilizando la consola de RDS**

1. Abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, elija **Databases** (Bases de datos).

1. Elija la instancia de base de datos de Amazon RDS en la que desea iniciar un flujo de actividad.

1. Elija **Configuration (Configuración)**.

1. En **Database activity stream** (Secuencia de actividad de base de datos), seleccione el enlace en **Kinesis stream** (Secuencia de Kinesis).

1. En la colsola de Kinesis, elija **Monitoring** (Supervisión) para empezar a observar la actividad de la base de datos.

**Para acceder a una secuencia de actividades desde Kinesis utilizando la consola de Kinesis**

1. Abra la consola de Kinesis en [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis).

1. Elija la secuencia de actividades en la lista de secuencias de Kinesis.

   El nombre de un flujo de actividad consta de un prefijo `aws-rds-das-db-` seguido del ID de recurso de la base datos. A continuación se muestra un ejemplo. 

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

   Para utilizar la consola de Amazon RDS para encontrar el ID de recurso del la base de datos, elija su instancia de base de datos en la lista de bases de datos y, luego, elija la pestaña **Configuration (Configuración)**.

   Para utilizar la AWS CLI para encontrar el nombre completo del flujo de Kinesis de un flujo de actividad, utilice una solicitud [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) de la CLI y anote el valor de `ActivityStreamKinesisStreamName` en la respuesta.

1. Elija **Monitoring (Monitorización)** para empezar a observar la actividad de la base de datos.

Para obtener más información acerca del uso de Amazon Kinesis, consulte [¿Qué es Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html).

# Ejemplos y contenido sobre el registro de auditoría en flujos de actividad de bases de datos
<a name="DBActivityStreams.AuditLog"></a>

Los eventos monitoreados se representan en el flujo de actividad de la base de datos como cadenas JSON. La estructura está formada por un objeto JSON que contiene un `DatabaseActivityMonitoringRecord`, el cual, a su vez, contiene una matriz `databaseActivityEventList` de eventos de actividad. 

**nota**  
Para los flujos de actividad de la base de datos, la matriz JSON de `paramList` no incluye valores nulos de las aplicaciones de Hibernate.

**Topics**
+ [Ejemplos de un registro de auditoría de flujo de actividad de la base de datos](#DBActivityStreams.AuditLog.Examples)
+ [Objeto JSON DatabaseActivityMonitoringRecords](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [Objeto JSON databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)

## Ejemplos de un registro de auditoría de flujo de actividad de la base de datos
<a name="DBActivityStreams.AuditLog.Examples"></a>

A continuación mostramos registros de auditoría JSON descifrados de muestra de registros de eventos de actividad.

**Example Registro de eventos de actividad de una instrucción CONNECT SQL**  
El siguiente registro de eventos de actividad muestra un inicio de sesión con el uso de una instrucción SQL `CONNECT` (`command`) por parte de un JDBC Thin Client (`clientApplication`) para su base de datos 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
    }
}
```
El siguiente registro de eventos de actividad muestra un error de inicio de sesión en la base de datos de 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 flujo de actividad de la base de datos no está habilitado, el último campo del documento JSON es `"engineNativeAuditFields": { }`. 

**Example Registro de evento de actividad de una instrucción CREATE TABLE**  
En el siguiente ejemplo, se muestra un evento `CREATE TABLE` para su base de datos 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
    }
}
```
En el siguiente ejemplo, se muestra un evento `CREATE TABLE` de la base de datos 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 Registro de evento de actividad de una instrucción SELECT de Aurora PostgreSQL**  
En el siguiente ejemplo, se muestra un evento `SELECT` para su base de datos 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
    }
}
```
En el siguiente ejemplo, se muestra un evento `SELECT` para su base de datos 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"
            }
        }
    ]
}
```

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

Los registros de eventos de actividad de la base de datos se encuentran en un objeto JSON que contiene la siguiente información.


****  

| Campo JSON | Tipo de datos | Descripción | 
| --- | --- | --- | 
|  `type`  | string |  Tipo de registro JSON. El valor es `DatabaseActivityMonitoringRecords`.  | 
| version | string |  La versión de los registros de monitoreo de actividad de la base de datos. La base de datos Oracle utiliza la versión 1.3 y SQL Server utiliza la versión 1.4. Estas versiones del motor introducen el objeto JSON engineNativeAuditFields.  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | cadena |  Un objeto JSON que contiene los eventos de actividad.  | 
| key | cadena | Una clave de cifrado que se utiliza para descifrar el [Matriz de JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md).  | 

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

El objeto JSON `databaseActivityEvents` contiene la siguiente información.

### Campos de nivel superior en el registro JSON
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 Cada evento del registro de auditoría se envuelve dentro de un registro en formato JSON. Este registro contiene los siguientes campos. 

**type**  
 Este campo siempre tiene el valor `DatabaseActivityMonitoringRecords`. 

**version**  
 Este campo representa la versión del protocolo o contrato de datos del flujo de actividad de la base de datos. Define los campos que están disponibles.

**databaseActivityEvents**  
 Una cadena cifrada que representa uno o más eventos de actividad. Se representa como una matriz de bytes base64. Al descifrar la cadena, el resultado es un registro en formato JSON con campos, tal y como se muestra en los ejemplos de esta sección.

**key**  
 Clave de datos cifrada utilizada para cifrar la cadena `databaseActivityEvents`. Esta es la misma AWS KMS key que proporcionó cuando inició la secuencia de actividades de la base de datos.

 En el ejemplo siguiente se muestra el formato de este registro.

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

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

Siga estos pasos para descifrar el contenido del campo:`databaseActivityEvents`

1.  Descifrar el valor en el campo JSON `key` mediante la clave de KMS que proporcionó al iniciar la secuencia de actividades de la base de datos. Al hacerlo, se devuelve la clave de cifrado de datos en texto sin cifrar. 

1.  Decodifique en base64 el valor en el campo JSON `databaseActivityEvents` para obtener el texto cifrado, en formato binario, de la carga útil de auditoría. 

1.  Descifrar el texto cifrado binario con la clave de cifrado de datos que decodificó en el primer paso. 

1.  Descomprimir la carga útil descifrada. 
   +  La carga cifrada está en el campo `databaseActivityEvents`. 
   +  El campo `databaseActivityEventList` contiene una matriz de registros de auditoría. Los campos `type` de la matriz pueden ser `record` o `heartbeat`. 

Un registro de evento de actividad de registro de auditoría es un objeto JSON que contiene la información siguiente.


****  

| Campo JSON | Tipo de datos | Descripción | 
| --- | --- | --- | 
|  `type`  | string |  Tipo de registro JSON. El valor es `DatabaseActivityMonitoringRecord`.  | 
| instanceId | string | El identificador del recurso de instancia de base de datos. Corresponde al atributo de instancia de base de datos DbiResourceId. | 
|  [Matriz de JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | string |  Una matriz de registros de auditoría de actividad o mensajes de latido.  | 

# Matriz JSON databaseActivityEventList para flujos de actividad de base de datos
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

La carga de registro de auditoría es una matriz JSON `databaseActivityEventList` cifrada. En la tabla siguiente, se enumeran alfabéticamente los campos de cada evento de actividad de la matriz `DatabaseActivityEventList` descifrada de un registro de auditoría. 

Cuando la auditoría unificada está activada en la base de datos de Oracle, los registros de auditoría se rellenan en este nuevo seguimiento de auditoría. La vista `UNIFIED_AUDIT_TRAIL` muestra los registros de auditoría en forma tabular; para ello, recupera los registros de auditoría del seguimiento de auditoría. Cuando inicia un flujo de actividad de la base de datos, una columna en `UNIFIED_AUDIT_TRAIL` corresponde a un campo en la matriz `databaseActivityEventList`.

**importante**  
La estructura de los eventos está sujeta a cambio. Amazon RDS podría agregar nuevos campos a eventos de actividad en el futuro. En las aplicaciones que analizan los datos JSON, asegúrese de que el código puede ignorar o tomar las acciones adecuadas para nombres de campo desconocidos. 

## Campos databaseActivityEventList para Amazon RDS para Oracle
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

A continuación, encontrará campos `databaseActivityEventList` para Amazon RDS para Oracle.


| Campo | Tipo de datos | Fuente | Descripción | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  `AUDIT_TYPE` columna en `UNIFIED_AUDIT_TRAIL`  |  Clase de evento de actividad. Esto se corresponde con la `AUDIT_TYPE` columna de la vista `UNIFIED_AUDIT_TRAIL`. Los valores válidos para Amazon RDS para Oracle son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) Para obtener más información, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D) en la documentación de Oracle.  | 
|  `clientApplication`  |  string  |  `CLIENT_PROGRAM_NAME` en `UNIFIED_AUDIT_TRAIL`  |  Aplicación que el cliente ha usado para establecer conexión según notificación del cliente. No es obligatorio que el cliente notifique esta información, por lo que el valor puede ser nulo. Un valor de muestra es `JDBC Thin Client`.  | 
|  `command`  |  string  |  `ACTION_NAME` columna en `UNIFIED_AUDIT_TRAIL`  |  Nombre de la acción ejecutada por el usuario. Para comprender la acción completa, lea tanto el nombre del comando como el valor `AUDIT_TYPE`. Un valor de muestra es `ALTER DATABASE`.  | 
|  `commandText`  |  string  |  `SQL_TEXT` columna en `UNIFIED_AUDIT_TRAIL`  |  La instrucción SQL asociada con el evento Un valor de muestra es `ALTER DATABASE BEGIN BACKUP`.  | 
|  `databaseName`  |  string  |  `NAME` columna en `V$DATABASE`  |  El nombre de la base de datos.  | 
|  `dbid`  |  número  |  `DBID` columna en `UNIFIED_AUDIT_TRAIL`  |  Identificador numérico para la base de datos Un valor de muestra es `1559204751`.  | 
|  `dbProtocol`  |  string  |  N/A  |  Protocolo de la base de datos. En esta versión beta, el valor es `oracle`.  | 
|  `dbUserName`  |  string  |  `DBUSERNAME` columna en `UNIFIED_AUDIT_TRAIL`  |  Nombre del usuario de la base de datos cuyas acciones se auditaron Un valor de muestra es `RDSADMIN`.  | 
|  `endTime`  |  string  |  N/A  |  Este campo no se utiliza para RDS para Oracle y siempre es nulo.  | 
|  `engineNativeAuditFields`  |  objeto  |  `UNIFIED_AUDIT_TRAIL`  |  De forma predeterminada, este objeto está vacío. Cuando inicia el flujo de actividad con la opción `--engine-native-audit-fields-included`, este objeto incluye las siguientes columnas y sus valores: <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> Para obtener más información, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162) en la documentación de Oracle Database.  | 
|  `errorMessage`  |  string  |  N/A  |  Este campo no se utiliza para RDS para Oracle y siempre es nulo.  | 
|  `exitCode`  |  número  |  `RETURN_CODE` columna en `UNIFIED_AUDIT_TRAIL`  |  Código de error de Oracle Database generado por la acción Si la acción se realizó correctamente, el valor es `0`.  | 
|  `logTime`  |  string  |  `EVENT_TIMESTAMP_UTC` columna en `UNIFIED_AUDIT_TRAIL`  |  Marca de tiempo de la creación de la entrada de seguimiento de auditoría. Un valor de muestra es `2020-11-27 06:56:14.981404`.  | 
|  `netProtocol`  |  string  |  `AUTHENTICATION_TYPE` columna en `UNIFIED_AUDIT_TRAIL`  |  Protocolo de comunicación de red Un valor de muestra es `TCP`.  | 
|  `objectName`  |  string  |  `OBJECT_NAME` columna en `UNIFIED_AUDIT_TRAIL`  |  El nombre del objeto afectado por la acción Un valor de muestra es `employees`.  | 
|  `objectType`  |  string  |  `OBJECT_SCHEMA` columna en `UNIFIED_AUDIT_TRAIL`  |  El nombre del esquema del objeto afectado por la acción Un valor de muestra es `hr`.  | 
|  `paramList`  |  Lista   |  `SQL_BINDS` columna en `UNIFIED_AUDIT_TRAIL`  |  La lista de variables de enlace, si las hay, asociadas con `SQL_TEXT` Un valor de muestra es `parameter_1,parameter_2`.  | 
|  `pid`  |  número  |  `OS_PROCESS` columna en `UNIFIED_AUDIT_TRAIL`  |  Identificador de proceso del sistema operativo del proceso de base de datos de Oracle Un valor de muestra es `22396`.  | 
|  `remoteHost`  |  string  |  `AUTHENTICATION_TYPE` columna en `UNIFIED_AUDIT_TRAIL`  |  La dirección IP del cliente o el nombre del anfitrión desde el que se generó la sesión Un valor de muestra es `123.456.789.123`.  | 
|  `remotePort`  |  string  |  `AUTHENTICATION_TYPE` columna en `UNIFIED_AUDIT_TRAIL`  |  Número de puerto del cliente. Un valor típico en entornos de Oracle Database es `1521`.  | 
|  `rowCount`  |  número  |  N/A  |  Este campo no se utiliza para RDS para Oracle y siempre es nulo.  | 
|  `serverHost`  |  string  |  Anfitrión de base de datos  |  Dirección IP del anfitrión del servidor de base de datos. Un valor de muestra es `123.456.789.123`.  | 
|  `serverType`  |  string  |  N/A  |  Tipo de servidor de base de datos. Este valor siempre es `ORACLE`.  | 
|  `serverVersion`  |  string  |  Anfitrión de base de datos  |  La versión de Amazon RDS para Oracle, la actualización de versión (RU) y la revisión de actualización de versión (RUR) Un valor de muestra es `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`.  | 
|  `serviceName`  |  string  |  Anfitrión de base de datos  |  Nombre del servicio de Un valor de muestra es `oracle-ee`.   | 
|  `sessionId`  |  número  |  `SESSIONID` columna en `UNIFIED_AUDIT_TRAIL`  |  El identificador de sesión de la auditoría Un ejemplo es: `1894327130`.  | 
|  `startTime`  |  string  |  N/A  |  Este campo no se utiliza para RDS para Oracle y siempre es nulo.  | 
|  `statementId`  |  número  |  `STATEMENT_ID` columna en `UNIFIED_AUDIT_TRAIL`  |  ID numérico para cada instrucción ejecutada Una instrucción puede causar muchas acciones. Un valor de muestra es `142197`.  | 
|  `substatementId`  |  N/A  |  N/A  |  Este campo no se utiliza para RDS para Oracle y siempre es nulo.  | 
|  `transactionId`  |  string  |  `TRANSACTION_ID` columna en `UNIFIED_AUDIT_TRAIL`  |  El identificador de la transacción en la que se modifica el objeto Un valor de muestra es `02000800D5030000`.  | 

## Campos databaseActivityEventList para Amazon RDS para SQL Server
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

A continuación, encontrará campos `databaseActivityEventList` para Amazon RDS para SQL Server.


| Campo | Tipo de datos | Fuente | Descripción | 
| --- | --- | --- | --- | 
|  `class`  |  cadena  |  ` sys.fn_get_audit_file.class_type` asignado a `sys.dm_audit_class_type_map.class_type_desc`  |  Clase de evento de actividad. Para obtener más información, consulte [SQL Server Audit (Database Engine)](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) (SQL Server Audit [motor de base de datos]) en la documentación de Microsoft SQL Server.  | 
|  `clientApplication`  |  cadena  |  `sys.fn_get_audit_file.application_name`  |  La aplicación a la que se conecta el cliente según lo que informa el cliente (versión 14 y posteriores de SQL Server). Este campo es nulo en la versión 13 de SQL Server.  | 
|  `command`  |  cadena  |  `sys.fn_get_audit_file.action_id` asignado a `sys.dm_audit_actions.name`  |  La categoría general de la instrucción SQL. El valor de este campo depende del valor de la clase.  | 
|  `commandText`  |  cadena  |  `sys.fn_get_audit_file.statement`  |  Este campo indica la instrucción SQL.  | 
|  `databaseName`  |  cadena  |  `sys.fn_get_audit_file.database_name`  |  Nombre de la base de datos.  | 
|  `dbProtocol`  |  cadena  |  N/A  |  Protocolo de la base de datos. El valor es `SQLSERVER`.  | 
|  `dbUserName`  |  cadena  |  `sys.fn_get_audit_file.server_principal_name`  |  El usuario de base de datos para la autenticación del cliente.  | 
|  `endTime`  |  cadena  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `engineNativeAuditFields`  |  objeto  |  Cada campo de `sys.fn_get_audit_file` que no aparece en esta columna.  |  De forma predeterminada, este objeto está vacío. Cuando inicia el flujo de actividad con la opción `--engine-native-audit-fields-included`, este objeto incluye otros campos de auditoría del motor nativo que este mapa JSON no devuelve.  | 
|  `errorMessage`  |  cadena  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `exitCode`  |  entero  |  `sys.fn_get_audit_file.succeeded`  |  Indica si la acción que inició el evento se realizó correctamente. Este campo no puede ser nulo. Para todos los eventos, excepto los eventos de inicio de sesión, este campo indica si la comprobación de permisos se realizó correctamente, pero no si la operación se realizó correctamente. Entre los valores se encuentran: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  cadena  |  `sys.fn_get_audit_file.event_time`  |  Marca de tiempo del evento que registra SQL Server.  | 
|  `netProtocol`  |  cadena  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `objectName`  |  cadena  |  `sys.fn_get_audit_file.object_name`  |  Nombre del objeto de base de datos si la instrucción SQL opera en un objeto.  | 
|  `objectType`  |  cadena  |  `sys.fn_get_audit_file.class_type` asignado a `sys.dm_audit_class_type_map.class_type_desc`  |  Tipo de objeto de base de datos si la instrucción SQL opera en un tipo de objeto.  | 
|  `paramList`  |  cadena  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `pid`  |  entero  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `remoteHost`  |  cadena  |  `sys.fn_get_audit_file.client_ip`  |  La dirección IP o el nombre de host del cliente que emitió la instrucción SQL (versión 14 y posteriores de SQL Server). Este campo es nulo en la versión 13 de SQL Server.  | 
|  `remotePort`  |  entero  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `rowCount`  |  entero  |  `sys.fn_get_audit_file.affected_rows`  |  El número de filas de la tabla afectadas por la instrucción SQL (versión 14 y posteriores de SQL Server). Este campo está en la versión 13 de SQL Server.  | 
|  `serverHost`  |  cadena  |  Host de base de datos  |  Dirección IP del servidor de base de datos del host.  | 
|  `serverType`  |  cadena  |  N/A  |  Tipo de servidor de base de datos. El valor es `SQLSERVER`.  | 
|  `serverVersion`  |  cadena  |  Host de base de datos  |  La versión del servidor de base de datos, por ejemplo, 15.00.4073.23.v1.R1 para SQL Server 2017.  | 
|  `serviceName`  |  cadena  |  Host de base de datos  |  Nombre del servicio de Un valor de ejemplo es `sqlserver-ee`.  | 
|  `sessionId`  |  entero  |  `sys.fn_get_audit_file.session_id`  |  Identificador único de la sesión.  | 
|  `startTime`  |  cadena  |  N/A  |  Amazon RDS para SQL Server no utiliza este campo y el valor es nulo.  | 
|  `statementId`  |  cadena  |  `sys.fn_get_audit_file.sequence_group_id`  |  Identificador único de la instrucción SQL del cliente. El identificador es diferente para cada evento que se genera. Un valor de muestra es `0x38eaf4156267184094bb82071aaab644`.  | 
|  `substatementId`  |  entero  |  `sys.fn_get_audit_file.sequence_number`  |  Identificador para determinar el número de secuencia de una instrucción. Este identificador es útil cuando los registros grandes se dividen en varios registros.  | 
|  `transactionId`  |  entero  |  `sys.fn_get_audit_file.transaction_id`  |  Identificador de una transacción. Si no hay ninguna transacción activa, el valor es cero.  | 
|  `type`  |  cadena  |  Flujo de actividad de la base de datos generado  |  El tipo de evento. Los valores son `record` o `heartbeat`.  | 

# Procesamiento de un flujo de actividad de la base de datos mediante SDK de AWS
<a name="DBActivityStreams.CodeExample"></a>

Puede procesar una secuencia de actividades mediante programación con AWS SDK. A continuación, mostramos ejemplos de Java y Python totalmente funcionales sobre cómo puede usar registros de flujos de actividad de la base de datos para la habilitación basada en instancias.

------
#### [ 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()
```

------

# Ejemplos de políticas de IAM para flujos de actividad de base de datos
<a name="DBActivityStreams.ManagingAccess"></a>

Cualquier usuario que tenga privilegios de rol de AWS Identity and Access Management (IAM) apropiados para los flujos de actividad de la base de datos puede crear, iniciar, detener y modificar la configuración del flujo de actividad de una instancia de base de datos. Estas acciones se incluyen en el registro de auditoría de la secuencia. Como práctica recomendada de cumplimiento, le recomendamos que no proporcione estos privilegios a los DBA.

Establezca el acceso a las secuencias de actividades de base de datos mediante políticas IAM. Para obtener más información acerca de la autenticación de Amazon RDS, consulte [Administración de la identidad y el acceso en Amazon RDS](UsingWithRDS.IAM.md). Para obtener más información sobre la creación de políticas de IAM, consulte [Creación y uso de una política de IAM para el acceso a bases de datos de IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). 

**Example Política para permitir configurar secuencias de actividades de la base de datos**  
Para dar a los usuarios un acceso detallado con el fin de modificar flujos de actividad, utilice las claves de contexto de operación específica del servicio `rds:StartActivityStream` y `rds:StopActivityStream` de una política de IAM. En el siguiente ejemplo de política de IAM el usuario o rol pueden configurar secuencias de actividades.    
****  

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

**Example Política para permitir iniciar secuencias de actividades de la base de datos**  
En el siguiente ejemplo de política de IAM el usuario o rol pueden iniciar secuencias de actividades.    
****  

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

**Example Política para permitir detener secuencias de actividades de la base de datos**  
En el siguiente ejemplo de política de IAM el usuario o rol pueden detener secuencias de actividades.    
****  

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

**Example Política para rechazar iniciar secuencias de actividades de la base de datos**  
En el siguiente ejemplo de política de IAM se evita que un usuario o rol inicie secuencias de actividades.    
****  

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

**Example Política para rechazar la detención de secuencias de actividades de la base de datos**  
En el siguiente ejemplo de política de IAM se evita que un usuario o rol detenga secuencias de actividades.    
****  

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