Registro de llamadas a la API de datos de Amazon RDS con AWS CloudTrail
La API de datos de RDS (API de datos) está integrada con AWS CloudTrail, un servicio que proporciona un registro de las acciones del usuario, el rol o un servicio de AWS en la API de datos. CloudTrail captura todas las llamadas a la API para la API de datos como eventos, incluidas las llamadas procedentes de la consola de Amazon RDS y de las llamadas de código a operaciones de la API de datos. Si crea un registro de seguimiento, puede habilitar la entrega continua de eventos de CloudTrail a un bucket de Amazon S3, incluidos los eventos de la API de datos. Los datos recopilados por CloudTrail le permitirán determinar mucha información. Esta información incluye la solicitud que se hizo a la API de datos, la dirección IP desde la que se realizó la solicitud, quién hizo la solicitud, cuándo se realizó y otros detalles.
Para obtener más información acerca de CloudTrail, consulte la Guía del usuario de AWS CloudTrail.
Trabajar con información de API de datos en CloudTrail
CloudTrail se habilita en su cuenta de AWS cuando la crea. Cuando se produce una actividad compatible (eventos de administración) en la API de datos, dicha actividad se registra en un evento de CloudTrail junto con otros eventos de servicios de AWS en Historial de eventos. Puede ver, buscar y descargar los últimos eventos de administración de la cuenta de AWS. Para obtener más información, consulte Trabajar con el historial de eventos de CloudTrail en la Guía del usuario de AWS CloudTrail.
Para mantener un registro continuo de los eventos de su cuenta de AWS, incluidos los eventos de la API de datos, cree un registro de seguimiento. Un registro de seguimiento permite a CloudTrail enviar archivos de registro a un bucket de Amazon S3. De manera predeterminada, cuando se crea un registro de seguimiento en la consola, el registro de seguimiento se aplica a todas las regiones de AWS. El seguimiento registra los eventos de todas las regiones de AWS en la partición de AWS y envía los archivos de registro al bucket de Amazon S3 especificado. También es posible configurar otros servicios de AWS para analizar en profundidad y actuar en función de los datos de eventos recopilados en los registros de CloudTrail. Para obtener más información, consulte los siguientes temas en la Guía del usuario de AWS CloudTrail:
CloudTrail registra todas las operaciones de la API de datos, las cuales quedan documentadas en la referencia de la API de servicio de datos de Amazon RDS. Por ejemplo, las llamadas a las operaciones BatchExecuteStatement, BeginTransaction, CommitTransaction y ExecuteStatement generan entradas en los archivos de registro de CloudTrail.
Cada entrada de registro o evento contiene información acerca de quién generó la solicitud. La información de identidad del usuario le ayuda a determinar lo siguiente:
-
Si la solicitud se realizó con las credenciales raíz o del usuario.
-
Si la solicitud se realizó con credenciales de seguridad temporales de un rol o fue un usuario federado.
-
Si la solicitud la realizó otro servicio de AWS.
Para obtener más información, consulte Elemento userIdentity de CloudTrail.
Inclusión y exclusión de eventos de la API de datos de un seguimiento de AWS CloudTrail
La mayoría de los usuarios de la API de datos confían en los eventos de un seguimiento de AWS CloudTrail para proporcionar un registro de las operaciones de la API de datos. Los datos de eventos no revelan el nombre de la base de datos, el nombre del esquema ni las instrucciones SQL en las solicitudes a la API de datos. Sin embargo, saber qué usuario realizó un tipo de llamada a un clúster de base de datos específico en un momento dado puede ayudar a detectar patrones de acceso anómalos.
Inclusión de eventos de la API de datos en un seguimiento de AWS CloudTrail
En el caso de Aurora PostgreSQL sin servidor v2 y las bases de datos aprovisionadas, las siguientes operaciones de la API de datos se registran en AWS CloudTrail como eventos de datos. Los eventos de datos son operaciones de API del plano de datos de gran volumen que CloudTrail no registra de forma predeterminada. Se aplican cargos adicionales a los eventos de datos. Para obtener información sobre los precios de CloudTrail, consulte Precios de AWS CloudTrail
Puede utilizar la consola de CloudTrail, AWS CLI o las operaciones de la API de CloudTrail para registrar estas operaciones de la API de datos. En la consola de CloudTrail, elija API de datos de RDS - clúster de base de datos para el tipo de evento de datos. Para obtener más información, consulte Registro de eventos de datos con la Consola de administración de AWS en la Guía del usuario de AWS CloudTrail.
Con la AWS CLI, ejecute el comando aws cloudtrail put-event-selectors para registrar estas operaciones de la API de datos para su seguimiento. Para registrar todos los eventos de la API de datos en los clústeres de bases de datos, especifique AWS::RDS::DBCluster como tipo de recurso. El siguiente ejemplo registra todos los eventos de la API de datos en los clústeres de bases de datos. Para obtener más información, consulte Registro de eventos de datos con la AWS Command Line Interface en la Guía del usuario de AWS CloudTrail.
aws cloudtrail put-event-selectors --trail-nametrail_name--advanced-event-selectors \ '{ "Name": "RDS Data API Selector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::RDS::DBCluster" ] } ] }'
Puede configurar selectores de eventos avanzados para filtrar adicionalmente por los campos readOnly, eventName, y resources.ARN. Para obtener más información sobre estos campos, consulte AdvancedFieldSelector.
Descripción de las entradas del archivo de registro de la API de datos
Un seguimiento es una configuración que permite la entrega de eventos como archivos de registro en un bucket de Amazon S3 que especifique. Los archivos de registro de CloudTrail pueden contener una o varias entradas de registro. Un evento representa una solicitud específica realizada desde un origen y contiene información sobre la acción solicitada, la fecha y la hora de la acción, los parámetros de la solicitud, etc. Los archivos de registro de CloudTrail no rastrean el orden en la pila de las llamadas públicas a la API, por lo que estas no aparecen en ningún orden específico.
Aurora PostgreSQL sin servidor v2 y aprovisionada
En el siguiente ejemplo se muestra una entrada de registro de CloudTrail que ilustra el funcionamiento de ExecuteStatement para bases de datos de Aurora PostgreSQL sin servidor v2 y aprovisionadas. En estas bases de datos, todos los eventos de la API de datos son eventos de datos en los que el origen del evento es rdsdataapi.amazonaws.com y el tipo de evento es Rds Data Service.
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdataapi.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "Rds Data Service", "recipientAccountId": "123456789012" }
Aurora Serverless v1
El siguiente ejemplo muestra cómo aparece la entrada de registro de CloudTrail del ejemplo anterior para Aurora Serverless v1. Para Aurora Serverless v1, todos los eventos son eventos de administración en los que el origen del evento es rdsdata.amazonaws.com y el tipo de evento es AwsApiCall.
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdata.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }