# 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 준수 항목 제공 - **보고**: 드리프트 커버리지 % + 자동 교정 성공률 보고