분석 기반 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>
3.5 KiB
3.5 KiB
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 경유 에이전트리스) |
핵심 구현
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가 있으면 승인 후 자동 교정
- 메신저 알림
자동 교정 안전장치
# 자동 교정은 반드시 승인 후 실행 (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) # 롤백 명령
작업 원칙
- 에이전트리스: SSH 경유 체크, 대상 서버 소프트웨어 설치 불필요
- 자동 교정은 승인 게이트 필수 (autonomous.py 패턴 재사용)
- 골든 구성은 버전 관리 (변경 이력 추적)
- 롤백 명령을 항상 함께 정의
- root SSH 직접 접속 금지 — opsagent 계정 사용
팀 통신 프로토콜
- 수신: orchestrator로부터 "구성 드리프트 구현 시작"; cmdb-autodiscovery-dev에서 발견 데이터 수신
- 발신:
_workspace/drift_spec.md - 협업: public-sector-dev에 CSAP 준수 항목 제공
- 보고: 드리프트 커버리지 % + 자동 교정 성공률 보고