
Plataforma de Gerenciamento e Orquestração de Objetos Cloud Canary

Gerenciamento de Tokens Canary na Nuvem — Implante, monitore e rotacione credenciais enganosas em AWS e GCP para detectar acesso não autorizado.
[!WARNING] Versão Alpha — O Coalmine está em desenvolvimento inicial. A funcionalidade básica é a prioridade atual, e a aplicação não deve ser considerada totalmente testada em segurança para uso em produção.
| Funcional | Em Desenvolvimento (Instável) | A Fazer |
|---|
| Canários de Usuário IAM da AWS | Canários de Conta de Serviço do GCP | Suporte Azure |
| Canários de Bucket S3 da AWS | Canários de Bucket do GCP | Integração SIEM |
| Monitoramento CloudTrail | Monitoramento de Logs de Auditoria do GCP | |
| Backend de Estado PostgreSQL | Rotação Automática | |
| API REST (Chave de API + Autenticação por Sessão) | ||
| Painel WebUI | ||
| Alertas por E-mail e Webhook | ||
| Gerenciamento de Credenciais e Contas | ||
| RBAC (Casbin) |
O Coalmine implanta e monitora automaticamente "tokens canary" — credenciais e recursos isca que disparam alertas quando acessados por atacantes.
Provedores Suportados:
/uicoalmine <recurso> <ação>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Edite .env com suas credenciais de banco de dados e nuvem
docker compose up -d
Isso inicia a API, o worker Celery, o Redis e o PostgreSQL. O WebUI estará disponível em http://localhost:8000/ui.
# Adicione uma credencial AWS
docker compose exec app coalmine credentials add my-aws-cred AWS \
--secrets '{"access_key_id": "...", "secret_access_key": "...", "region": "us-east-1"}'
# Adicione uma conta sob essa credencial
docker compose exec app coalmine accounts add prod-east --credential my-aws-cred \
--account-id 111111111111
# Ou sincronize credenciais e contas a partir de um arquivo YAML
docker compose exec app coalmine credentials sync --dry-run
# Crie um destino de log CloudTrail
docker compose exec app coalmine logs create my-trail AWS_CLOUDTRAIL \
--account <ACCOUNT_ID>
# Liste os recursos de log
docker compose exec app coalmine logs list
# Crie um canary de usuário IAM da AWS
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# Liste canaries
docker compose exec app coalmine canary list
# Dispare um alerta de teste
docker compose exec app coalmine canary trigger my-canary
# Aguarde o ciclo de monitoramento (~1 min) e depois verifique os 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) │
└─────────────────┘
Os comandos seguem o padrão: coalmine <recurso> <ação> [opções]
| Comando | Descrição |
|---|---|
canary create <nome> <tipo> | Cria um novo canary |
canary list | Lista todos os canaries |
canary delete <nome_ou_id> | Exclui um canary |
canary creds <nome> | Obtém as credenciais do canary |
canary trigger <nome_ou_id> | Testa a detecção do canary |
| Comando | Descrição |
|---|---|
credentials list | Lista todas as credenciais |
credentials add <nome> <provedor> | Adiciona uma credencial |
credentials update <nome_ou_id> | Atualiza uma credencial |
credentials remove <nome_ou_id> | Remove uma credencial |
credentials validate <nome_ou_id> | Valida a saúde da credencial |
credentials sync [--dry-run] | Sincroniza a partir de configuração YAML |
| Comando | Descrição |
|---|---|
accounts list [--credential <nome>] | Lista todas as contas |
accounts add <nome> | Adiciona uma conta |
accounts update <nome_ou_id> | Atualiza uma conta |
accounts enable <nome_ou_id> | Ativa uma conta |
accounts disable <nome_ou_id> | Desativa uma conta |
accounts remove <nome_ou_id> | Remove uma conta |
accounts validate <nome_ou_id> | Valida a saúde da conta |
| Comando | Descrição |
|---|---|
logs create <nome> <tipo> | Cria recurso de log |
logs list | Lista recursos de log |
logs scan --account <id> | Escaneia CloudTrails existentes |
| Comando | Descrição |
|---|---|
alerts list [--canary <nome>] | Visualiza alertas de segurança |
| Comando | Descrição |
|---|---|
auth key list | Lista chaves de API |
auth key add <nome> | Adiciona uma chave de API |
auth session list | Lista sessões ativas |
| Comando | Descrição |
|---|---|
user list | Lista todos os usuários |
user roles | Lista as funções disponíveis |
| Comando | Descrição |
|---|---|
task list | Visualiza tarefas assíncronas recentes |
task status <task_id> | Verifica o resultado de uma tarefa |
docker compose exec app coalmine --help
docker compose exec app coalmine canary --help
A API roda em http://localhost:8000 e requer autenticação via cabeçalho de chave de API ou cookie de sessão.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# Listar canaries
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Criar um 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
A documentação interativa da API está disponível em http://localhost:8000/docs (Swagger UI).
Toda a configuração fica no diretório config/. Veja config/README.md para detalhes.
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"
Sincronize com: 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"
| Tipo | Provedor | Descrição |
|---|---|---|
AWS_IAM_USER | AWS | Usuário IAM com chaves de acesso |
AWS_BUCKET | AWS | Bucket S3 com logging |
GCP_SERVICE_ACCOUNT | GCP | Conta de serviço com chaves |
GCP_BUCKET | GCP | Bucket Cloud Storage |
# Execute todos os testes
docker compose run --rm app pytest -v
# Execute apenas testes unitários
docker compose run --rm app pytest tests/unit/ -v
# Execute testes de integração
docker compose run --rm app pytest tests/integration/ -v
# Visualize logs do worker
docker compose logs -f worker
# Reconstrua após alterações de código
docker compose build && docker compose up -d
.env ou gerenciadores de segredosApache License 2.0 — Consulte o arquivo LICENSE para detalhes.
Consulte CONTRIBUTING.md para diretrizes de contribuição.