
Plateforme de gestion d'orchestration d'objets Cloud Canary

Gestion cloud des jetons leurres — Déployez, surveillez et faites pivoter des identifiants trompeurs sur AWS et GCP pour détecter les accès non autorisés.
[!WARNING] Version Alpha — Coalmine est en développement précoce. Les fonctionnalités de base sont la priorité actuelle, et l'application ne doit pas être considérée comme entièrement testée en sécurité pour une utilisation en production.
| Fonctionnel | Développement (Instable) | À faire |
|---|---|---|
| AWS IAM User Canaries | GCP Service Account Canaries | Support Azure |
| AWS S3 Bucket Canaries | GCP Bucket Canaries | Intégration SIEM |
| Surveillance CloudTrail | Surveillance des journaux d'audit GCP | |
| Backend d'état PostgreSQL | Rotation automatique | |
| API REST (Clé API + Authentification par session) | ||
| Tableau de bord WebUI | ||
| Alertes Email & Webhook | ||
| Gestion des identifiants et des comptes | ||
| RBAC (Casbin) |
Coalmine déploie et surveille automatiquement des « jetons leurres » — des identifiants et ressources leurres qui déclenchent des alertes en cas d'accès par des attaquants.
Fournisseurs supportés :
/uicoalmine <ressource> <action>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Modifiez .env avec vos identifiants de base de données et cloud
docker compose up -d
Cela démarre l'API, le worker Celery, Redis et PostgreSQL. Le WebUI est disponible à http://localhost:8000/ui.
# Ajouter un identifiant AWS
docker compose exec app coalmine credentials add my-aws-cred AWS \
--secrets '{"access_key_id": "...", "secret_access_key": "...", "region": "us-east-1"}'
# Ajouter un compte sous cet identifiant
docker compose exec app coalmine accounts add prod-east --credential my-aws-cred \
--account-id 111111111111
# Ou synchroniser les identifiants et comptes depuis un fichier YAML
docker compose exec app coalmine credentials sync --dry-run
# Créer une destination de journalisation CloudTrail
docker compose exec app coalmine logs create my-trail AWS_CLOUDTRAIL \
--account <ACCOUNT_ID>
# Lister les ressources de journalisation
docker compose exec app coalmine logs list
# Créer un canari AWS IAM User
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# Lister les canaris
docker compose exec app coalmine canary list
# Déclencher une alerte de test
docker compose exec app coalmine canary trigger my-canary
# Attendre le cycle de surveillance (~1 min) puis vérifier les alertes
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) │
└─────────────────┘
Les commandes suivent le modèle : coalmine <ressource> <action> [options]
| Commande | Description |
|---|---|
logs create <name> <type> | Créer une ressource de journalisation |
logs list | Lister les ressources de journalisation |
logs scan --account <id> | Analyser les CloudTrails existants |
| Commande | Description |
|---|---|
alerts list [--canary <name>] | Afficher les alertes de sécurité |
| Commande | Description |
|---|---|
auth key list | Lister les clés API |
auth key add <name> | Ajouter une clé API |
auth session list | Lister les sessions actives |
| Commande | Description |
|---|---|
user list | Lister tous les utilisateurs |
user roles | Lister les rôles disponibles |
| Commande | Description |
|---|---|
task list | Afficher les tâches asynchrones récentes |
task status <task_id> | Vérifier le résultat d'une tâche |
docker compose exec app coalmine --help
docker compose exec app coalmine canary --help
L'API tourne sur http://localhost:8000 et nécessite une authentification via en-tête de clé API ou cookie de session.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# Lister les canaris
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Créer un canari
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 documentation interactive de l'API est disponible à http://localhost:8000/docs (Interface Swagger).
Toute la configuration réside dans le répertoire config/. Voir config/README.md pour plus de détails.
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"
Synchroniser avec : 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"
# Exécuter tous les tests
docker compose run --rm app pytest -v
# Exécuter uniquement les tests unitaires
docker compose run --rm app pytest tests/unit/ -v
# Exécuter les tests d'intégration
docker compose run --rm app pytest tests/integration/ -v
# Voir les logs du worker
docker compose logs -f worker
# Reconstruire après des modifications de code
docker compose build && docker compose up -d
.env ou des gestionnaires de secretsLicence Apache 2.0 — Voir le fichier LICENSE pour plus de détails.
Voir CONTRIBUTING.md pour les directives de contribution.
| Commande | Description |
|---|
canary create <name> <type> | Créer un nouveau canari |
canary list | Lister tous les canaris |
canary delete <name_or_id> | Supprimer un canari |
canary creds <name> | Obtenir les identifiants du canari |
canary trigger <name_or_id> | Tester la détection du canari |
| Commande | Description |
|---|
credentials list | Lister tous les identifiants |
credentials add <name> <provider> | Ajouter un identifiant |
credentials update <name_or_id> | Mettre à jour un identifiant |
credentials remove <name_or_id> | Supprimer un identifiant |
credentials validate <name_or_id> | Valider l'état de santé de l'identifiant |
credentials sync [--dry-run] | Synchroniser depuis la configuration YAML |
| Commande | Description |
|---|
accounts list [--credential <name>] | Lister tous les comptes |
accounts add <name> | Ajouter un compte |
accounts update <name_or_id> | Mettre à jour un compte |
accounts enable <name_or_id> | Activer un compte |
accounts disable <name_or_id> | Désactiver un compte |
accounts remove <name_or_id> | Supprimer un compte |
accounts validate <name_or_id> | Valider l'état de santé du compte |
| Type | Fournisseur | Description |
|---|
AWS_IAM_USER | AWS | Utilisateur IAM avec clés d'accès |
AWS_BUCKET | AWS | Bucket S3 avec journalisation |
GCP_SERVICE_ACCOUNT | GCP | Compte de service avec clés |
GCP_BUCKET | GCP | Bucket Cloud Storage |