
Plataforma de gestión de orquestación de objetos Cloud Canary

Gestión de tokens canary en la nube — Despliega, monitoriza y rota credenciales señuelo en AWS y GCP para detectar accesos no autorizados.
[!WARNING] Versión Alfa — Coalmine está en desarrollo temprano. La funcionalidad básica es la prioridad actual, y la aplicación no debe considerarse completamente probada en seguridad para uso en producción.
| Funcional | Desarrollo (Inestable) | Por Hacer |
|---|---|---|
| Canarios de Usuario IAM de AWS | Canarios de Cuenta de Servicio GCP | Soporte de Azure |
| Canarios de Bucket S3 de AWS | Canarios de Bucket GCP | Integración SIEM |
| Monitoreo de CloudTrail | Monitoreo de Registros de Auditoría GCP | |
| Backend de Estado PostgreSQL | Rotación Automática | |
| API REST (Clave API + Autenticación de Sesión) | ||
| Panel WebUI | ||
| Alertas por Correo y Webhook | ||
| Gestión de Credenciales y Cuentas | ||
| RBAC (Casbin) |
Coalmine despliega y monitoriza automáticamente "tokens canary" — credenciales y recursos señuelo que generan alertas cuando un atacante accede a ellos.
Proveedores soportados:
/uicoalmine <recurso> <acción>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Edita .env con tu base de datos y credenciales de la nube
docker compose up -d
Esto inicia la API, el worker de Celery, Redis y PostgreSQL. El WebUI está disponible en http://localhost:8000/ui.
# Añadir una credencial de AWS
docker compose exec app coalmine credentials add my-aws-cred AWS \
--secrets '{"access_key_id": "...", "secret_access_key": "...", "region": "us-east-1"}'
# Añadir una cuenta bajo esa credencial
docker compose exec app coalmine accounts add prod-east --credential my-aws-cred \
--account-id 111111111111
# O sincronizar credenciales y cuentas desde configuración YAML
docker compose exec app coalmine credentials sync --dry-run
# Crear destino de registro CloudTrail
docker compose exec app coalmine logs create my-trail AWS_CLOUDTRAIL \
--account <ACCOUNT_ID>
# Listar recursos de registro
docker compose exec app coalmine logs list
# Crear un canario de Usuario IAM de AWS
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# Listar canarios
docker compose exec app coalmine canary list
# Disparar una alerta de prueba
docker compose exec app coalmine canary trigger my-canary
# Esperar el ciclo de monitoreo (~1 min) y luego revisar alertas
docker compose exec app coalmine alerts list
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ CLI │ │ REST API │ │ WebUI │
│ (coalmine) │ │ (FastAPI) │ │ (React) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└────────┬────────┴────────┬────────┘
│ │
│ ┌──────▼──────┐
│ │Auth / RBAC │
│ │ (Casbin) │
│ └──────┬──────┘
│ │
┌──────▼─────────────────▼──────┐
│ Celery Workers │
│ (Canary · Monitoring · Logs) │
└──────────────┬────────────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌─────▼─────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ OpenTofu │ │ Monitors │ │Notifications│
│ Templates │ │(CloudTrail/ │ │(Email/Hook/ │
│ │ │ Audit Logs) │ │ Syslog) │
└─────┬─────┘ └──────┬──────┘ └─────────────┘
│ │
┌─────▼─────┐ ┌──────▼──────┐
│ AWS / GCP │ │ Alerts │
│(Resources)│ │ (DB) │
└───────────┘ └─────────────┘
┌─────────────────┐
│ PostgreSQL │
│ (Inventory) │
└────────┬────────┘
│
┌────────▼────────┐
│ Celery Beat │
│ (Scheduler) │
└─────────────────┘
Los comandos siguen el patrón: coalmine <recurso> <acción> [opciones]
| Comando | Descripción |
|---|---|
logs create <name> <type> | Crear recurso de registro |
logs list | Listar recursos de registro |
logs scan --account <id> | Escanear CloudTrails existentes |
| Comando | Descripción |
|---|---|
alerts list [--canary <name>] | Ver alertas de seguridad |
| Comando | Descripción |
|---|---|
auth key list | Listar claves API |
auth key add <name> | Añadir una clave API |
auth session list | Listar sesiones activas |
| Comando | Descripción |
|---|---|
user list | Listar todos los usuarios |
user roles | Listar roles disponibles |
| Comando | Descripción |
|---|---|
task list | Ver tareas asíncronas recientes |
task status <task_id> | Consultar resultado de tarea |
docker compose exec app coalmine --help
docker compose exec app coalmine canary --help
La API se ejecuta en http://localhost:8000 y requiere autenticación mediante cabecera de clave API o cookie de sesión.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# Listar canarios
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Crear un canario
curl -X POST -H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"name": "api-canary", "resource_type": "AWS_IAM_USER", "account_id": "...", "logging_id": "..."}' \
http://localhost:8000/api/v1/canaries
La documentación interactiva de la API está disponible en http://localhost:8000/docs (Swagger UI).
Toda la configuración reside en el directorio config/. Consulta config/README.md para más detalles.
config/credentials.yaml)credentials:
my-aws-cred:
provider: AWS
auth_type: STATIC
secrets:
access_key_id: ${AWS_ACCESS_KEY_ID}
secret_access_key: ${AWS_SECRET_ACCESS_KEY}
region: ${AWS_DEFAULT_REGION:-us-east-1}
accounts:
- name: prod-east
account_id: "111111111111"
Sincronizar con: docker compose exec app coalmine credentials sync
config/alert_outputs.yaml)outputs:
email_admin:
type: "email"
enabled: true
smtp_host: "smtp.example.com"
smtp_port: 587
to_addrs: ["[email protected]"]
webhook_siem:
type: "webhook"
enabled: true
url: "https://siem.example.com/webhook"
# Ejecutar todas las pruebas
docker compose run --rm app pytest -v
# Ejecutar solo pruebas unitarias
docker compose run --rm app pytest tests/unit/ -v
# Ejecutar pruebas de integración
docker compose run --rm app pytest tests/integration/ -v
# Ver registros del worker
docker compose logs -f worker
# Reconstruir tras cambios de código
docker compose build && docker compose up -d
.env o gestores de secretosApache License 2.0 — Consulta el archivo LICENSE para más detalles.
Consulta CONTRIBUTING.md para las pautas de contribución.
| Comando | Descripción |
|---|
canary create <name> <type> | Crear un nuevo canario |
canary list | Listar todos los canarios |
canary delete <name_or_id> | Eliminar un canario |
canary creds <name> | Obtener credenciales del canario |
canary trigger <name_or_id> | Probar detección del canario |
| Comando | Descripción |
|---|
credentials list | Listar todas las credenciales |
credentials add <name> <provider> | Añadir una credencial |
credentials update <name_or_id> | Actualizar una credencial |
credentials remove <name_or_id> | Eliminar una credencial |
credentials validate <name_or_id> | Validar estado de la credencial |
credentials sync [--dry-run] | Sincronizar desde configuración YAML |
| Comando | Descripción |
|---|
accounts list [--credential <name>] | Listar todas las cuentas |
accounts add <name> | Añadir una cuenta |
accounts update <name_or_id> | Actualizar una cuenta |
accounts enable <name_or_id> | Habilitar una cuenta |
accounts disable <name_or_id> | Deshabilitar una cuenta |
accounts remove <name_or_id> | Eliminar una cuenta |
accounts validate <name_or_id> | Validar estado de la cuenta |
| Tipo | Proveedor | Descripción |
|---|
AWS_IAM_USER | AWS | Usuario IAM con claves de acceso |
AWS_BUCKET | AWS | Bucket S3 con registro |
GCP_SERVICE_ACCOUNT | GCP | Cuenta de servicio con claves |
GCP_BUCKET | GCP | Bucket de Cloud Storage |