Recoger registros de AWS Security Hub
En este documento se explica cómo ingerir registros de AWS Security Hub en Google Security Operations. AWS Security Hub ofrece una vista completa de las alertas y los resultados de seguridad de las cuentas de AWS. Al enviar estas detecciones a Google SecOps, puedes usar las funciones de Google SecOps para mejorar la monitorización y la detección de amenazas.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a AWS
Configurar AWS IAM y S3
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del bucket para usarlos más adelante.
- Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros como Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade 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.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Crear una función Lambda
- Inicia sesión en la consola de administración de AWS.
- Ve a Lambda.
- Haz clic en Crear función y selecciona Crear desde cero.
- Asigna un nombre a la función (por ejemplo,
SecurityHubToS3
). - Elige Python 3.x como entorno de ejecución.
Introduce 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') }
Define los permisos de Lambda añadiendo un rol de gestión de identidades y accesos 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 resultados con EventBridge
- Inicia sesión en 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 Settings (Configuración).
- En la sección Integraciones, busca EventBridge y haz clic en Habilitar.
- En la barra de búsqueda, escriba y seleccione EventBridge en la lista de servicios.
- En la consola de EventBridge, haz clic en Reglas > Crear regla.
- Proporcione la siguiente configuración de la regla:
- Nombre de la regla: proporcione un nombre descriptivo para la regla; por ejemplo, SendSecurityHubFindingsToS3.
- Fuente de eventos: selecciona Servicios de AWS.
- Nombre del servicio: elige Centro de seguridad.
- Tipo de evento: selecciona Resultados de Security Hub.
- Define el objetivo: elige Función Lambda.
- Selecciona la función Lambda que acabas de crear (
SecurityHubToS3
).
- Haz clic en Crear.
Configurar feeds
Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:
- Configuración de SIEM > Feeds > Añadir nuevo
- Centro de contenido > Paquetes de contenido > Empezar
Cómo configurar el feed de AWS Security Hub
- Haz clic en el paquete Amazon Cloud Platform.
- Busca el tipo de registro AWS Security Hub.
Especifique los valores en los campos siguientes.
- Tipo de fuente: Amazon SQS V2
- Nombre de la cola: el nombre de la cola de SQS de la que se va a leer.
- URI de S3: el URI del segmento.
s3://your-log-bucket-name/
- Sustituye
your-log-bucket-name
por el nombre real de tu segmento de S3.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras según tus preferencias de ingesta.
Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.
ID de clave de acceso a la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 20 caracteres.
Clave de acceso secreta de la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 40 caracteres.
Opciones avanzadas
- Nombre del feed: valor rellenado automáticamente que identifica el feed.
- Espacio de nombres del recurso: espacio de nombres asociado al feed.
- Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.
Haga clic en Crear feed.
Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros en esta familia de productos, consulta el artículo Configurar feeds por producto.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
account |
principal.group.product_object_id |
El ID de cuenta de AWS asociado a la detección. |
configurationItem.ARN |
target.resource.id |
Nombre de recurso de Amazon (ARN) del elemento de configuración. |
configurationItem.awsAccountId |
principal.user.userid |
ID de 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 |
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 |
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 |
Dirección IP privada del elemento de configuración. |
configurationItem.configuration.publicIpAddress |
target.ip |
La dirección IP pública del elemento de configuración. |
configurationItem.configurationItemCaptureTime |
target.asset.attribute.creation_time |
Hora de captura del elemento de configuración, convertida en una marca de tiempo. |
configurationItem.configurationItemStatus |
target.asset.attribute.labels.Configuration Item Status |
Estado del elemento de configuración. |
configurationItem.relationships[].resourceId |
target.asset.attribute.cloud.vpc.id |
ID de recurso del recurso relacionado. Se usa para el ID de VPC si coincide con vpc . |
configurationItem.resourceId |
target.resource.id |
ID de recurso del elemento de configuración. |
configurationItem.resourceName |
target.resource.name |
Nombre del recurso. |
configurationItem.resourceType |
target.resource.resource_subtype |
El tipo de recurso del elemento de configuración. |
configurationItem.tags.Contact |
principal.user.user_display_name O principal.user.email_addresses |
Datos de contacto extraídos de etiquetas y analizados para obtener el correo y el nombre de usuario. |
configurationItem.tags.OS /configurationItem.tags.Os |
target.asset.platform_software.platform |
El sistema operativo de las etiquetas, asignado a la plataforma si es Windows o Linux . |
configurationItemDiff.changeType |
metadata.event_type |
El tipo de cambio, asignado a RESOURCE_WRITTEN o RESOURCE_CREATION. |
detail.accountId |
principal.group.product_object_id |
El ID de cuenta de AWS asociado a la detección. |
detail.actionDescription detail.actionName detail.description |
sec_result.description |
La descripción de la conclusión. |
detail.findings[].AwsAccountId |
principal.group.product_object_id |
El ID de cuenta de AWS asociado a la detección. |
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description |
sec_result.description |
La descripción de la conclusión. |
detail.findings[].FindingProviderFields.Severity.Label |
sec_result.severity |
Etiqueta de gravedad del resultado, convertida a mayúsculas. |
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. |
Vea abajo | Varios campos que se usan para obtener información adicional, 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. |
Vea abajo | Detalles sobre los recursos implicados en la detección. |
detail.findings[].Resources[].Id |
target.resource.product_object_id |
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 |
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 |
El título del hallazgo. |
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type |
metadata.product_event_type |
El tipo de detalle del evento. |
id |
metadata.product_log_id |
ID del evento. |
region |
target.location.name |
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 |
Su valor debe ser AWS_SECURITY_HUB . |
(Lógica del analizador) | metadata.product_name |
Su valor debe ser AWS Security Hub . |
(Lógica del analizador) | metadata.vendor_name |
Su valor debe ser AMAZON . |
(Lógica del analizador) | target.asset.attribute.cloud.environment |
Su valor debe ser AMAZON_WEB_SERVICES . |
(Lógica del analizador) | metadata.event_type |
Se define como USER_RESOURCE_ACCESS de forma predeterminada si no se asigna desde Resources[].Type o configurationItemDiff.changeType . Se define como STATUS_UPDATE si configurationItems está presente y no se ha definido ningún otro tipo de evento. Asigna el valor RESOURCE_READ si configurationItem o configurationItems están presentes y el estado es OK o ResourceDiscovered . Su valor debe ser RESOURCE_DELETION si configurationItem o configurationItems están presentes y el estado es ResourceDeleted . |
(Lógica del analizador) | metadata.description |
Su valor debe ser guardduty si se incluye detail.findings[].ProductFields.aws/guardduty/service/serviceName . |
(Lógica del analizador) | target.asset.attribute.cloud.vpc.resource_type |
Se define como VPC_NETWORK si configurationItems.relationships[].resourceId coincide con vpc . |
(Lógica del analizador) | target.resource.resource_type |
Su valor debe ser VIRTUAL_MACHINE si se incluye configurationItem o configurationItems . Se define como UNSPECIFIED si no se ha definido ningún otro tipo de recurso. |
(Lógica del analizador) | target.asset.platform_software.platform |
Asigna el valor WINDOWS o LINUX en función de si Windows o (Linux|LINUX) están presentes en el mensaje de configurationItem . En el caso de configurationItems , se define en función de configItem.tags.OS o configItem.tags.Os . |
(Lógica del analizador) | disambiguation_key |
Se añade cuando se generan varios eventos a partir de una sola entrada de registro. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.