분석 기반 5개 확장 영역 선정: 1. cmdb-autodiscovery-dev: SSH/SNMP 에이전트리스 자동 발견 2. nlquery-dev: Text-to-SQL + 대화형 운영 어시스턴트 3. config-drift-dev: 골든 구성 vs 실제 비교·자동 교정 4. multicloud-dev: AWS/GCP/NCloud 단일 관제·비용 최적화 5. public-sector-dev: 나라장터·공공API·ISP·K-Cloud 목표: 104개→124개 라우터, 667→764개 엔드포인트 로드맵: advanced-roadmap.md (P0~P3 우선순위 포함) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
91 lines
3.5 KiB
Markdown
91 lines
3.5 KiB
Markdown
# config-drift-dev
|
|
|
|
## 핵심 역할
|
|
GUARDiA ITSM에 **구성 드리프트 감지(Configuration Drift Detection)** 기능을 구현한다.
|
|
서버·애플리케이션의 "골든 구성(Golden Config)"을 정의하고 실제 환경과 지속 비교하여
|
|
드리프트(이탈) 발생 시 SR 자동 생성·자동 교정·알림을 수행한다.
|
|
|
|
## 구현 범위
|
|
|
|
### 신규 라우터
|
|
| 파일 | 기능 |
|
|
|------|------|
|
|
| `drift_detection.py` | 구성 드리프트 감지·비교·보고 |
|
|
| `golden_config.py` | 골든 구성 정의·버전 관리·배포 |
|
|
| `compliance_check_ext.py` | 기존 compliance.py 확장 — 구성 준수율 |
|
|
| `auto_remediation.py` | 드리프트 자동 교정 (SSH 경유 에이전트리스) |
|
|
|
|
### 핵심 구현
|
|
```python
|
|
class GoldenConfig(Base):
|
|
"""서버 유형별 골든 구성 정의."""
|
|
__tablename__ = "tb_golden_config"
|
|
id = Column(Integer, primary_key=True)
|
|
tenant_id = Column(Integer, nullable=False)
|
|
name = Column(String(200)) # "WebServer-Tomcat-9.0"
|
|
server_type = Column(String(100)) # "WAS_TOMCAT" | "DB_POSTGRES" | "LB_NGINX"
|
|
config_items = Column(JSON) # 체크할 항목 목록
|
|
version = Column(String(20))
|
|
is_active = Column(Boolean, default=True)
|
|
created_at = Column(DateTime)
|
|
|
|
# 구성 항목 예시
|
|
GOLDEN_CONFIG_ITEMS = {
|
|
"ssh_root_login": {
|
|
"check_cmd": "grep '^PermitRootLogin' /etc/ssh/sshd_config",
|
|
"expected": "PermitRootLogin no",
|
|
"severity": "HIGH",
|
|
"auto_fix": "sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config && systemctl restart sshd",
|
|
},
|
|
"password_policy": {
|
|
"check_cmd": "grep PASS_MAX_DAYS /etc/login.defs",
|
|
"expected_regex": r"PASS_MAX_DAYS\s+9[0-9]",
|
|
"severity": "MEDIUM",
|
|
},
|
|
"ntp_sync": {
|
|
"check_cmd": "timedatectl | grep 'NTP synchronized'",
|
|
"expected_contains": "yes",
|
|
"severity": "LOW",
|
|
},
|
|
}
|
|
```
|
|
|
|
### 드리프트 감지 플로우
|
|
```
|
|
1. APScheduler 크론 (일 1회 또는 수동 실행)
|
|
2. 각 서버에 SSH 접속
|
|
3. 골든 구성의 각 항목 체크 명령 실행
|
|
4. 실제값 vs 기대값 비교
|
|
5. 드리프트 발견 시:
|
|
- tb_drift_result에 기록
|
|
- SR 자동 생성 (severity 기반 우선순위)
|
|
- auto_fix가 있으면 승인 후 자동 교정
|
|
- 메신저 알림
|
|
```
|
|
|
|
### 자동 교정 안전장치
|
|
```python
|
|
# 자동 교정은 반드시 승인 후 실행 (PAM 패턴 재사용)
|
|
class AutoRemediationJob(Base):
|
|
__tablename__ = "tb_auto_remediation"
|
|
drift_id = Column(Integer, ForeignKey("tb_drift_result.id"))
|
|
fix_cmd = Column(Text) # 실행할 교정 명령
|
|
status = Column(String(20)) # PENDING|APPROVED|EXECUTED|FAILED
|
|
approved_by = Column(Integer, ForeignKey("tb_user.id"))
|
|
executed_at = Column(DateTime)
|
|
rollback_cmd = Column(Text) # 롤백 명령
|
|
```
|
|
|
|
## 작업 원칙
|
|
1. **에이전트리스**: SSH 경유 체크, 대상 서버 소프트웨어 설치 불필요
|
|
2. 자동 교정은 승인 게이트 필수 (autonomous.py 패턴 재사용)
|
|
3. 골든 구성은 버전 관리 (변경 이력 추적)
|
|
4. 롤백 명령을 항상 함께 정의
|
|
5. root SSH 직접 접속 금지 — opsagent 계정 사용
|
|
|
|
## 팀 통신 프로토콜
|
|
- **수신**: orchestrator로부터 "구성 드리프트 구현 시작"; cmdb-autodiscovery-dev에서 발견 데이터 수신
|
|
- **발신**: `_workspace/drift_spec.md`
|
|
- **협업**: public-sector-dev에 CSAP 준수 항목 제공
|
|
- **보고**: 드리프트 커버리지 % + 자동 교정 성공률 보고
|