Recopila registros de funciones de AWS Lambda

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de funciones de AWS Lambda a Google Security Operations con Amazon S3.

AWS Lambda es un servicio de procesamiento sin servidores que ejecuta tu código en respuesta a eventos y administra automáticamente los recursos de procesamiento subyacentes. Lambda envía automáticamente todos los registros de funciones (registros de la plataforma, registros de extensiones y resultados de la aplicación) a Amazon CloudWatch Logs, lo que crea un grupo de registros por función. Esta integración usa Amazon Data Firehose para transmitir eventos de registro de Lambda desde CloudWatch Logs a un bucket de S3, que luego Google SecOps ingiere con un feed de Amazon S3 V2.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Acceso con privilegios a la Consola de administración de AWS con permisos para administrar lo siguiente:
    • AWS Lambda (funciones, configuración de registros)
    • Amazon CloudWatch Logs (grupos de registros, filtros de suscripción)
    • Amazon Data Firehose (flujos de entrega)
    • Amazon S3 (buckets)
    • IAM de AWS (roles, políticas y usuarios)

Verifica el grupo de registros de CloudWatch Logs para tu función de Lambda

  • AWS Lambda crea automáticamente un grupo de registros de CloudWatch Logs para cada función cuando se invoca por primera vez. La convención de nomenclatura predeterminada del grupo de registros es la siguiente:

    /aws/lambda/<function-name>
    

Para verificar, haz lo siguiente:

  1. En la consola de AWS, ve a CloudWatch > Logs > Log groups.
  2. Busca /aws/lambda/.
  3. Confirma que exista un grupo de registros para cada función Lambda cuyos registros desees transferir.

Configura un bucket de AWS S3

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
  2. Guarda el Nombre y la Región del bucket para consultarlos en el futuro (por ejemplo, lambda-logs-to-secops).

Configura un rol de IAM para Amazon Data Firehose

Amazon Data Firehose requiere un rol de IAM para escribir registros en tu bucket de S3.

Crea la política de IAM

  1. En la consola de AWS, ve a IAM > Políticas > Crear política.
  2. Selecciona la pestaña JSON.
  3. Pega la siguiente política (reemplaza lambda-logs-to-secops por el nombre de tu bucket real):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "S3Delivery",
                "Effect": "Allow",
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::lambda-logs-to-secops",
                    "arn:aws:s3:::lambda-logs-to-secops/*"
                ]
            },
            {
                "Sid": "CloudWatchLogging",
                "Effect": "Allow",
                "Action": [
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*"
            }
        ]
    }
    
  4. Haz clic en Siguiente.

  5. En el campo Nombre de la política, ingresa LambdaLogsFirehoseS3Policy.

  6. Haz clic en Crear política.

Crea el rol de IAM

  1. Ve a IAM > Roles > Crear rol.
  2. Selecciona Política de confianza personalizada.
  3. Pega la siguiente política de confianza:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Haz clic en Siguiente.

  5. Busca y selecciona LambdaLogsFirehoseS3Policy.

  6. Haz clic en Siguiente.

  7. En el campo Nombre del rol, ingresa LambdaLogsFirehoseToS3Role.

  8. Haz clic en Crear rol.

Crea el flujo de Amazon Kinesis Data Firehose

  1. Abre la consola de Kinesis en https://console.aws.amazon.com/kinesis.
  2. En el panel de navegación, selecciona Amazon Data Firehose.
  3. Haz clic en Crear flujo de Firehose.
  4. En Elige la fuente y el destino, proporciona la siguiente configuración:
    • Fuente: Selecciona PUT directo.
    • Destino: Selecciona Amazon S3.
  5. En el campo Nombre de la transmisión de Firehose, ingresa lambda-logs-to-secops.
  6. En Transform records, en la sección Decompress source records from Amazon CloudWatch Logs, haz lo siguiente:

    1. Selecciona Activar la descompresión.
    2. No selecciones Activar la extracción de mensajes.
  7. En Configuración de destino, haz lo siguiente:

    • Bucket de S3: Selecciona el bucket de S3 lambda-logs-to-secops.
    • Prefijo del bucket de S3 (opcional): Ingresa lambda-logs/.
    • Prefijo de salida de error del bucket de S3 (opcional): Ingresa firehose-errors/.
  8. En Sugerencias de búfer, haz lo siguiente:

    • Tamaño del búfer: 5 MiB (predeterminado).
    • Intervalo de búfer: 300 segundos (predeterminado).
  9. En Configuración avanzada, haz lo siguiente:

    • Encriptación del servidor: Opcional. Habilita esta opción si se requiere encriptación.
    • Registro de errores: Selecciona Habilitado (recomendado).
    • Permisos: Selecciona Elegir un rol de IAM existente y, luego, elige LambdaLogsFirehoseToS3Role.
  10. Haz clic en Crear flujo de Firehose.

  11. Espera a que el Estado de la transmisión muestre Activo.

Configura un rol de IAM para CloudWatch Logs

CloudWatch Logs requiere un rol de IAM para enviar datos de registro al flujo de Firehose.

Crea la política de IAM

  1. Ve a IAM > Políticas > Crear política.
  2. Selecciona la pestaña JSON.
  3. Pega la siguiente política (reemplaza <region> y <account-id> por tu región de AWS y tu ID de cuenta):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops"
            }
        ]
    }
    
  4. Haz clic en Siguiente.

  5. En el campo Nombre de la política, ingresa LambdaLogsCWLtoFirehosePolicy.

  6. Haz clic en Crear política.

Crea el rol de IAM

  1. Ve a IAM > Roles > Crear rol.
  2. Selecciona Política de confianza personalizada.
  3. Pega la siguiente política de confianza (reemplaza <region> por tu región de AWS):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Haz clic en Siguiente.

  5. Busca y selecciona LambdaLogsCWLtoFirehosePolicy.

  6. Haz clic en Siguiente.

  7. En el campo Nombre del rol, ingresa LambdaLogsCWLtoFirehoseRole.

  8. Haz clic en Crear rol.

Crea un filtro de suscripción de CloudWatch Logs

  1. En la consola de AWS, ve a CloudWatch > Logs > Log groups.
  2. Selecciona el grupo de registros /aws/lambda/<function-name>.
  3. Selecciona la pestaña Filtros de suscripción.
  4. Haz clic en Crear > Crear filtro de suscripción de Amazon Data Firehose.
  5. Proporciona los siguientes detalles de configuración:
    • Destino: Selecciona la transmisión de Firehose lambda-logs-to-secops.
    • Otorgar permiso: Selecciona el rol LambdaLogsCWLtoFirehoseRole.
    • Nombre del filtro de suscripción: Ingresa un nombre descriptivo (por ejemplo, lambda-logs-to-secops-filter).
    • Formato de registro: Selecciona Otro.
    • Patrón de filtro de suscripción: Déjalo vacío para enviar todos los eventos de registro de la función Lambda.
  6. Haz clic en Iniciar transmisión.

Configura un usuario de IAM para Google SecOps

Google SecOps necesita un usuario de IAM con acceso al bucket de S3 para transferir los registros entregados.

  1. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  2. Selecciona el usuario creado.
  3. Selecciona la pestaña Credenciales de seguridad.
  4. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  5. Selecciona Servicio de terceros como Caso de uso.
  6. Haz clic en Siguiente.
    • Opcional: Agrega una etiqueta de descripción.
  7. Haz clic en Crear clave de acceso.
  8. Haz clic en Descargar archivo .csv para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
  9. Haz clic en Listo.
  10. Selecciona la pestaña Permisos.
  11. Haz clic en Agregar permisos en la sección Políticas de permisos.
  12. Selecciona Agregar permisos.
  13. Selecciona Adjuntar políticas directamente.
  14. Busca la política AmazonS3FullAccess.
  15. Selecciona la política.
  16. Haz clic en Siguiente.
  17. Haz clic en Agregar permisos.

Configura un feed en Google SecOps para transferir registros de funciones de AWS Lambda

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la siguiente página, haz clic en Configurar un solo feed.
  4. Ingresa un nombre único para el Nombre del feed.
  5. Selecciona Amazon S3 V2 como el Tipo de fuente.
  6. Selecciona AWS Lambda Function como el Tipo de registro.
  7. Haz clic en Siguiente y, luego, en Enviar.
  8. Especifica valores para los siguientes campos:
    • URI de S3: s3://lambda-logs-to-secops/lambda-logs/
    • Opción de eliminación del código fuente: Selecciona la opción de eliminación según tu preferencia.
    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días más reciente (el valor predeterminado es de 180 días).
    • ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3
    • Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
  9. Haz clic en Siguiente y, luego, en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
Activity_id_label additional.fields Combinado
Arrays_label additional.fields Combinado
Name_label additional.fields Combinado
Type_1_label additional.fields Combinado
Type_id_label additional.fields Combinado
Type_label additional.fields Combinado
Uid_label additional.fields Combinado
Uid_label_1 additional.fields Combinado
Value_label additional.fields Combinado
__type_label additional.fields Combinado
attempts_label additional.fields Combinado
class_name_label additional.fields Combinado
contentType_label additional.fields Combinado
env_label additional.fields Combinado
extendedRequestId_label additional.fields Combinado
feature_name_label additional.fields Combinado
line_number_label additional.fields Combinado
logType_label additional.fields Combinado
product_name_label additional.fields Combinado
requestid_label additional.fields Combinado
sourceAccount_label additional.fields Combinado
stack_label additional.fields Combinado
totalRetryDelay_label additional.fields Combinado
vendor_name_label additional.fields Combinado
version_label additional.fields Combinado
has_principal extensions.auth.type Asignado: trueAUTHTYPE_UNSPECIFIED
description metadata.description Asignado directamente
file_desc metadata.description Asignado directamente
Time metadata.event_timestamp Se analizó como UNIX
time metadata.event_timestamp Se analizó como yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type Asignado: trueUSER_LOGIN, trueNETWORK_HTTP, trueNETWORK_CONNECTION, "true"…
has_principal_user metadata.event_type Asignado: trueUSER_RESOURCE_ACCESS
Api.Operation metadata.product_event_type Asignado directamente
name metadata.product_event_type Asignado directamente
Api.Request.Uid metadata.product_log_id Asignado directamente
id metadata.product_log_id Asignado directamente
meta_data.requestId metadata.product_log_id Asignado directamente
Metadata.Version metadata.product_version Asignado directamente
version metadata.product_version Asignado directamente
meta_data.httpStatusCode network.http.response_code Asignado directamente
Http_request.User_agent network.http.user_agent Asignado directamente
Actor.Invoked_by principal.administrative_domain Asignado directamente
Src_endpoint.Domain principal.asset.hostname Asignado directamente
Src_endpoint.Domain principal.hostname Asignado directamente
Cloud.Region principal.resource.attribute.cloud.availability_zone Asignado directamente
Actor.User.Name principal.user.userid Asignado directamente
Status security_result.action_details Asignado directamente
Category_name security_result.category_details Combinado
error security_result.description Asignado directamente
errorMessage security_result.description Asignado directamente
Metadata_uid_label security_result.detection_fields Combinado
category_uid_label security_result.detection_fields Combinado
class_uid_label security_result.detection_fields Combinado
errorType_label security_result.detection_fields Combinado
event_code_label security_result.detection_fields Combinado
fault_label security_result.detection_fields Combinado
functionName_label security_result.detection_fields Combinado
severity_id_label security_result.detection_fields Combinado
sourceArn_label security_result.detection_fields Combinado
type_name_label security_result.detection_fields Combinado
type_uid_label security_result.detection_fields Combinado
user_type_label security_result.detection_fields Combinado
Severity security_result.severity Asignado: InformationalINFORMATIONAL
severity security_result.severity Asignado: INFOINFORMATIONAL
msg security_result.summary Asignado directamente
Api.Service.Name target.application Asignado directamente
service target.application Asignado directamente
size target.file.size Asignado directamente
filename target.process.file.full_path Asignado directamente
Activity_name target.resource.name Asignado directamente
targetVar target.resource.name Asignado directamente
N/A extensions.auth.type Constante: AUTHTYPE_UNSPECIFIED
N/A metadata.event_type Constante: USER_UNCATEGORIZED
N/A metadata.product_name Constante: AWS_Lambda_Function
N/A metadata.vendor_name Constante: AWS_Lambda_Function
N/A principal.resource.attribute.cloud.environment Constante: AMAZON_WEB_SERVICES
N/A security_result.severity Constante: INFORMATIONAL

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.