
Piattaforma di gestione dell'orchestrazione di oggetti Cloud Canary

Gestione dei Canary Token su Cloud — Distribuisci, monitora e ruota credenziali ingannevoli su AWS e GCP per rilevare accessi non autorizzati.
[!WARNING] Versione Alpha — Coalmine è in fase di sviluppo iniziale. La funzionalità di base è la priorità attuale e l'applicazione non dovrebbe essere considerata completamente testata per la sicurezza per l'uso in produzione.
| Funzionale | Sviluppo (Instabile) | Da Fare |
|---|---|---|
| AWS IAM User Canaries | GCP Service Account Canaries | Supporto Azure |
| AWS S3 Bucket Canaries | GCP Bucket Canaries | Integrazione SIEM |
| Monitoraggio CloudTrail | Monitoraggio Log Audit GCP | |
| Backend di Stato PostgreSQL | Rotazione Automatica | |
| API REST (Chiave API + Autenticazione Sessione) | ||
| Dashboard WebUI | ||
| Avvisi Email e Webhook | ||
| Gestione Credenziali e Account | ||
| RBAC (Casbin) |
Coalmine distribuisce e monitora automaticamente "canary token" — credenziali e risorse esca che attivano avvisi quando vengono acceduti da parte degli aggressori.
Provider Supportati:
/uicoalmine <risorsa> <azione>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Modifica .env con le tue credenziali del database e cloud
docker compose up -d
Questo avvia API, worker Celery, Redis e PostgreSQL. La WebUI è disponibile su http://localhost:8000/ui.
# Aggiungi una credenziale AWS
docker compose exec app coalmine credentials add my-aws-cred AWS \
--secrets '{"access_key_id": "...", "secret_access_key": "...", "region": "us-east-1"}'
# Aggiungi un account sotto quella credenziale
docker compose exec app coalmine accounts add prod-east --credential my-aws-cred \
--account-id 111111111111
# Oppure sincronizza credenziali e account da un file YAML
docker compose exec app coalmine credentials sync --dry-run
# Crea una destinazione di logging CloudTrail
docker compose exec app coalmine logs create my-trail AWS_CLOUDTRAIL \
--account <ACCOUNT_ID>
# Elenca le risorse di logging
docker compose exec app coalmine logs list
# Crea un canary utente IAM AWS
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# Elenca i canary
docker compose exec app coalmine canary list
# Attiva un avviso di test
docker compose exec app coalmine canary trigger my-canary
# Attendi il ciclo di monitoraggio (~1 min) poi controlla gli avvisi
docker compose exec app coalmine alerts list
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ CLI │ │ REST API │ │ WebUI │
│ (coalmine) │ │ (FastAPI) │ │ (React) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└────────┬────────┴────────┬────────┘
│ │
│ ┌──────▼──────┐
│ │Auth / RBAC │
│ │ (Casbin) │
│ └──────┬──────┘
│ │
┌──────▼─────────────────▼──────┐
│ Celery Workers │
│ (Canary · Monitoraggio · Logs)│
└──────────────┬────────────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌─────▼─────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Template │ │ Monitor │ │ Notifiche │
│ OpenTofu │ │(CloudTrail/ │ │(Email/Hook/ │
│ │ │ Log Audit) │ │ Syslog) │
└─────┬─────┘ └──────┬──────┘ └─────────────┘
│ │
┌─────▼─────┐ ┌──────▼──────┐
│ AWS / GCP │ │ Avvisi │
│(Risorse) │ │ (DB) │
└───────────┘ └─────────────┘
┌─────────────────┐
│ PostgreSQL │
│ (Inventario) │
└────────┬────────┘
│
┌────────▼────────┐
│ Celery Beat │
│ (Pianificatore) │
└─────────────────┘
I comandi seguono lo schema: coalmine <risorsa> <azione> [opzioni]
| Comando | Descrizione |
|---|---|
logs create <nome> <tipo> | Crea una risorsa di logging |
logs list | Elenca le risorse di logging |
logs scan --account <id> | Scansiona CloudTrail esistenti |
| Comando | Descrizione |
|---|---|
alerts list [--canary <nome>] | Visualizza gli avvisi di sicurezza |
| Comando | Descrizione |
|---|---|
auth key list | Elenca le chiavi API |
auth key add <nome> | Aggiungi una chiave API |
auth session list | Elenca le sessioni attive |
| Comando | Descrizione |
|---|---|
user list | Elenca tutti gli utenti |
user roles | Elenca i ruoli disponibili |
| Comando | Descrizione |
|---|---|
task list | Visualizza le attività asincrone recenti |
task status <task_id> | Controlla il risultato di un'attività |
docker compose exec app coalmine --help
docker compose exec app coalmine canary --help
L'API è disponibile su http://localhost:8000 e richiede autenticazione tramite header chiave API o cookie di sessione.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# Elenca canary
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Crea un canary
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 documentazione interattiva dell'API è disponibile su http://localhost:8000/docs (Swagger UI).
Tutta la configurazione risiede nella directory config/. Vedi config/README.md per i dettagli.
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"
Sincronizza 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"
# Esegui tutti i test
docker compose run --rm app pytest -v
# Esegui solo test unitari
docker compose run --rm app pytest tests/unit/ -v
# Esegui test di integrazione
docker compose run --rm app pytest tests/integration/ -v
# Visualizza i log del worker
docker compose logs -f worker
# Ricostruisci dopo modifiche al codice
docker compose build && docker compose up -d
.env o gestori di segretiLicenza Apache 2.0 — Vedi il file LICENSE per i dettagli.
Vedi CONTRIBUTING.md per le linee guida sui contributi.
| Comando | Descrizione |
|---|
canary create <nome> <tipo> | Crea un nuovo canary |
canary list | Elenca tutti i canary |
canary delete <nome_o_id> | Elimina un canary |
canary creds <nome> | Ottieni le credenziali del canary |
canary trigger <nome_o_id> | Testa il rilevamento del canary |
| Comando | Descrizione |
|---|
credentials list | Elenca tutte le credenziali |
credentials add <nome> <provider> | Aggiungi una credenziale |
credentials update <nome_o_id> | Aggiorna una credenziale |
credentials remove <nome_o_id> | Rimuovi una credenziale |
credentials validate <nome_o_id> | Convalida lo stato della credenziale |
credentials sync [--dry-run] | Sincronizza dalla configurazione YAML |
| Comando | Descrizione |
|---|
accounts list [--credential <nome>] | Elenca tutti gli account |
accounts add <nome> | Aggiungi un account |
accounts update <nome_o_id> | Aggiorna un account |
accounts enable <nome_o_id> | Abilita un account |
accounts disable <nome_o_id> | Disabilita un account |
accounts remove <nome_o_id> | Rimuovi un account |
accounts validate <nome_o_id> | Convalida lo stato dell'account |
| Tipo | Provider | Descrizione |
|---|
AWS_IAM_USER | AWS | Utente IAM con chiavi di accesso |
AWS_BUCKET | AWS | Bucket S3 con logging |
GCP_SERVICE_ACCOUNT | GCP | Account di servizio con chiavi |
GCP_BUCKET | GCP | Bucket Cloud Storage |