
Ephemera는 인프라에 대한 제로 트러스트 접근을 강제하도록 설계된 경량의 자체 호스팅 SSH 인증 기관입니다. 정적 SSH 키를 수명이 짧은 인증서로 대체하고, 하드웨어 기반 WebAuthn MFA를 통합하며, 암호학적으로 검증 가능한 감사 추적을 유지합니다.
graph LR
subgraph Client["User (Operator)"]
SSH["SSH Client"]
HW["Hardware Key<br/>WebAuthn / YubiKey"]
end
subgraph Auth["Authentication Boundary"]
MFA["WebAuthn MFA<br/><i>Human presence required</i>"]
OIDC["OIDC<br/><i>Optional</i>"]
end
subgraph CA["Ephemera SSH Certificate Authority"]
CORE["Self-hosted CA<br/>Air-gap capable"]
POLICY["Policy Engine<br/><i>Governance at issuance</i>"]
BUDGET["Trust Budgeting<br/><i>Optional</i>"]
end
subgraph Targets["Target Servers"]
NATIVE["Native OpenSSH<br/>TrustedUserCAKeys"]
NOAGENT["No agents<br/>No SSH proxy"]
end
subgraph Audit["Audit & Recovery"]
LOG["Tamper-Evident<br/>Audit Log"]
BACKUP["Encrypted Backups<br/>Shamir Recovery"]
end
Client --> Auth
Auth -->|"Short-lived cert"| CA
CA -->|"Certificate expires<br/>automatically"| Targets
CA -.->|"Post-fact integrity"| Audit
style Auth fill:#e8f5e9,stroke:#2e7d32
style CA fill:#e3f2fd,stroke:#1565c0
style Audit fill:#fff3e0,stroke:#ef6c00
Ephemera가 하는 일: 누가 얼마나 오랫동안 접근 권한을 받을 수 있는지 관리합니다.
Ephemera가 하지 않는 일: 런타임 모니터링, MITM 프록시, 명령 검사.
강제 방식: 네이티브 OpenSSH 내에서 완전히 처리됨 — 대상 서버에 Ephemera 에이전트가 필요 없습니다.
키 교체: 필요 없음 — 인증서가 자동으로 만료됩니다.
Ephemera는 네이티브 OpenSSH 기능을 기반으로 구축된 자체 호스팅 SSH 인증 기관입니다.
장기 사용 SSH 키를 필요 시점에 발급되는 수명이 짧은 인증서로 대체하며,
명시적인 물리적 존재 확인과 감사 가능한 권한 상승을 요구합니다.
중앙 집중식 SSH 거버넌스를 원하지만 MITM 프록시, 맞춤 프로토콜, 클라우드 종속성을 원하지 않는 팀을 위해 설계되었습니다.
핵심 SSH CA 기능: 프로덕션 준비 완료
신탁 예산(Trust Budgeting): 실험적(옵트인, 변경 가능)
실험적 기능은 명확히 분리되어 있으며 기본적으로 비활성화되어 있습니다.
전통적인 SSH는 랩톱과 서버에 흩어져 있는 장기 사용 개인 키에 의존합니다. 키가 유출되면 이를 발견하고 모든 곳에서 키를 교체할 때까지 접근이 지속됩니다. Ephemera는 정적 키를 자동으로 만료되는 수명이 짧은 인증서로 대체하여 오용 가능 시간을 몇 달에서 몇 분으로 줄입니다.
적시 접근(Just-in-Time Access) : 인증서가 몇 분 안에 만료(기본 5분)되어 도난된 자격 증명의 기회 창을 줄입니다.
WebAuthn 강제: 인증서 발급에는 YubiKey 또는 TouchID를 통한 물리적 MFA(FIDO2) 상호작용이 필요합니다.
독립적 복구: 암호화된 백업은 샤미르 비밀 공유(Shamir's Secret Sharing)로 보호되며, 복원을 위해 정족수가 필요합니다.
검증 가능한 감사: 모든 CA 작업은 변조 방지 기록을 위해 머클 체인 원장에 기록됩니다.
세분화된 RBAC: YAML 기반 정책 엔진이 역할, 리소스 및 조건에 따라 접근을 정의합니다.

Ephemera는 신탁 예산(Trust Budgeting)이라는 실험적이고 옵트인 방식의 거버넌스 기본 요소를 포함합니다.
신탁 예산은 접근을 유한하고 가시적인 리소스로 취급하여 인증서 발급 시 누적된 권한 있는 권한을 제한합니다. 각 인증서 발급은 명시적인 예산을 소비합니다. 예산이 소진되면 예산이 재설정되거나 별도의 비상(break-glass) 경로가 사용될 때까지 정상적인 발급이 중단됩니다.
이 메커니즘은:
신탁 예산은 실험적이며 변경되거나 제거될 수 있습니다.
Ephemera는 GateBridge를 포함합니다. 이는 생산 동작에 영향을 주지 않고 대체 엔진(Gate0)에 대해 정책 결정을 검증하는 섀도우 평가 시스템입니다.
policy-shadow.log)각 항목에는 다음이 포함됩니다:
GET /api/admin/gate0/status
반환:
{
"bridge_version": "1.0.0",
"gate0_version": "v0.2.1",
"policy_hash": "sha256:8f4b...",
"status": "healthy",
"last_mismatch": null,
"telemetry": {
"latency_p50_ms": 2.3,
"latency_p95_ms": 5.1,
"latency_p99_ms": 8.7
}
}
GateBridge는 구성 플래그를 통해 비활성화할 수 있습니다. 섀도우 모드는 실패-개방이며 인증 결정에 영향을 미치지 않습니다.
Gate0 CLI 인터페이스에 대한 호환성이 깨지지 않습니다. 섀도우 로그는 새로운 필드를 얻지만 이전 버전과의 파싱 호환성은 유지됩니다.
목표: 5분 안에 첫 번째 SSH 인증서를 발급합니다.
# 클론 및 시작
git clone https://github.com/Qarait/ephemera.git
cd ephemera
docker compose up -d
참고: CA 마스터 비밀번호는 첫 실행 시 자동 생성되어 유지됩니다.
프로덕션의 경우 시작 전에.env파일에CA_MASTER_PASSWORD를 설정하세요.
[!IMPORTANT] 프로덕션 배포: 하드웨어 기반 키 격리를 위해 SoftHSM 백엔드를 사용하세요. CA 개인 키는 디스크에 절대 저장되지 않습니다. PKCS#11 설정 가이드를 참조하세요.
브라우저에서 http://localhost:3000을 엽니다.
기본 자격 증명:
admindocker compose logs ephemera | grep "Password:"
대체 Compose 파일:
docker-compose.dev.yml — 로컬 빌드 및 syslog를 사용한 개발docker-compose.test.yml — 엔드투엔드 테스트를 위한 SSH 대상 포함# 소스에서 CLI 설치
git clone https://github.com/Qarait/ephemera.git
cd ephemera
pip install .
# SSH 구성 초기화
ephemera init
# CA에 로그인
ephemera login
# 첫 번째 인증서 발급
ephemera renew
# 상태 확인
ephemera status
# 안전하게 연결!
ssh user@your-server
Ephemera는 임의의 비밀번호로 중요 데이터(CA 키, 데이터베이스)를 암호화한 후, 해당 비밀번호를 샤미르 조각으로 분할하는 안전한 백업 메커니즘을 제공합니다. 이렇게 하면 단 한 사람이 백업을 복원할 수 없지만, 정족수는 가능합니다.
# 암호화된 백업 생성 및 비밀번호를 5개의 조각(임계값 3)으로 분할
ephemera backup-create --k 3 --n 5 --out-dir ./backup
다음이 생성됩니다:
ephemera_backup.enc (암호화된 아카이브)backup_shard_1_of_5.json 등 (비밀번호 조각)참고: 조각은 분리된 안전한 장소에 보관하세요. 암호화된 백업 파일은 안전하게 보관하세요(조각 없이는 쓸모가 없습니다).
# 암호화된 파일과 3개의 조각을 사용하여 복원
ephemera backup-restore --backup ./backup/ephemera_backup.enc --shards ./backup/backup_shard_1_of_5.json ./backup/backup_shard_2_of_5.json ./backup/backup_shard_4_of_5.json --out-dir ./restored
policy.yaml)Ephemera는 역할 기반 접근 제어(RBAC)를 위한 강력한 YAML 기반 정책 엔진을 사용합니다.
# Define Roles
roles:
developer:
can_request_cert: true
max_cert_duration: 300 # 5 minutes
allowed_principals: ["dev-user"]
admin:
can_request_cert: true
max_cert_duration: 3600 # 1 hour
allowed_principals: ["root", "admin"]
can_approve_sudo: true
# Define Rules
rules:
# Developers can only access dev servers
- role: developer
resource: "dev-*"
action: "ssh"
effect: allow
# Admins can access everything with MFA
- role: admin
resource: "*"
action: "ssh"
effect: allow
conditions:
mfa_required: true
책임 있는 공개 정보는 SECURITY.md를 참조하세요.
기여하고 싶으신가요? 신규 기여자를 위한 작은 작업을 확인하세요.
[!TIP] 위협 모델 및 보안 가정은 여기에 문서화되어 있습니다. 피드백과 비판을 환영합니다.
| 필드 | 설명 |
|---|
timestamp | ISO 8601 UTC 타임스탬프 |
match | 부울 — 두 엔진이 일치했는지 여부 |
versions.bridge | GateBridge Python 버전 |
versions.gate0 | Gate0 CLI 버전 |
versions.policy_hash | policy.yaml의 SHA256 해시 |
context_hash | 정규화된 입력의 SHA256 해시 |
yaml_decision | YAML 엔진 결과 |
gate0_decision | Gate0 엔진 결과 |
snapshot | 전체 컨텍스트(불일치 시에만, 크기 제한) |