
Облачная платформа управления оркестрацией объектов Canary

Облачное управление canary-токенами — Развертывайте, отслеживайте и ротируйте обманные учетные данные в AWS и GCP для обнаружения несанкционированного доступа.
[!WARNING] Альфа-версия — Coalmine находится на ранней стадии разработки. Базовый функционал является текущим приоритетом, и приложение не следует считать полностью проверенным на безопасность для использования в production.
| Функционально | В разработке (нестабильно) | В планах |
|---|---|---|
| Canary-пользователи IAM AWS | Canary-сервисные аккаунты GCP | Поддержка Azure |
| Canary-корзины S3 AWS | Canary-корзины GCP | Интеграция с SIEM |
| Мониторинг CloudTrail | Мониторинг журналов аудита GCP | |
| Бэкенд состояния PostgreSQL | Автоматическая ротация | |
| REST API (аутентификация по ключу API + сессии) | ||
| Веб-интерфейс (панель управления) | ||
| Оповещения по email и webhook | ||
| Управление учетными данными и аккаунтами | ||
| RBAC (Casbin) |
Coalmine автоматически развертывает и отслеживает «canary-токены» — обманные учетные данные и ресурсы, которые вызывают оповещение при доступе злоумышленников.
Поддерживаемые провайдеры:
/uicoalmine <resource> <action>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Отредактируйте .env, указав свои данные для подключения к БД и облачные учетные данные
docker compose up -d
Это запустит API, Celery worker, Redis и PostgreSQL. Веб-интерфейс будет доступен по адресу http://localhost:8000/ui.
# Добавление учетных данных AWS
docker compose exec app coalmine credentials add my-aws-cred AWS \
--secrets '{"access_key_id": "...", "secret_access_key": "...", "region": "us-east-1"}'
# Добавление аккаунта под этими учетными данными
docker compose exec app coalmine accounts add prod-east --credential my-aws-cred \
--account-id 111111111111
# Или синхронизация учетных данных и аккаунтов из YAML-конфига
docker compose exec app coalmine credentials sync --dry-run
# Создание назначения логирования CloudTrail
docker compose exec app coalmine logs create my-trail AWS_CLOUDTRAIL \
--account <ACCOUNT_ID>
# Список ресурсов логирования
docker compose exec app coalmine logs list
# Создание canary-пользователя IAM AWS
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# Список canary
docker compose exec app coalmine canary list
# Запуск тестового оповещения
docker compose exec app coalmine canary trigger my-canary
# Дождитесь цикла мониторинга (~1 мин), затем проверьте оповещения
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) │
└─────────────────┘
Команды следуют шаблону: coalmine <resource> <action> [options]
| Команда | Описание |
|---|---|
logs create <name> <type> | Создать ресурс логирования |
logs list | Список ресурсов логирования |
logs scan --account <id> | Сканировать существующие CloudTrail |
| Команда | Описание |
|---|---|
alerts list [--canary <name>] | Просмотр оповещений безопасности |
| Команда | Описание |
|---|---|
auth key list | Список ключей API |
auth key add <name> | Добавить ключ API |
auth session list | Список активных сессий |
| Команда | Описание |
|---|---|
user list | Список всех пользователей |
user roles | Список доступных ролей |
| Команда | Описание |
|---|---|
task list | Просмотр последних асинхронных задач |
task status <task_id> | Проверить результат задачи |
docker compose exec app coalmine --help
docker compose exec app coalmine canary --help
API работает по адресу http://localhost:8000 и требует аутентификации через заголовок с ключом API или сессионный cookie.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# Список canary
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Создание 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
Интерактивная документация API доступна по адресу http://localhost:8000/docs (Swagger UI).
Вся конфигурация находится в каталоге config/. Подробнее см. в config/README.md.
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"
Синхронизация: 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"
# Запуск всех тестов
docker compose run --rm app pytest -v
# Запуск только модульных тестов
docker compose run --rm app pytest tests/unit/ -v
# Запуск интеграционных тестов
docker compose run --rm app pytest tests/integration/ -v
# Просмотр логов worker
docker compose logs -f worker
# Пересборка после изменений кода
docker compose build && docker compose up -d
.env или менеджеры секретовApache License 2.0 — Подробности в файле LICENSE.
См. CONTRIBUTING.md для руководства по участию.
| Команда | Описание |
|---|
canary create <name> <type> | Создать новый canary |
canary list | Список всех canary |
canary delete <name_or_id> | Удалить canary |
canary creds <name> | Получить учетные данные canary |
canary trigger <name_or_id> | Проверить обнаружение canary |
| Команда | Описание |
|---|
credentials list | Список всех учетных данных |
credentials add <name> <provider> | Добавить учетные данные |
credentials update <name_or_id> | Обновить учетные данные |
credentials remove <name_or_id> | Удалить учетные данные |
credentials validate <name_or_id> | Проверить работоспособность учетных данных |
credentials sync [--dry-run] | Синхронизировать из YAML-конфига |
| Команда | Описание |
|---|
accounts list [--credential <name>] | Список всех аккаунтов |
accounts add <name> | Добавить аккаунт |
accounts update <name_or_id> | Обновить аккаунт |
accounts enable <name_or_id> | Включить аккаунт |
accounts disable <name_or_id> | Отключить аккаунт |
accounts remove <name_or_id> | Удалить аккаунт |
accounts validate <name_or_id> | Проверить работоспособность аккаунта |
| Тип | Провайдер | Описание |
|---|
AWS_IAM_USER | AWS | Пользователь IAM с ключами доступа |
AWS_BUCKET | AWS | Корзина S3 с логированием |
GCP_SERVICE_ACCOUNT | GCP | Сервисный аккаунт с ключами |
GCP_BUCKET | GCP | Корзина Cloud Storage |