Servidor MCP de Amazon Security Lake
Un servidor MCP (Model Context Protocol) para consultar los datos de Amazon Security Lake mediante AWS Athena. Este servidor proporciona acceso estructurado a los datos de seguridad normalizados por OCSF almacenados en Security Lake, lo que permite a los asistentes y aplicaciones de IA buscar direcciones IP, hallazgos de GuardDuty y explorar las fuentes de datos disponibles.
Características
- Búsqueda de direcciones IP: Búsqueda de direcciones IP en todas las fuentes de datos de Security Lake (origen y destino)
- Hallazgos de GuardDuty: Consulta de hallazgos de seguridad de GuardDuty con filtrado por ID, gravedad y tipo
- Descubrimiento de fuentes de datos: Enumere y analice las fuentes y tablas de datos de Security Lake disponibles
- Cumplimiento de OCSF: Validación de esquemas OCSF (Open Cybersecurity Schema Framework) integrada
- Integración con AWS: Integración perfecta con AWS Athena, S3 e IAM
- Seguridad ante todo: validación de entradas, desinfección de consultas y acceso con privilegios mínimos
Requisitos
- Python 3.10 o superior
- Cuenta de AWS con Amazon Security Lake configurado
- Credenciales de AWS configuradas (rol de IAM, perfil o variables de entorno)
- Acceso a AWS Athena y a la base de datos de Security Lake
Instalación
Opción 1: Usando pip (recomendado)
pip install amazon-security-lake-mcp
Opción 2: Desde el código fuente
git clone <repository-url> cd amazon-security-lake-mcp pip install -e
Opción 3: Usando Docker
docker build -t amazon-security-lake-mcp . docker run -it amazon-security-lake-mcp
Configuración
Descubrimiento automático de recursos (recomendado)
El servidor MCP puede descubrir automáticamente sus recursos de Security Lake Simplemente configure sus credenciales de AWS y el servidor encontrará:
- Buckets S3 de Security Lake para resultados de consultas de Athena
- Nombres de bases de datos de Security Lake Glue
- Permisos y configuraciones IAM apropiados
Configuración mínima:
# Sólo se requiere la región de AWS para el auto-descubrimiento export ASL_MCP_AWS_REGION="us-east-1" export ASL_MCP_AWS_PROFILE="your-aws-profile" # Opcional si se usan credenciales por defecto
Probar descubrimiento:
# Después de la instalación, prueba de descubrimiento de recursos python -c " from asl_mcp_server.aws.discovery import AWSResourceDiscovery discovery = AWSResourceDiscovery('us-east-1') print(discovery.get_discovery_summary()) "
Configuración manual
Si prefiere la configuración manual o el autodescubrimiento falla:
# Obligatorio export ASL_MCP_ATHENA_OUTPUT_LOCATION="s3://your-athena-results-bucket/path/" # Opcional (con valores por defecto) export ASL_MCP_AWS_REGION="us-east-1" export ASL_MCP_AWS_PROFILE="your-aws-profile" export ASL_MCP_SECURITY_LAKE_DATABASE="amazon_security_lake_glue_db" export ASL_MCP_ATHENA_WORKGROUP="primary" export ASL_MCP_AUTO_DISCOVER_RESOURCES="false" # Desactivar auto-discovery export ASL_MCP_LOG_LEVEL="INFO" export ASL_MCP_MAX_QUERY_RESULTS="1000" export ASL_MCP_QUERY_TIMEOUT_SECONDS="300"
Archivo de configuración
Cree un archivo .env
en el directorio de su proyecto:
# Configuración mínima (auto-descubrimiento habilitado) ASL_MCP_AWS_REGION=us-east-1 ASL_MCP_AWS_PROFILE=security-lake-user # O configuración manual completa ASL_MCP_ATHENA_OUTPUT_LOCATION=s3://my-athena-results/ ASL_MCP_AWS_REGION=us-east-1 ASL_MCP_SECURITY_LAKE_DATABASE=amazon_security_lake_glue_db ASL_MCP_AUTO_DISCOVER_RESOURCES=false ASL_MCP_LOG_LEVEL=INFO
Permisos de AWS
El servidor MCP requiere los siguientes permisos de AWS:
{ "Versión": "2012-10-17", "Statement": [ {"Effect": "Permitir", "Acción": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata" ], "Resource": "*" }, {"Effect": "Permitir", "Acción": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::aws-security-data-lake-*", "arn:aws:s3:::aws-security-data-lake-*/*", "arn:aws:s3:::your-athena-results-bucket", "arn:aws:s3:::your-athena-results-bucket/*" ] }, { "Effect": "Permitir", "Acción": [ "glue:GetDatabase", "glue:GetTable", "glue:GetPartitions" ], "Resource": "*" } ] }
Uso
Integración con Claude Desktop
Para utilizar este servidor MCP con Claude Desktop, es necesario configurarlo en los ajustes de Claude Desktop.
Paso 1: Instalar el servidor MCP
Opción A: Usando pipx (Recomendado para Claude Desktop)
# Instale pipx si no lo tiene brew install pipx # macOS # o: pip install --user pipx # Otros sistemas # Instale el servidor MCP globalmente pipx install amazon-security-lake-mcp # O instale desde el código fuente git clone <repository-url> cd amazon-security-lake-mcp pipx install -e
Opción B: Usar pip con entorno virtual
# Crear entorno virtual python3 -m venv asl-mcp-env source asl-mcp-env/bin/activate # Linux/macOS # o: asl-mcp-env\Scripts\activate # Windows # Instalar el paquete pip install amazon-security-lake-mcp
Encuentre la ruta del comando instalado:
# Para la instalación pipx que asl-mcp-server # Salida típica: /Usuarios/nombredeusuario/.local/bin/asl-mcp-server # Para instalación pip en venv which asl-mcp-server # (con venv activado)
Paso 2: Configurar Claude Desktop
Añada el servidor MCP a la configuración de Claude Desktop. La ubicación del archivo de configuración depende de su sistema operativo:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
Opción A: Usar la ruta completa al comando (Recomendado)
{ "mcpServers": { "amazon-security-lake": { "command": "/Usuarios/nombre_usuario/.local/bin/asl-mcp-server", "env": { "ASL_MCP_AWS_REGION": "us-east-1", "ASL_MCP_AWS_PROFILE": "your-aws-profile", "ASL_MCP_LOG_LEVEL": "INFO" } } } }
Sustituya /Usuarios/nombredeusuario/.local/bin/asl-mcp-server
por la ruta real desde la que asl-mcp-server
Opción B: Usar módulo Python (Más fiable)
{ "mcpServers": { "amazon-security-lake": { "command": "/opt/homebrew/bin/python3", "args": ["-m", "asl_mcp_server.server"], "cwd": "/path/to/amazon-security-lake-mcp", "env": { "ASL_MCP_AWS_REGION": "us-east-1", "ASL_MCP_AWS_PROFILE": "your-aws-profile", "PYTHONPATH": "/path/to/amazon-security-lake-mcp/src", "ASL_MCP_LOG_LEVEL": "INFO" } } } }
Opción C: Usando la ruta de Python (si no está instalado globalmente)
{ "mcpServers": { "amazon-security-lake": { "command": "python", "args": ["-m", "asl_mcp_server.server"], "cwd": "/path/to/amazon-security-lake-mcp", "env": { "ASL_MCP_AWS_REGION": "us-east-1", "ASL_MCP_AWS_PROFILE": "your-aws-profile" } } }
Paso 3: Reinicie Claude Desktop
Tras guardar el archivo de configuración, reinicie Claude Desktop por completo (salga de la aplicación y vuelva a iniciarla).
Paso 4: Verificar la conexión
En Claude Desktop, ahora puede hacer preguntas como:
- "¿Puede descubrir mis recursos de Security Lake?"
- "Buscar la dirección IP 192.168.1.100 en mis datos de seguridad"
- "Muéstrame los hallazgos recientes de GuardDuty de alta gravedad"
- "¿Qué fuentes de datos están disponibles en mi lago de seguridad?"
Ejemplo de conversación de Claude Desktop
Usuario: ¿Puedes ayudarme a investigar incidentes de seguridad en mi entorno de AWS? Claude: ¡Puedo ayudarte a investigar incidentes de seguridad utilizando tus datos de Amazon Security Lake! Permítame comenzar descubriendo sus recursos de Security Lake y luego podemos buscar indicadores específicos [Claude utiliza la herramienta discover_aws_resources] Encontré su configuración de Security Lake: - Base de datos: amazon_security_lake_glue_db_us_east_1 - Región: us-east-1 - Resultados de Athena: s3://aws-athena-query-results-123456789012-us-east-1/ ¿Qué le gustaría investigar? Puedo 1. Buscar direcciones IP específicas Buscar resultados de GuardDuty 3. Mostrar las fuentes de datos disponibles 4. Usuario: Buscar cualquier actividad relacionada con la dirección IP 203.0.113.45 Claude: [Utiliza la herramienta search_ip_addresses para consultar los datos de Security Lake] He encontrado 3 eventos de seguridad relacionados con la IP 203.0.113.45: ..
Configuración avanzada de Claude Desktop
Para uso en producción, considere estas configuraciones adicionales:
Configuración específica del entorno:
{ "mcpServers": { "security-lake-prod": { "command": "asl-mcp-server", "env": { "ASL_MCP_AWS_REGION": "us-east-1", "ASL_MCP_AWS_PROFILE": "prod-security-readonly", "ASL_MCP_MAX_QUERY_RESULTS": "500", "ASL_MCP_QUERY_TIMEOUT_SECONDS": "180" } }, "security-lake-dev": { "command": "asl-mcp-server", "env": { "ASL_MCP_AWS_REGION": "us-west-2", "ASL_MCP_AWS_PROFILE": "dev-security", "ASL_MCP_LOG_LEVEL": "DEBUG" } } } }
Inicio del servidor MCP (independiente)
También puede ejecutar el servidor de forma autónoma para realizar pruebas:
# Usando el comando instalado asl-mcp-server # O usando el módulo Python python -m asl_mcp_server.server
Herramientas disponibles
1. Búsqueda de direcciones IP
Buscar direcciones IP en los datos de Security Lake:
{ "herramienta": "buscar_direcciones_ip", "argumentos": { "dirección_ip": "192.168.1.100", "start_time": "2024-01-15T00:00:00Z", "end_time": "2024-01-15T23:59:59Z", "sources": ["guardduty", "cloudtrail"], "limit": 100 } }
Parámetros:
ip_address
(obligatorio): Dirección IP a buscar (IPv4 o IPv6)start_time
(opcional): Hora de inicio en formato ISO (por defecto: hace 7 días)hora_fin
(opcional): Hora de finalización en formato ISO (por defecto: ahora)sources
(opcional): Fuentes de datos en las que buscar (guardduty, cloudtrail, vpcflow, etc.)limit
(opcional): Máximo de resultados a devolver (por defecto: 100, máx: 1000)
2. Buscar hallazgos de GuardDuty
Buscar hallazgos de seguridad de GuardDuty:
{ "herramienta": "search_guardduty_findings", "arguments": { "finding_id": "12345abc-def0-1234-5678-90abcdef1234", "severity": "High", "finding_type": "Trojan:EC2/MaliciousIP", "start_time": "2024-01-15T00:00:00Z", "end_time": "2024-01-15T23:59:59Z", "limit": 50 } }
Parámetros:
finding_id
(opcional): ID de hallazgo específico de GuardDutyseverity
(opcional): Nivel de gravedad (Crítico, Alto, Medio, Bajo, Informativo)finding_type
(opcional): Tipo de hallazgo a buscarstart_time
(opcional): Hora de inicio en formato ISO (por defecto: hace 7 días)hora_fin
(opcional): Hora final en formato ISO (por defecto: ahora)limit
(opcional): Máximo de resultados a devolver (por defecto: 100, máx: 1000)
3. Lista de fuentes de datos
Descubre las fuentes de datos de Security Lake disponibles:
{ "tool": "list_data_sources", "arguments": { "include_schema": true }
Parámetros:
include_schema
(opcional): Incluir información detallada del esquema de la tabla (por defecto: false)
4. Descubrir recursos de AWS
Descubra automáticamente los recursos de Security Lake en su cuenta de AWS:
{ "tool": "discover_aws_resources", "arguments": {} }
Esta herramienta escanea tu cuenta de AWS para encontrar:
- Buckets S3 y bases de datos de Security Lake
- Ubicaciones de salida de Athena
- Recomendaciones de configuración
- Validación de la configuración
5. Búsqueda de seguridad universal
Búsqueda inteligente en todas las fuentes de datos disponibles de Security Lake:
{"tool": "universal_security_search", "arguments": {"query_type": "hallazgos", "filtros": { "severity": "High", "start_time": "2024-01-15T00:00:00Z", "end_time": "2024-01-15T23:59:59Z" }, "limit": 50 } }
Tipos de consulta:
hallazgos
: Buscar hallazgos de seguridad (GuardDuty, Security Hub)red
: Buscar actividad de red (VPC Flow, DNS, Route53)api_calls
: Buscar actividad de API (CloudTrail)ip_search
: Búsqueda por dirección IP en todas las fuentes
Características principales:
- Se adapta automáticamente a las fuentes de datos disponibles
- Compatible con los esquemas OCSF 1.0 y 2.0
- Fallback inteligente (por ejemplo, Security Hub para datos GuardDuty)
- Formato de resultados unificado para diferentes fuentes
6. Conexión de prueba
Verifique la conectividad con los servicios de AWS:
{ "herramienta": "test_connection", "arguments": {} }
Formato de respuesta
Todas las herramientas devuelven respuestas en un formato coherente:
{ "éxito": true, "error": null, "resultados": [...], "metadata": { "query_info": {...}, "summary": {...} }, "count": 10 }
Ejemplo de respuesta - Búsqueda IP
{ "success": true, "results": [ { "timestamp": "2024-01-15T10:30:00Z", "event_type": "Network Activity", "severity": "Medium", "ip_context": { "role": "source", "direction": "outbound" }, "network_info": { "source_ip": "192.168.1.100", "destination_ip": "203.0.113.45", "source_port": 3456, "destination_port": 443 }, "aws_context": { "account_id": "123456789012", "region": "us-east-1" }, "product_info": { "name": "VPC Flow Logs", "vendor": "AWS" } } ], "metadata": { "summary": { "total_events": 1, "most_common_event_type": "Network Activity", "highest_severity": "Medium" } }, "count": 1 }
Desarrollo
Configuración del entorno de desarrollo
# Clonar el repositorio git clone <repository-url> cd amazon-security-lake-mcp # Instalar dependencias de desarrollo pip install -e ".[dev]" # Instalar ganchos pre-commit pre-commit install
Ejecutar pruebas
# Ejecutar todas las pruebas pytest # Ejecutar con cobertura pytest --cov=asl_mcp_server --cov-report=html # Ejecutar categorías de pruebas específicas pytest -m unit # Sólo pruebas unitarias pytest -m integration # Sólo pruebas de integración pytest -m slow # Pruebas de larga duración
Calidad del código
# Formatear código negro src tests Pelar código ruff src tests Comprobación de tipo mypy src
Consideraciones de seguridad
Validación de entrada
- Todas las direcciones IP se validan antes de la consulta
- Los parámetros de consulta se desinfectan para evitar ataques de inyección
- Los intervalos de tiempo se validan para que sean razonables
Control de acceso
- Utiliza AWS IAM para la autenticación y autorización
- Admite patrones de acceso con privilegios mínimos
- Los resultados de las consultas se limitan para evitar el agotamiento de los recursos
Protección de datos
- No se registran datos confidenciales
- Los resultados de las consultas se pueden filtrar para eliminar información confidencial
- Admite el cifrado en tránsito y en reposo a través de los servicios de AWS
Solución de problemas
Problemas comunes
1. Comando no encontrado (error ENOENT)
Error: spawn asl-mcp-server ENOENT
Solución: Claude Desktop no puede encontrar el comando asl-mcp-server
. Utilice una de estas soluciones:
Arreglo A: Utilizar la ruta de comandos completa
# Encontrar la ubicación del comando que asl-mcp-server # Salida: /Usuarios/nombredeusuario/.local/bin/asl-mcp-server # Actualice la configuración de Claude Desktop con la ruta completa { "mcpServers": { "amazon-security-lake": { "command": "/Usuarios/nombredeusuario/.local/bin/asl-mcp-server", "env": { ... } } } }
Arreglo B: Usar módulo Python (más fiable)
{ "mcpServers": { "amazon-security-lake": { "command": "/opt/homebrew/bin/python3", "args": ["-m", "asl_mcp_server.server"], "cwd": "/ruta/para/amazon-seguridad-lago-mcp", "env": {"PYTHONPATH": "/path/to/amazon-security-lake-mcp/src" } } }
2. Credenciales de AWS no encontradas
Error: Credenciales de AWS no configuradas
Solución: Configure las credenciales de AWS utilizando uno de estos métodos:
- Configurar la variable de entorno
AWS_PROFILE
- Configurar el archivo
~/.aws/credentials
- Utilizar roles IAM (recomendado para EC2/Lambda)
- Establecer las variables de entorno
AWS_ACCESS_KEY_ID
yAWS_SECRET_ACCESS_KEY
2. Fallo en la detección automática
Error: athena_output_location no pudo ser auto-descubierto y no fue proporcionado
Solución: Active la configuración manual o cree los recursos necesarios:
Opción A: Utilice la configuración manual
export ASL_MCP_AUTO_DISCOVER_RESOURCES="false" export ASL_MCP_ATHENA_OUTPUT_LOCATION="s3://tu-bucket/athena-results/" export ASL_MCP_SECURITY_LAKE_DATABASE="amazon_security_lake_glue_db"
Opción B: Crear un bucket para los resultados de Athena
# Crear un bucket para los resultados de Athena aws s3 mb s3://aws-athena-query-results-$(aws sts get-caller-identity --query Account --output text)-us-east-1
Opción C: Ejecutar la herramienta de descubrimientoUtilice la herramienta discover_aws_resources
para ver lo que falta y obtener recomendaciones específicas.
3. Base de datos de Security Lake no encontrada
Error: La base de datos 'amazon_security_lake_glue_db' no está disponible
Solución:
- Verifique que Security Lake está habilitado en su cuenta de AWS
- Compruebe que el nombre de la base de datos es correcto
- Asegúrese de que tiene permisos para acceder al catálogo Glue
4. Tiempo de espera de la consulta
Error: Tiempo de espera de la consulta tras 300 segundos
Solución:
- Aumentar
ASL_MCP_QUERY_TIMEOUT_SECONDS
- Utilice intervalos de tiempo más específicos para reducir la exploración de datos
- Añada cláusulas WHERE adecuadas para filtrar los resultados
Optimización del rendimiento
- Utilice intervalos de tiempo específicos: Especifique siempre
start_time
yend_time
para aprovechar la partición - Limite losresultados: Utilice valores
límite
apropiados para evitar conjuntos de resultados grandes - Filtrar por fuente: Especifique el parámetro de
fuentes
para consultar sólo las tablas pertinentes - Controlar los costes: Las consultas de gran tamaño pueden generar gastos significativos para Athena
Depuración
Habilitar el registro de depuración:
export ASL_MCP_LOG_LEVEL=DEBUG
Esto proporcionará información detallada sobre:
- Construcción y ejecución de consultas
- Llamadas a la API de AWS
- Procesamiento de resultados
- Detalles de errores
Contribución
- Crear una bifurcación del repositorio
- Cree una rama de características
(git checkout -b feature/amazing-feature
) - Realiza tus cambios
- Añade pruebas para la nueva funcionalidad
- Asegúrese de que todas las pruebas pasan
(pytest
) - Confirmar los cambios
(git commit -m 'Add amazing feature'
) - Empuja a la rama
(git push origin feature/amazing-feature
) - Abrir una Pull Request
Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Soporte
Para cuestiones y preguntas:
- Abrir una incidencia en GitHub
- Consulte la sección de solución de problemas anterior
- Revise la documentación de AWS Security Lake
- Consulte la especificación OCSF
Proyectos relacionados
Registro de cambios
v0.1.0 (Versión inicial)
- Funcionalidad de búsqueda de direcciones IP
- Búsqueda de hallazgos GuardDuty
- Búsqueda de fuentes de datos
- Validación del esquema OCSF
- Completo conjunto de pruebas
- Integración en AWS con gestión adecuada de errores