Recopila registros de AWS Security Hub
En este documento, se explica cómo transferir registros de AWS Security Hub a Google Security Operations. AWS Security Hub proporciona una vista integral de las alertas y los hallazgos de seguridad en todas las cuentas de AWS. Si envías estos hallazgos a Google SecOps, puedes usar las capacidades de Google SecOps para mejorar la supervisión y la detección de amenazas.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a AWS
Configura IAM y S3 de AWS
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
- Guarda el Nombre y la Región del bucket para usarlos más adelante.
- Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como el Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Crea una función Lambda
- Accede a la consola de administración de AWS.
- Ve a Lambda.
- Haz clic en Create Function y selecciona Author from Scratch.
- Proporciona un nombre para tu función, por ejemplo,
SecurityHubToS3
. - Elige Python 3.x para el entorno de ejecución.
Ingresa el código de Lambda que toma los resultados de EventBridge y los escribe en tu bucket de S3:
import json import boto3 from datetime import datetime # Initialize the S3 client s3_client = boto3.client('s3') # S3 bucket where findings will be stored bucket_name = 'aws-security-hub-findings-stream' def lambda_handler(event, context): # Extract Security Hub findings from the event findings = event['detail']['findings'] # Generate a timestamp for the file name to avoid overwriting timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S') # Generate the S3 object key (file name) based on the timestamp object_key = f"security_hub_findings_{timestamp}.json" # Convert findings to JSON format findings_json = json.dumps(findings) # Upload the findings to S3 try: response = s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=findings_json, ContentType='application/json' ) print(f"Successfully uploaded findings to S3: {response}") except Exception as e: print(f"Error uploading findings to S3: {e}") raise e return { 'statusCode': 200, 'body': json.dumps('Successfully processed findings') }
Para configurar los permisos de Lambda, agrega un rol de IAM a la función de Lambda con la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*" } ] }
Cómo configurar AWS Security Hub para reenviar hallazgos con EventBridge
- Accede a la consola de administración de AWS.
- En la barra de búsqueda, escribe y selecciona Security Hub en la lista de servicios.
- Haz clic en Configuración.
- En la sección Integraciones, busca EventBridge y haz clic en Habilitar.
- En la barra de búsqueda, escribe y selecciona EventBridge en la lista de servicios.
- En la consola de EventBridge, haz clic en Reglas > Crear regla.
- Proporciona la siguiente configuración de la regla:
- Nombre de la regla: Proporciona un nombre descriptivo para la regla, por ejemplo, SendSecurityHubFindingsToS3.
- Event Source: Selecciona AWS services.
- Nombre del servicio: Elige Security Hub.
- Tipo de evento: Selecciona Resultados de Security Hub.
- Configura el destino: Elige Función Lambda.
- Selecciona la función Lambda que acabas de crear (
SecurityHubToS3
).
- Haz clic en Crear.
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds desde Configuración del SIEM > Feeds
Para configurar varios feeds para diferentes tipos de registros dentro de esta familia de productos, consulta Cómo configurar varios feeds.
Para configurar un solo feed, sigue estos pasos:
- Ve a SIEM Settings > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed, por ejemplo, Registros de AWS Security Hub.
- Selecciona Amazon S3 como el Tipo de fuente.
- Selecciona AWS Security Hub como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- Región: Es la región en la que se encuentra el bucket de Amazon S3.
- URI de S3: Es el URI del bucket.
s3://your-log-bucket-name/
- Reemplaza
your-log-bucket-name
por el nombre real de tu bucket de S3.
- Reemplaza
- El URI es un: Selecciona Directorio o Directorio que incluye subdirectorios, según la estructura de tu bucket.
Opciones de eliminación de la fuente: Selecciona la opción de eliminación según tus preferencias de transferencia.
ID de clave de acceso: Es la clave de acceso del usuario con permisos para leer desde el bucket de S3.
Clave de acceso secreta: Es la clave secreta del usuario con permisos para leer desde el 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.
Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- Región: Es la región en la que se encuentra el bucket de Amazon S3.
- URI de S3: Es el URI del bucket.
s3://your-log-bucket-name/
- Reemplaza
your-log-bucket-name
por el nombre real de tu bucket de S3.
- Reemplaza
- El URI es un: Selecciona Directorio o Directorio que incluye subdirectorios, según la estructura de tu bucket.
- Opciones de eliminación de la fuente: Selecciona la opción de eliminación según tus preferencias de transferencia.
ID de clave de acceso: Es la clave de acceso del usuario con permisos para leer desde el bucket de S3.
Clave de acceso secreta: Es la clave secreta del usuario con permisos para leer desde el bucket de S3.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
- Espacio de nombres del recurso: Espacio de nombres asociado al feed.
- Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
account |
principal.group.product_object_id |
Es el ID de la cuenta de AWS asociada con el hallazgo. |
configurationItem.ARN |
target.resource.id |
Es el Amazon Resource Name (ARN) del elemento de configuración. |
configurationItem.awsAccountId |
principal.user.userid |
Es el ID de la cuenta de AWS del elemento de configuración. |
configurationItem.awsRegion |
target.asset.location.country_or_region |
Región de AWS del elemento de configuración. |
configurationItem.configuration.complianceType |
security_result.summary |
Es el tipo de cumplimiento del elemento de configuración. |
configurationItem.configuration.configRuleList[].complianceType |
security_result.summary |
Es el estado de cumplimiento de cada regla de configuración. |
configurationItem.configuration.configRuleList[].configRuleArn |
security_result.rule_id |
ARN de la regla de AWS Config. |
configurationItem.configuration.configRuleList[].configRuleId |
security_result.about.labels.configRuleId |
ID de la regla de AWS Config. |
configurationItem.configuration.configRuleList[].configRuleName |
security_result.rule_name |
Nombre de la regla de AWS Config. |
configurationItem.configuration.privateIpAddress |
target.ip |
Es la dirección IP privada del elemento de configuración. |
configurationItem.configuration.publicIpAddress |
target.ip |
Es la dirección IP pública del elemento de configuración. |
configurationItem.configurationItemCaptureTime |
target.asset.attribute.creation_time |
Es la hora de captura del elemento de configuración, convertida en una marca de tiempo. |
configurationItem.configurationItemStatus |
target.asset.attribute.labels.Configuration Item Status |
Es el estado del elemento de configuración. |
configurationItem.relationships[].resourceId |
target.asset.attribute.cloud.vpc.id |
Es el ID del recurso relacionado, que se usa para el ID de VPC si coincide con vpc . |
configurationItem.resourceId |
target.resource.id |
Es el ID de recurso del elemento de configuración. |
configurationItem.resourceName |
target.resource.name |
El nombre del recurso. |
configurationItem.resourceType |
target.resource.resource_subtype |
Es el tipo de recurso del elemento de configuración. |
configurationItem.tags.Contact |
principal.user.user_display_name O principal.user.email_addresses |
Detalles de contacto extraídos de las etiquetas y analizados para obtener la dirección de correo electrónico y el nombre de usuario |
configurationItem.tags.OS /configurationItem.tags.Os |
target.asset.platform_software.platform |
Es el sistema operativo de las etiquetas, asignado a la plataforma si es Windows o Linux . |
configurationItemDiff.changeType |
metadata.event_type |
Es el tipo de cambio, asignado a RESOURCE_WRITTEN o RESOURCE_CREATION. |
detail.accountId |
principal.group.product_object_id |
Es el ID de la cuenta de AWS asociada con el hallazgo. |
detail.actionDescription detail.actionName detail.description |
sec_result.description |
Es la descripción del hallazgo. |
detail.findings[].AwsAccountId |
principal.group.product_object_id |
Es el ID de la cuenta de AWS asociada con el hallazgo. |
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description |
sec_result.description |
Es la descripción del hallazgo. |
detail.findings[].FindingProviderFields.Severity.Label |
sec_result.severity |
Es la etiqueta de gravedad del hallazgo, convertida en mayúsculas. |
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. |
Ver a continuación | Son varios campos que se usan para la información de campos adicionales, la entidad principal y el objetivo. |
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region |
target.location.name |
Es la región de AWS del hallazgo. |
detail.findings[].Resources[].Details. |
Ver a continuación | Son los detalles sobre los recursos involucrados en el hallazgo. |
detail.findings[].Resources[].Id |
target.resource.product_object_id |
Es el ID del recurso. |
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region |
target.location.name |
Región de AWS del recurso. |
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type |
target.resource.resource_type , target.resource.resource_subtype , metadata.event_type |
Es el tipo de recurso que se usa para la asignación de tipo, subtipo y tipo de evento de recurso. |
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title |
sec_result.summary |
Es el título del hallazgo. |
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type |
metadata.product_event_type |
Es el tipo de detalle del evento. |
id |
metadata.product_log_id |
Es el ID del evento. |
region |
target.location.name |
Región de AWS del evento. |
resources[] source time version (lógica del analizador) |
metadata.event_timestamp |
Es la hora de creación de la entrada de registro original, que se usa como marca de tiempo del evento. |
(Lógica del analizador) | metadata.log_type |
Se define en AWS_SECURITY_HUB . |
(Lógica del analizador) | metadata.product_name |
Se define en AWS Security Hub . |
(Lógica del analizador) | metadata.vendor_name |
Se define en AMAZON . |
(Lógica del analizador) | target.asset.attribute.cloud.environment |
Se define en AMAZON_WEB_SERVICES . |
(Lógica del analizador) | metadata.event_type |
Se establece en USER_RESOURCE_ACCESS de forma predeterminada si no se asigna desde Resources[].Type o configurationItemDiff.changeType . Se establece en STATUS_UPDATE si configurationItems está presente y no se establece ningún otro tipo de evento. Se establece en RESOURCE_READ si configurationItem o configurationItems están presentes y el estado es OK o ResourceDiscovered . Se establece en RESOURCE_DELETION si configurationItem o configurationItems están presentes y el estado es ResourceDeleted . |
(Lógica del analizador) | metadata.description |
Se establece en guardduty si detail.findings[].ProductFields.aws/guardduty/service/serviceName está presente. |
(Lógica del analizador) | target.asset.attribute.cloud.vpc.resource_type |
Se establece en VPC_NETWORK si configurationItems.relationships[].resourceId coincide con vpc . |
(Lógica del analizador) | target.resource.resource_type |
Se establece en VIRTUAL_MACHINE si configurationItem o configurationItems están presentes. Se establece en UNSPECIFIED si no se establece ningún otro tipo de recurso. |
(Lógica del analizador) | target.asset.platform_software.platform |
Se establece en WINDOWS o LINUX según la presencia de Windows o (Linux|LINUX) en el mensaje para configurationItem . En el caso de configurationItems , se establece en función de configItem.tags.OS o configItem.tags.Os . |
(Lógica del analizador) | disambiguation_key |
Se agrega cuando se generan varios eventos a partir de una sola entrada de registro. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.