Garantizando la Integridad de los Registros en AWS: Cómo Auditar con CloudTrail y S3
Tags: aws, cibersecurity, cli
Published: 2023-09-07 16:11:24

---
title: Garantizando la Integridad de los Registros en AWS: Cómo Auditar con CloudTrail y S3
published: true
date: 2023-09-06 13:00:57 UTC
tags: AWS,aws,cibersecurity,cli
canonical_url: https://iaasgeek.com/2023/09/garantizando-la-integridad-de-los-registros-en-aws-como-auditar-con-cloudtrail-y-s3/
series: AWS Security desde la CLI
---

CloudTrail es un servicio de AWS que nos permite monitorizar y registrar todas las solicitudes API realizadas en nuestro entorno. Cuando se almacenan en Amazon S3, se vuelve imperativo garantizar la integridad de estos registros para fines de auditoría y cumplimiento regulatorio. Esta entrada de blog te guiará a través del proceso de garantizar esa integridad, profundizará en los beneficios y limitaciones del proceso y proporcionará las mejores prácticas recomendadas.

**DISCLAIMER:**  Es importante señalar que aunque en el blog podamos mostrar comandos, scripts, u otros ejemplos de código como parte de las demostraciones o discusiones, estos  **se ofrecen**  únicamente  **con fines educativos y de entretenimiento**. Utilice la información proporcionada bajo su propio riesgo.

Dividiremos nuestra propuesta en 4 pasos:

![](https://iaasgeek.com/wp-content/uploads/2023/09/MFA-Diagram-blog-1.jpeg)

1. **Habilitar la Validación de Integridad de Archivos de Log** : CloudTrail ofrece una opción para habilitar la validación de integridad del archivo de log, asegurando que los archivos de registro no hayan sido alterados. Esto se hace mediante el comando `aws cloudtrail update-trail`.
2. **Configurar la Eliminación con Autenticación de Múltiples Factores (MFA)**: Esta configuración previene la eliminación accidental o malintencionada de los logs en el bucket de S3. Es fundamental activar MFA para el bucket, y hay que tener en cuenta ciertas consideraciones, como asegurarse de que el bucket de S3 no esté versionado, o que el MFA esté habilitado para el usuario de AWS.
3. **Usar Políticas de Bucket S3** : Establecer una política de bucket que restrinja el acceso de manera que solo CloudTrail pueda escribir en los logs. Esto impide cualquier modificación no autorizada al bucket de S3.
4. **Políticas IAM** : Se debe otorgar permiso de escritura solamente a CloudTrail y permiso de lectura solamente a aquellos usuarios que realmente lo necesiten. Se pueden utilizar políticas gestionadas por AWS, como `CloudTrailReadOnlyAccess`, para otorgar acceso de lectura a los usuarios específicos que necesiten leer los registros de CloudTrail.

Estos pasos, cuando se implementan adecuadamente, proporcionan una estructura robusta y segura para garantizar que los logs de CloudTrail almacenados en S3 mantengan su integridad y estén protegidos contra manipulaciones no autorizadas.

### 1. Configuración

![](https://iaasgeek.com/wp-content/uploads/2023/09/MFA-diagrama-flujo-2.jpeg)

**Paso 1.** Habilitar la **Validación de Integridad del Archivo de Logs** : CloudTrail proporciona una opción para habilitar la validación de integridad del archivo de registro. Esto ayuda a asegurar que los archivos de registro no hayan sido manipulados.

```
aws cloudtrail update-trail --name YourTrailName --enable-log-file-validation
```

**Paso 2.** Configurar la **Eliminación con Autenticación de Múltiples Factores (MFA)**: Con ello cualquier intento de eliminar un objeto en este bucket requerirá autenticación MFA. Vamos a agregar una capa adicional de seguridad, pero como hemos comentado anteriormente, hay varias consideraciones importantes a tener en cuenta:

1. **Configuración inicial de MFA** : Antes de poder activar la eliminación MFA para un bucket de S3, el usuario de AWS que realiza la configuración debe tener un dispositivo MFA asociado a su cuenta de usuario IAM y debe estar activado.
2. **Versionado** : MFA Delete está íntimamente ligado al versionado de S3. No puedes habilitar MFA Delete sin antes habilitar el versionado en el bucket. Además, una vez que el MFA Delete está habilitado, no puedes suspender el versionado; solo puedes detenerlo.
3. **Costes** : Al habilitar el versionado, se guardan todas las versiones de un objeto (incluidas todas las versiones de escritura y eliminación). Esto puede aumentar tus costes de almacenamiento en S3.
4. **Eliminación de objetos** : Una vez que MFA Delete está habilitado, para eliminar un objeto o una versión del objeto, necesitas proporcionar la autenticación MFA. Es crucial entender esto para evitar confusiones o inconvenientes al intentar eliminar datos.
5. **Cambios en la configuración** : Después de que MFA Delete esté activo, cualquier cambio en la configuración del versionado del bucket (por ejemplo, intentar suspender el versionado o desactivar MFA Delete) requiere autenticación MFA.
6. **Autenticación MFA y la AWS CLI** : No todos los interfaces de AWS admiten MFA. Si bien la AWS CLI y el SDK de AWS lo soportan, la consola de administración de AWS no admite directamente MFA Delete (aunque sí puedes usar MFA para iniciar sesión).
7. **Recuperación** : Si pierdes acceso a tu dispositivo MFA y no tienes configuradas políticas de recuperación, puedes encontrarte en una situación en la que no puedas eliminar o modificar objetos en tu bucket.
8. **Políticas de bucket y IAM** : Si tienes políticas de IAM o políticas de bucket que denieguen acciones basadas en el estado de MFA del solicitante, asegúrate de que estas políticas estén correctamente configuradas para evitar bloqueos no deseados o acceso no autorizado.
9. **Tiempo de expiración** : El código MFA tiene un tiempo de validez corto. Si estás utilizando la AWS CLI o algún SDK, asegúrate de ingresar el código MFA rápidamente después de obtenerlo de tu dispositivo.
10. **Retrasos en la propagación** : Puede haber un ligero retraso entre el momento en que activas MFA Delete y el momento en que la función esté completamente activa.

Dada la complejidad y las implicaciones potenciales de habilitar MFA Delete, es **esencial planificar y probar cuidadosamente la configuración antes de implementarla en entornos de producción.** Veremos en otra entrada de blog cómo configurar estos pasos. De momento, daremos por hecho que ya los tenéis configurados.

**2.1 Habilita la versión del bucket** : Antes de poder configurar la eliminación con MFA, necesitas asegurarte de que la versión esté habilitada para tu bucket.

```
aws s3api put-bucket-versioning --bucket NOMBRE_DEL_BUCKET --versioning-configuration Status=Enabled
```

**2.2**  **Activa MFA en el bucket** : Una vez que la versión esté habilitada, puedes activar MFA para el bucket.

```
aws s3api put-bucket-versioning --bucket NOMBRE_DEL_BUCKET --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SERIAL_NUMBER MFA_CODE"
```

Aquí, `SERIAL_NUMBER` es el número de serie del dispositivo MFA del usuario IAM o el ARN del dispositivo MFA virtual del usuario IAM. Y `MFA_CODE` es el código actual del dispositivo MFA.

**2.3 Configura políticas para el bucket** : Establece políticas de bucket que exijan la autenticación MFA para eliminar objetos.

```
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "DenyDeleteWithoutMFA",
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:DeleteObject",
         "Resource": "arn:aws:s3:::NOMBRE_DEL_BUCKET/*",
         "Condition": {
            "BoolIfExists": {
               "aws:MultiFactorAuthPresent": "false"
            }
         }
      }
   ]
}
```

**2.4 Aplica la política al bucket** :

```
aws s3api put-bucket-policy --bucket NOMBRE_DEL_BUCKET --policy file://ruta_al_archivo_de_politica.json
```

Reemplaza `ruta_al_archivo_de_politica.json` con la ruta donde hayas guardado la política.

**Paso 3.** Establece políticas de bucket en S3 ** que restrinja el acceso y asegure que solo CloudTrail pueda escribir en los registros. Esto evitará cualquier modificación no autorizada.

**3.1. Crea un archivo JSON** que contenga la política. Podrías nombrarlo `CloudTrailBucketPolicy.json`. El contenido del archivo podría ser similar al siguiente:

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSCloudTrailWrite20150319",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::nombre-del-bucket/prefijo/AWSLogs/tu-ID-de-cuenta/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "AWSCloudTrailReadOnly20150319",
      "Effect": "Deny",
      "NotPrincipal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::nombre-del-bucket/prefijo/AWSLogs/tu-ID-de-cuenta/*"
    }
  ]
}
```

**3.2. Aplica la política** al bucket:

```
aws s3api put-bucket-policy --bucket nombre-del-bucket --policy file://CloudTrailBucketPolicy.json
```

Asegúrate de reemplazar `nombre-del-bucket`, `prefijo`, y `tu-ID-de-cuenta` con los valores adecuados para tu configuración.

Con esta política, solo CloudTrail tendrá permiso para escribir logs en el bucket especificado, y cualquier intento de escribir logs por entidades que no sean CloudTrail será denegado.

**Paso 4. Otorga permiso de escritura únicamente a CloudTrail y permiso de lectura solamente a aquellos que realmente lo necesiten.

** Utiliza políticas gestionadas por AWS, como **CloudTrailReadOnlyAccess** , para los usuarios que necesiten leer los registros de CloudTrail. 

**4.1. Crea una política IAM personalizada para restringir la escritura solo a CloudTrail**: Primero, crea un documento de política llamado, por ejemplo, `RestrictWriteToCloudTrail.json`:

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::nombre-del-bucket/*",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      }
    }
  ]
}
```

Luego, crea la política IAM en AWS:

```
aws iam create-policy --policy-name RestrictWriteToCloudTrail --policy-document file://RestrictWriteToCloudTrail.json
```

**4.2. Otorga acceso de lectura solo a los usuarios que lo necesiten** :

Para hacerlo más sencillo, puedes añadirlos al grupo de IAM que tenga la política `CloudTrailReadOnlyAccess`:

```
# Crea un grupo IAM
aws iam create-group --group-name CloudTrailReaders

#4.3. Asigna la política CloudTrailReadOnlyAccess al grupo
aws iam attach-group-policy --group-name CloudTrailReaders --policy-arn arn:aws:iam::aws:policy/CloudTrailReadOnlyAccess

#4.4. Añade usuarios al grupo (repite para cada usuario necesario)
aws iam add-user-to-group --group-name CloudTrailReaders --user-name nombre-del-usuario
```

Por favor, asegúrate de reemplazar `nombre-del-bucket` y `nombre-del-usuario` con los valores adecuados para tu configuración. Estos pasos garantizarán que solo CloudTrail pueda escribir logs y que solo usuarios específicos tengan acceso de lectura a esos logs.

### 2. Ventajas

Esta propuesta nos permitirá tener:

**2.1 Mayor Seguridad** : Asegurar la integridad de los registros significa que tienes una fuente confiable para todas las acciones de los servicios AWS.

**2.2 Cumplimiento Normativo** : Para industrias que requieren auditorías estrictas y garantías de integridad de datos, contar con registros de CloudTrail verificados ayuda a cumplir con estas regulaciones.

**2.3 Resolución de Problemas** : Los registros detallados facilitan un mejor diagnóstico de los problemas y minimizan los tiempos de resolución.

### 3. Limitaciones

Como todo en esta vida, al añadir capas de seguridad a nuestra infraestructura deberemos tener en cuenta ciertos factores como:

**3.1 Overhead:** Al añadir medidas de seguridad podemos incrementar las tareas administrativas.

**3.2 Costes:** Las características más avanzadas en S3, como la versión y la eliminación con MFA, podrían resultar en cargos adicionales.

**3.3 Complejidad:** Gestionar políticas y asegurarse de que estén configuradas correctamente puede ser complejo y requiere una planificación cuidadosa.

##### 4. Recomendaciones

Para una óptima gestión de los logs os recomendamos:

**4.1 Auditorías Regulares** : Revisa y audita periódicamente tus buckets de S3 y las políticas de IAM.

**4.2 AWS Organizations:** Para las empresas que operan a gran escala, considera configurar AWS Organizations para gestionar y consolidar cuentas y aplicar políticas de control de servicios (SCPs).

**4.3 Backups:** Considera replicar tus logs de CloudTrail a otra cuenta o servicio para asegurar que estén disponibles incluso si hay un compromiso.

**4.4 Monitorización:** Configura Alarmas de CloudWatch o utiliza AWS GuardDuty para recibir alertas sobre actividades sospechosas.

### Conclusión:

Aunque AWS proporciona numerosas herramientas para garantizar la integridad de los registros de CloudTrail almacenados en S3, depende de los administradores y profesionales de seguridad utilizar eficazmente estas herramientas. Las revisiones regulares, entender el ecosistema de AWS y usar las mejores prácticas ayudarán a mantener la integridad de tus registros y, por extensión, la seguridad de tu entorno AWS.