콘텐츠로 이동

M5. 보너스 — 인시던트 리포트 자동화 + 멀티에이전트 브릿지

보너스 모듈에서는 조사 결과를 사람이 읽는 완결형 인시던트 리포트로 자동 렌더하고, 실무 확장 방향으로 agents-as-tools 멀티에이전트 브릿지 스켈레톤을 훑어봅니다.

M5 아키텍처 — M3 응답 JSON을 generate_report.py가 Claude Fable 5로 마크다운 리포트로 렌더하고, multiagent_bridge.py는 Orchestrator + 두 Specialist(로그 분석 / 리포트)를 agents-as-tools 패턴으로 연결합니다.

lab-src/m5/generate_report.py는 M3 실행 결과 JSON을 입력받아 7개 섹션의 완결형 리포트를 마크다운으로 뽑아냅니다.

    1. 요약(Executive Summary) — 공격 유형, 확신도, 영향 범위.
    1. 타임라인 — 발견 → 조사 → 판정 표.
    1. 증거 — 로그 근거·IoC(IP/계정/경로) 불릿.
    1. 근본 원인(5 Whys) — Why1 → Why5.
    1. 차단/격리 권고 — 즉시 실행할 조치.
    1. 재발 방지 — 중장기 개선안.
    1. 부록 — “모든 수치는 워크샵용 합성 데모 값입니다.” 고지 포함.

판정 티어와 동일한 모델(Claude Fable 5)을 사용해 톤 일관성을 유지합니다.

  1. M3 조사 결과를 JSON 파일로 저장합니다.

    M3의 invoke 응답을 그대로 파일로 남깁니다.

    Terminal window
    cd aiopstriageagent
    agentcore invoke '{"prompt": "동일 IP에서 401 응답 500회 발생. 원인 분석해 주세요.", "session_id": "aiops-report-demo"}' \
    > /tmp/m3-result.json

    원본 알림 텍스트를 리포트에 반영하고 싶다면, JSON에 original_alert 키를 추가해 두세요 (prompt 키로도 인식됩니다).

  2. 리포트를 렌더합니다.

    Terminal window
    cd lab-src/m5
    python3 generate_report.py --input /tmp/m3-result.json --out /tmp/incident-report.md

    /tmp/incident-report.md를 열면 7개 섹션이 순서대로 채워진 마크다운 리포트가 보입니다. 부록에 “합성 데모 값” 고지가 들어 있는지 확인해 주세요.

    실측 출력 원문입니다 — 2026-07-16, session_id=aiops-demo-incident-1 입력으로 generate_report.py 실행 결과 상단 발췌(합성 데모 값):

    # 인시던트 리포트 — 크리덴셜 스터핑 계열 계정 탈취(ATO) 의심
    - **세션 ID**: aiops-demo-incident-1
    - **리포트 생성 시각**: 2026-07-16T10:42:07Z
    - **작성**: 보안 애널리스트팀
    ---
    ## 1. 요약 (Executive Summary)
    AnyCompany Fashion 온라인 쇼핑몰의 `/login` 엔드포인트를 대상으로
    203.0.113.x 대역에서 10분간 401 응답이 500회 이상 발생하였으며, 판정 결과
    **크리덴셜 스터핑 계열 계정 탈취(ATO) 공격**으로 확신도 **높음**으로
    판정되었습니다. WAF에서 203.0.113.17, 203.0.113.42, 198.51.100.9 발신 요청
    21건이 차단(BLOCK)되었고, app-auth 로그에서 다수의 401 실패 가운데
    **user0042@example.com 계정에 대한 성공 로그인 1건**이 확인되어 해당 계정은
    침해 의심(suspected_compromise) 상태입니다. ...
    [추정] 동일 공격자가 차단 회피를 위해 다른 IP 대역으로 로테이션할 가능성이
    있어 확장 모니터링이 필요합니다.
    ---
    ## 2. 타임라인
    | 순번 | 시각 (UTC) | 이벤트 |
    |---|---|---|
    | 1 | 리포트 생성 기준 직전 약 10분간 | 203.0.113.x 대역에서 `/login` 대상 401 응답 500회 이상 발생 — 최초 알림 트리거 |
    | 2 | 알림 접수 직후 | 조사 개시 — 대상 로그 그룹(app-auth, alb, waf) 컨텍스트 확보 |
    | 3 | 조사 중 | WAF BLOCK 21건, app-auth에서 user0042@example.com 성공 로그인 1건 확인 |
    | 4 | 조사 중 | 상관관계 분석: 과거 credential_stuffing 이력 매치, WAF/ALB 교차 검증 |
    | 5 | 2026-07-16T10:42:07Z 이전 | 판정 완료 — 크리덴셜 스터핑 계열 ATO, 확신도 높음 |
    | 6 | 2026-07-16T10:42:07Z | 본 리포트 생성 |
    > ※ 개별 이벤트의 정확한 타임스탬프는 원본 로그에 대한 추가 조회가 필요합니다.

    부록(§7)의 “모든 수치는 워크샵용 합성 데모 값입니다.” 고지 문구까지 포함해 총 7개 섹션이 채워지는지 확인해 주세요. 판정 티어와 동일한 Claude Fable 5 호출이며 실측에서 temperature 미지정 상태로 ValidationException 없이 정상 종료되었습니다.

  3. 파이프 사용법.

    agentcore invoke의 출력을 그대로 파이프로 넘길 수도 있습니다.

    Terminal window
    agentcore invoke '{"prompt": "...", "session_id": "..."}' \
    | python3 generate_report.py --out /tmp/report.md

5.2 멀티에이전트 브릿지 (실무 확장 스켈레톤)

섹션 제목: “5.2 멀티에이전트 브릿지 (실무 확장 스켈레톤)”

lab-src/m5/multiagent_bridge.pyagents-as-tools 패턴으로 3-티어 구조를 잡아 둔 교육용 스켈레톤입니다. 실행 자체가 목적이 아니라, 90분 실습이 끝난 뒤 각 팀의 시나리오로 확장할 때의 출발점입니다.

  • Triage Orchestrator (coordinator) — 사용자 알림을 받아 어느 전문가에게 위임할지 결정합니다. 자기 자신은 도구를 직접 호출하지 않고, 두 서브에이전트를 @tool로 감싼 함수로 위임합니다.
  • Log Analysis Specialist — M2 조사관 역할. 실제 프로덕션에서는 여기에 Gateway MCP 클라이언트와 로그 도구가 붙습니다.
  • Reporter Specialist — M5의 generate_report.py와 같은 리포트 티어. 조사 노트를 받아 완결형 리포트 초안을 반환합니다.

발췌:

# lab-src/m5/multiagent_bridge.py 발췌
@tool
def analyze_logs(alert: str) -> str:
"""보안 로그 분석 전문가에게 알림 조사를 위임합니다."""
return str(_log_analysis_specialist(alert))
@tool
def draft_incident_report(investigation_notes: str) -> str:
"""조사 노트를 받아 완결형 인시던트 리포트 초안을 작성합니다."""
return str(_reporter_specialist(investigation_notes))
def build_orchestrator() -> Agent:
return Agent(
model=BedrockModel(model_id="global.anthropic.claude-sonnet-5", ...),
system_prompt=ORCHESTRATOR_PROMPT,
tools=[analyze_logs, draft_incident_report],
)
  • /tmp/incident-report.md가 7개 섹션 순서대로 채워져 있고, 부록에 “합성 데모 값” 고지가 있습니다.
  • multiagent_bridge.py의 구조(Orchestrator + 두 Specialist)를 이해했습니다 — 실무 확장 시 여기서 시작합니다.

다음은 M6. 정리 — cleanup입니다.