Recopila registros de AWS Security Hub
En este documento, se explica cómo transferir los registros de AWS Security Hub a Google Security Operations. AWS Security Hub proporciona una vista integral de las alertas y los resultados de seguridad en todas las cuentas de AWS. Si envías estos resultados a Google SecOps, puedes usar sus funciones para mejorar la supervisión y la detección de amenazas.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a AWS.
Configura AWS IAM y S3
- 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: 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 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 tarde.
- 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 de Lambda
- Accede a la consola de administración de AWS.
- Ve a Lambda.
- Haz clic en Crear función y selecciona Autor desde cero.
- Proporciona un nombre para la 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, indent=4) # 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 establecer permisos para 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/*" } ] }
Configura AWS Security Hub para que reenvíe los resultados con EventBridge
- Accede a la consola de administración de AWS.
- En la barra de búsqueda, escribe Security Hub y selecciónalo 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 Rules > Create rule.
- Proporciona la siguiente configuración de reglas:
- Nombre de la regla: Proporciona un nombre descriptivo para la regla, por ejemplo, SendSecurityHubFindingsToS3.
- Fuente del evento: Selecciona Servicios de AWS.
- Nombre del servicio: Elige Security Hub.
- Tipo de evento: Selecciona Hallazgos de Security Hub.
- Establece el objetivo: Elige Función lambda.
- Selecciona la función de Lambda que acabas de crear (
SecurityHubToS3
).
- Haz clic en Crear.
Configura un feed en Google SecOps para transferir registros de AWS Security Hub
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- 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 del bucket.
- Reemplaza
- El URI es un: Selecciona Directorio o Directorio que incluye subdirectorios.
Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tu preferencia.
ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
Clave de acceso secreta: Es la 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.
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
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 asociado con el hallazgo. |
configurationItem.ARN |
target.resource.id |
El Amazon Resource Name (ARN) del elemento de configuración. |
configurationItem.awsAccountId |
principal.user.userid |
El ID de la cuenta de AWS del elemento de configuración |
configurationItem.awsRegion |
target.asset.location.country_or_region |
La 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 |
Estado de cumplimiento de cada regla de configuración. |
configurationItem.configuration.configRuleList[].configRuleArn |
security_result.rule_id |
El ARN de la regla de AWS Config |
configurationItem.configuration.configRuleList[].configRuleId |
security_result.about.labels.configRuleId |
El ID de la regla de AWS Config. |
configurationItem.configuration.configRuleList[].configRuleName |
security_result.rule_name |
Es el nombre de la regla de AWS Config. |
configurationItem.configuration.privateIpAddress |
target.ip |
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 |
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, analizados para obtener el 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 asociado 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 asociado 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 |
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 | Varios campos que se usan para campos adicionales, información principal y de destino. |
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region |
target.location.name |
La región de AWS del hallazgo. |
detail.findings[].Resources[].Details. |
Ver a continuación | 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 |
La 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 tipos de recursos, subtipos y tipos de eventos. |
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 |
El ID del evento. |
region |
target.location.name |
Es la región de AWS del evento. |
resources[] source time version (lógica del analizador) |
metadata.event_timestamp |
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 de configurationItem . Para 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. |
Cambios
2025-02-18
Mejora:
- Se agregó compatibilidad con un nuevo array de formato de registro JSON.
2025-01-20
Mejora:
- Se agregó compatibilidad con el nuevo formato de registro.
2025-01-16
Mejora:
- Se agregó compatibilidad con un nuevo formato de registro JSON.
2023-06-20
Mejora:
- Se modificó
metadata.event_type
deGENERIC_EVENT
aUSER_RESOURCE_ACCESS
.
24-3-2023
Mejora:
- Cuando
detail.findings.0.Resources.0.Type
==AwsEcsTaskDefinition
: - Se asignó
target.resource.resource_type
aTASK
. - Se asignó
event_type
aUSER_RESOURCE_ACCESS
. - Se asignó
detail.findings.0.ProductFields.Resources:0/Id
aprincipal.asset_id
. - Se analizaron todos los demás registros con errores como GENERIC_EVENT, ya que STATUS_UPDATE no era una buena opción de análisis para ellos.
2022-08-22
Mejora:
- Se actualizó vendor_name de
AWS SECURITY HUB
aAMAZON
. - Se actualizó product_name de
AWS SECURITY HUB
aAWS Security Hub
. - Se analizaron los nuevos registros de formato JSON que contienen
configurationItem
oconfigurationItems
. - Se controlaron los registros que se transfirieron como un archivo de importación separándolos con un bucle for y analizando cada uno como eventos individuales.
2022-07-01
- Analizador creado recientemente.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.