
Cloud Canary 객체 오케스트레이션 관리 플랫폼

클라우드 카나리 토큰 관리 — AWS와 GCP에 걸쳐 가짜 자격증명을 배포, 모니터링, 교체하여 무단 접근을 탐지합니다.
[!WARNING] 알파 버전 — Coalmine은 초기 개발 단계입니다. 기본 기능이 현재 우선순위이며, 애플리케이션은 프로덕션 사용을 위해 완전한 보안 테스트를 거친 것으로 간주되어서는 안 됩니다.
| 기능 | 개발 중 (불안정) | 할 일 |
|---|---|---|
| AWS IAM User Canaries | GCP Service Account Canaries | Azure 지원 |
| AWS S3 Bucket Canaries | GCP Bucket Canaries | SIEM 통합 |
| CloudTrail Monitoring | GCP Audit Log Monitoring | |
| PostgreSQL State Backend | 자동 교체 | |
| REST API (API Key + Session Auth) | ||
| WebUI Dashboard | ||
| 이메일 및 웹훅 알림 | ||
| 자격 증명 및 계정 관리 | ||
| RBAC (Casbin) |
Coalmine은 자동으로 "카나리 토큰"을 배포하고 모니터링합니다. 이는 공격자가 접근하면 알림을 트리거하는 가짜 자격 증명 및 리소스입니다.
지원 제공자:
/ui에서 브라우저 기반 대시보드coalmine <resource> <action>)git clone https://github.com/yourorg/coalmine.git
cd coalmine
cp .env.example .env
# Edit .env with your database and cloud credentials
docker compose up -d
이 명령은 API, Celery 워커, Redis 및 PostgreSQL을 시작합니다. WebUI는 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
# AWS IAM 사용자 카나리 생성
docker compose exec app coalmine canary create my-canary AWS_IAM_USER \
--account <ACCOUNT_ID> --logging-id <LOGGING_ID>
# 카나리 목록 보기
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 키 헤더 또는 세션 쿠키를 통한 인증이 필요합니다.
config/api_keys.yaml)api_keys:
- key: "your-api-key-here"
name: "admin"
permissions: ["read", "write"]
scopes: ["all"]
# List canaries
curl -H "X-API-Key: your-api-key" http://localhost:8000/api/v1/canaries
# Create a 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
# 워커 로그 보기
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 list | 모든 카나리 나열 |
canary delete <name_or_id> | 카나리 삭제 |
canary creds <name> | 카나리 자격 증명 가져오기 |
canary trigger <name_or_id> | 카나리 탐지 테스트 |
| 명령어 | 설명 |
|---|
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 버킷 |