From 4b12c0e5acfe0eab244bc7e6e3846a2e7a76e16a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=A4=80=EC=84=9D=28Junseok=20Oh=29DevOps?= <52226147+Atom-oh@users.noreply.github.com> Date: Thu, 22 Oct 2026 04:08:35 +0000 Subject: [PATCH 1/9] docs-site: remove ADR references from the intro deck index Split from #192 to stay under the AI review input limit. Co-Authored-By: Claude Opus 5.5 --- .../presentation/awsops-intro/index.html | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/index.html b/docs-site/static/presentation/awsops-intro/index.html index c9518e3c8..5b3edc81c 100644 --- a/docs-site/static/presentation/awsops-intro/index.html +++ b/docs-site/static/presentation/awsops-intro/index.html @@ -188,7 +188,7 @@

보고서 작성 부담

Bedrock AgentCore
-
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
ADR-003 하이브리드 라우팅
+
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
하이브리드 라우팅
@@ -255,7 +255,7 @@

보고서 작성 부담

AWSops — By the Numbers

-
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI RoutingADR-003 하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
+
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI Routing하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
@@ -296,7 +296,7 @@

For FinOps / Management

🔒
Read-Only Posture
-
AWS 리소스 변경·자율 실행 동결
ADR-005 (FROZEN) / ADR-007 — 설계상 안전
+
AWS 리소스 변경·자율 실행 동결
설계상 안전
📊
@@ -311,7 +311,7 @@

For FinOps / Management

Key Takeaways — 5가지 목표, 하나의 대시보드

-
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 (ADR-005 FROZEN) + 4개 언어 UX
+
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 + 4개 언어 UX
@@ -379,7 +379,7 @@

Foundation

LIVE 오늘: workers · steampipe · agentcore · integrations · ai_cost_tracking · diagnosis_schedule · diagnosis_notify · eks_auto_register · hybrid_routing

Feature Flags (~17개, 전부 default-off = $0)

-
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — ADR-005 FROZEN, do-not-enable
+
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — FROZEN, do-not-enable
@@ -394,7 +394,7 @@

Core Layers

파일역할
network.tfVPC 신규/재사용
edge.tfCloudFront + VPC Origin + ALB
auth.tfCognito + Lambda@Edge
data.tfAurora + schema
workload.tfECS web service
ecr.tfdual-tier ECR
ai.tfAgentCore + SSM
workers.tfSQS + SFN + Lambda

Gated Subsystems

-
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포 (ADR-015)
+
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포
@@ -406,7 +406,7 @@

Gated Subsystems

Next.js 14 Standalone (arm64)

-
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트(ADR-009)
+
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트

Routes

  • /api/health — 공개 헬스체크
  • /api/stream — SSE 스트리밍
  • /api/db — Aurora ping
  • /api/jobs (+/[id]) — 비동기 작업
@@ -422,7 +422,7 @@

Routes

Aurora (PostgreSQL 17.9)

-
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • ADR-030 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)
+
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)

Steampipe = 인벤토리 sync ONLY

warm Fargate → Aurora → /inventory/[type]
flag-gated (steampipe_enabled)
41종 리소스 타입 동기화
fan-out sync · registry-driven nav
NOT a live query engine — pg Pool / 라이브 조회 아님

@@ -474,13 +474,13 @@

Steampipe = 인벤토리 sync ONLY

ops external-obs
-
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
-

Hybrid Routing & Streaming Chat — ADR-003

+

Hybrid Routing & Streaming Chat

@@ -564,7 +564,7 @@

Chat UX

잡 종류 (2026-06-18 이후 증가)

-
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
+
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

@@ -604,7 +604,7 @@

Read-Only Query

-

Multi-Account — STS AssumeRole Fan-Out (ADR-011)

+

Multi-Account — STS AssumeRole Fan-Out

@@ -612,7 +612,7 @@

Registry + Assume

  • Aurora accounts 레지스트리 — 호스트 계정은 lazy seed
  • 대상 계정 AWSopsReadOnlyRole을 host task role이 STS AssumeRole
  • ExternalId — 1st-party(trust policy가 task-role ARN 핀) = 선택, 3rd-party/와일드카드 = 필수(confused-deputy 방어)
  • 글로벌 셀렉터: 단일 계정 스코프 / __all__ = 전 계정 fan-out

Safety

-
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음(ADR-005 동결과 정합)
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
+
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
@@ -625,7 +625,7 @@

Safety

Cognito + Lambda@Edge

  • us-east-1, py3.12, viewer-request
  • RS256 JWKS 서명 검증 (iss/aud/token_use)
  • OAuth state + PKCE public client
-

Login (ADR-002)

+

Login

  • Primary = 자체 /login 폼
  • BFF POST /api/auth/login → 무서명 공개 InitiateAuth(USER_PASSWORD_AUTH) → awsops_token (id_token 12h)
  • Hosted UI PKCE = dark fallback, signout = 쿠키 삭제

🔒 Private Edge
공개 ALB 없음 — 진입점은 CloudFront 하나
🔑 ECS Secrets
execution role 권한 (task role 아님)
👤 Admin
SSM + Cognito group (fail-closed)

@@ -670,16 +670,16 @@

Login (ADR-002)

🔒
동결 (do-not-enable)
-
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External (ADR-007)
+
거버넌스된 External
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결. + 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결.
🧠 @@ -693,7 +693,7 @@

Login (ADR-002)

Key Takeaways — Architecture

-
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock
+
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • 하이브리드 라우팅 + 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock
@@ -1124,7 +1124,7 @@

동작 흐름 (read-only)

분석 결과 예시 (권장만)

  • "payment Pod: CPU request 500m, 실사용 50m → 90% 과할당 (rightsizing 권장)"
  • "frontend Deployment: Memory limit 2Gi, 사용량 200Mi → 다운사이징 권장"
  • "Node 3대 중 2대 활용률 15% 미만 → 통합 검토"
  • "예상 월 절감 $1,200 — 권장사항"

Read-Only 원칙

-

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 ADR-005로 동결 — do-not-enable)

+

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 동결 — do-not-enable)

@@ -1329,7 +1329,7 @@

스케줄 진단 (diagnosis_schedule_enabled)

  • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
  • hourly schedule_dispatcher — 스캔 후 report job enqueue
  • v1 report-scheduler.ts 패턴 승계

알림 다이제스트 (병합·배포 완료)

-
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
+
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
@@ -1404,7 +1404,7 @@

인증 & 온보딩

Feature Tour: 멀티 계정 Security & Compliance

-

ADR-011 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

+

멀티 계정 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

Security Findings Pipeline

@@ -1472,8 +1472,8 @@

AWSops가 제공하는 것

핵심 차별점

  • in-account Bedrock (외부 AI SaaS API 없음)
  • private edge (공개 ALB 없음, CloudFront VPC Origin)
  • OOM-safe 비동기 워커 티어
-

Read-Only 자세 (ADR-005/007)

-
  • AWS-리소스 변경 + 자율 = 동결 (ADR-005, do-not-enable)
  • 외부 관측성 READ 허용
  • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용 +

    Read-Only 자세

    +
    • AWS-리소스 변경 + 자율 = 동결 (do-not-enable)
    • 외부 관측성 READ 허용
    • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용
      • SSRF · Secrets · DLP · human-gate · flag-OFF
    • 변경되는 것은 DATA, AWS 리소스가 아님

    시작하기

    1. make configure → Terraform apply
    2. make deploy
    3. Cognito 사용자 추가 · /login
    4. 어시스턴트에서 질문 시작
    @@ -1506,43 +1506,43 @@

    Date: Thu, 22 Oct 2026 04:08:35 +0000 Subject: [PATCH 2/9] docs-site: remove ADR references from the deck architecture section Split from #192 to stay under the AI review input limit. Co-Authored-By: Claude Opus 5.5 --- .../awsops-intro/02-architecture.html | 50 ++++++++--------- .../awsops-intro/02-architecture.md | 56 +++++++++---------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/02-architecture.html b/docs-site/static/presentation/awsops-intro/02-architecture.html index 31ca70759..76b3c3b75 100644 --- a/docs-site/static/presentation/awsops-intro/02-architecture.html +++ b/docs-site/static/presentation/awsops-intro/02-architecture.html @@ -80,7 +80,7 @@

    Foundation

    LIVE 오늘: workers · steampipe · agentcore · integrations · ai_cost_tracking · diagnosis_schedule · diagnosis_notify · eks_auto_register · hybrid_routing

Feature Flags (~17개, 전부 default-off = $0)

-
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — ADR-005 FROZEN, do-not-enable
+
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — FROZEN, do-not-enable
@@ -95,7 +95,7 @@

Core Layers

파일역할
network.tfVPC 신규/재사용
edge.tfCloudFront + VPC Origin + ALB
auth.tfCognito + Lambda@Edge
data.tfAurora + schema
workload.tfECS web service
ecr.tfdual-tier ECR
ai.tfAgentCore + SSM
workers.tfSQS + SFN + Lambda

Gated Subsystems

-
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포 (ADR-015)
+
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포
@@ -107,7 +107,7 @@

Gated Subsystems

Next.js 14 Standalone (arm64)

-
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트(ADR-009)
+
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트

Routes

  • /api/health — 공개 헬스체크
  • /api/stream — SSE 스트리밍
  • /api/db — Aurora ping
  • /api/jobs (+/[id]) — 비동기 작업
@@ -123,7 +123,7 @@

Routes

Aurora (PostgreSQL 17.9)

-
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • ADR-030 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)
+
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)

Steampipe = 인벤토리 sync ONLY

warm Fargate → Aurora → /inventory/[type]
flag-gated (steampipe_enabled)
41종 리소스 타입 동기화
fan-out sync · registry-driven nav
NOT a live query engine — pg Pool / 라이브 조회 아님

@@ -175,13 +175,13 @@

Steampipe = 인벤토리 sync ONLY

ops external-obs
-
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
-

Hybrid Routing & Streaming Chat — ADR-003

+

Hybrid Routing & Streaming Chat

@@ -265,7 +265,7 @@

Chat UX

잡 종류 (2026-06-18 이후 증가)

-
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
+
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

@@ -305,7 +305,7 @@

Read-Only Query

-

Multi-Account — STS AssumeRole Fan-Out (ADR-011)

+

Multi-Account — STS AssumeRole Fan-Out

@@ -313,7 +313,7 @@

Registry + Assume

  • Aurora accounts 레지스트리 — 호스트 계정은 lazy seed
  • 대상 계정 AWSopsReadOnlyRole을 host task role이 STS AssumeRole
  • ExternalId — 1st-party(trust policy가 task-role ARN 핀) = 선택, 3rd-party/와일드카드 = 필수(confused-deputy 방어)
  • 글로벌 셀렉터: 단일 계정 스코프 / __all__ = 전 계정 fan-out

Safety

-
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음(ADR-005 동결과 정합)
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
+
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
@@ -326,7 +326,7 @@

Safety

Cognito + Lambda@Edge

  • us-east-1, py3.12, viewer-request
  • RS256 JWKS 서명 검증 (iss/aud/token_use)
  • OAuth state + PKCE public client
-

Login (ADR-002)

+

Login

  • Primary = 자체 /login 폼
  • BFF POST /api/auth/login → 무서명 공개 InitiateAuth(USER_PASSWORD_AUTH) → awsops_token (id_token 12h)
  • Hosted UI PKCE = dark fallback, signout = 쿠키 삭제

🔒 Private Edge
공개 ALB 없음 — 진입점은 CloudFront 하나
🔑 ECS Secrets
execution role 권한 (task role 아님)
👤 Admin
SSM + Cognito group (fail-closed)

@@ -371,16 +371,16 @@

Login (ADR-002)

🔒
동결 (do-not-enable)
-
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External (ADR-007)
+
거버넌스된 External
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결. + 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결.
🧠 @@ -394,7 +394,7 @@

Login (ADR-002)

Key Takeaways — Architecture

-
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock
+
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • 하이브리드 라우팅 + 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock
@@ -420,23 +420,23 @@

_*.sql`) ::: @@ -259,7 +259,7 @@ AWSops가 어떻게 만들어졌는지 레이어별로 자세히 보겠습니다 :::notes {timing: 3min} 영속 상태는 Aurora Serverless v2가 담당합니다. -PostgreSQL 17.9, 0.5에서 4 ACU로 오토스케일하고, KMS CMK로 암호화하며 master secret은 RDS가 관리합니다. 앱은 node-pg 공유 풀로 접근합니다. 스키마는 ADR-030 기반 v9 baseline에 worker_jobs, chat 스레드, 진단 리포트 테이블이 더해진 형태이고, 새 테이블은 schema.sql에 덧붙이지 않고 ULID 마이그레이션 파일로 추가하는 규칙입니다. +PostgreSQL 17.9, 0.5에서 4 ACU로 오토스케일하고, KMS CMK로 암호화하며 master secret은 RDS가 관리합니다. 앱은 node-pg 공유 풀로 접근합니다. 스키마는 v9 baseline에 worker_jobs, chat 스레드, 진단 리포트 테이블이 더해진 형태이고, 새 테이블은 schema.sql에 덧붙이지 않고 ULID 마이그레이션 파일로 추가하는 규칙입니다. {cue: pause} 여기서 꼭 짚어야 할 점이 있습니다. Steampipe는 라이브 쿼리 엔진이 아닙니다. flag로 켜는 인벤토리 sync일 뿐입니다. warm Fargate가 41종 리소스 타입을 Aurora로 동기화하고, 이걸 generic `/inventory/[type]` 페이지가 보여줍니다. 라이브 AWS 조회는 어디까지나 AgentCore MCP 도구가 합니다. 예전의 임베디드 pg Pool 방식이 아니라는 점을 강조합니다. {cue: transition} @@ -333,14 +333,14 @@ AI 엔진은 Bedrock AgentCore입니다. ops external-obs

-
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
::: :::notes {timing: 2min} 도구는 9개 섹션 게이트웨이로 묶입니다. -network, container, data, security, cost, monitoring, iac, ops, 그리고 external-obs입니다. ADR-004가 2026년 6월 24일에 개정되면서 external-obs에 Prometheus·ClickHouse 커넥터가 붙었고, 그때부터 9번째 라우팅 가능한 게이트웨이로 승격됐습니다. 예전 버전에서 "9번째 게이트웨이가 아니다"라고 했던 건 그 커넥터가 붙기 전 부트스트랩 상태를 말한 거였고, 지금은 정반대입니다. +network, container, data, security, cost, monitoring, iac, ops, 그리고 external-obs입니다. 2026년 6월 24일에 external-obs에 Prometheus·ClickHouse 커넥터가 붙었고, 그때부터 9번째 라우팅 가능한 게이트웨이로 승격됐습니다. 예전 버전에서 "9번째 게이트웨이가 아니다"라고 했던 건 그 커넥터가 붙기 전 부트스트랩 상태를 말한 거였고, 지금은 정반대입니다. {cue: pause} 전체 카탈로그는 30개 슬라이스, 약 160개 읽기 전용 도구이고, 함대 배포가 완료돼 30개 슬라이스 전부, 9개 게이트웨이 전부 READY 상태로 라이브입니다. {cue: transition} @@ -354,7 +354,7 @@ network, container, data, security, cost, monitoring, iac, ops, 그리고 extern @type: content @transition: slide -# Hybrid Routing & Streaming Chat — ADR-003 +# Hybrid Routing & Streaming Chat ::: left @@ -388,7 +388,7 @@ network, container, data, security, cost, monitoring, iac, ops, 그리고 extern :::notes {timing: 3min} -9개 게이트웨이 중 어디로 보낼지는 ADR-003 하이브리드 라우팅이 정합니다. +9개 게이트웨이 중 어디로 보낼지는 하이브리드 라우팅이 정합니다. 파이프라인은 3단계입니다. 먼저 regex fast-path가 명백한 질의를 즉시 라우팅합니다. 애매하면 Haiku 4.5 분류기가 판단합니다. 그리고 prompt caching으로 약 59% 캐시 히트를 내서 비용과 지연을 줄입니다. 결정된 섹션으로 라우팅한 뒤 SSE로 응답을 스트리밍하면서 어떤 도구를 호출하는지도 함께 보여줍니다. {cue: pause} 게이트 정확도는 69.2%에서 96.9%로 27.7 포인트 올랐고, 2026년 6월 10일에 라이브입니다. @@ -484,7 +484,7 @@ Well-Architected Review를 수동으로 며칠씩 만들어 보신 분 계시죠 :::notes {timing: 2min} 무거운 작업은 모두 비동기 워커 티어가 받습니다. -흐름은 이렇습니다. 웹이 진단은 `/api/diagnosis`, 컴플라이언스는 `/api/compliance/run`으로 제출하면(범용 `POST /api/jobs`는 `noop` 계열만 허용, ADR-009) worker_jobs 테이블에 queued 상태로 기록하고 SQS에 넣습니다. ESM이 킬스위치 역할을 하면서 dispatcher Lambda를 호출하는데, dispatcher는 job_id 기준으로 멱등하게 동작합니다. +흐름은 이렇습니다. 웹이 진단은 `/api/diagnosis`, 컴플라이언스는 `/api/compliance/run`으로 제출하면(범용 `POST /api/jobs`는 `noop` 계열만 허용) worker_jobs 테이블에 queued 상태로 기록하고 SQS에 넣습니다. ESM이 킬스위치 역할을 하면서 dispatcher Lambda를 호출하는데, dispatcher는 job_id 기준으로 멱등하게 동작합니다. {cue: pause} 그다음 Step Functions Standard가 `$.runtime` 값을 보고 분기합니다. 짧은 작업은 RunLambda로, 길거나 OOM 위험이 있는 작업은 ecs:runTask.sync로 Fargate 워커에 넘깁니다. 진단 리포트나 DOCX·PDF 생성 같은 무거운 작업이 여기로 갑니다. 워커는 스스로 running과 succeeded를 Aurora에 기록합니다. 실패해서 Catch로 빠지면 status_updater Lambda가 failed로 표시하는데, 이건 SFN이 VPC 안 Aurora에 직접 쓸 수 없기 때문입니다. 마지막으로 reaper가 5분마다 stale 작업을 정합화합니다. 그래서 OOM에 안전한 백본입니다. 참고로 Fargate 워커는 ENTRYPOINT가 아니라 CMD를 써야 SFN command override가 정상 동작합니다. @@ -506,7 +506,7 @@ Well-Architected Review를 수동으로 며칠씩 만들어 보신 분 계시죠 ### 잡 종류 (2026-06-18 이후 증가) - **schedule_dispatcher** — 시간별 EventBridge → `report_schedules` 스캔 → 진단 잡 enqueue (`diagnosis_schedule_enabled`, LIVE) -- **diagnosis_digest** (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요) +- **diagnosis_digest** (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 배포됨) - **compliance** (Powerpipe) — CIS 벤치마크 Fargate 잡 (`steampipe_enabled`) ::: @@ -618,7 +618,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 @type: content @transition: slide -# Multi-Account — STS AssumeRole Fan-Out (ADR-011) +# Multi-Account — STS AssumeRole Fan-Out ::: left @@ -636,7 +636,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 ### Safety - **host self-assume 가드** — target == host면 `get_role_arn()`이 `None` 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지) -- **read-only 한정** — 대상 계정 변경 작업 없음(ADR-005 동결과 정합) +- **read-only 한정** — 대상 계정 변경 작업 없음 - `/accounts` admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음) ::: @@ -648,7 +648,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 • ExternalId는 1st-party(task-role ARN 핀)면 선택, 3rd-party면 필수 • host self-assume 가드로 "cross-account 차단" 오진을 방지 -AWSops는 단일 호스트 계정에서 돌지만, 여러 AWS 계정을 통합 대시보드로 보여줄 수 있습니다. ADR-011이 이걸 STS AssumeRole 기반 read-only 페더레이션으로 정의합니다. Aurora에 accounts 레지스트리를 두고, 호스트 계정은 처음 접근할 때 lazy seed로 등록됩니다. 대상 계정에는 AWSopsReadOnlyRole을 미리 배포해 두고, host task role이 그 role을 assume합니다. +AWSops는 단일 호스트 계정에서 돌지만, 여러 AWS 계정을 통합 대시보드로 보여줄 수 있습니다. STS AssumeRole 기반 read-only 페더레이션으로 조회합니다. Aurora에 accounts 레지스트리를 두고, 호스트 계정은 처음 접근할 때 lazy seed로 등록됩니다. 대상 계정에는 AWSopsReadOnlyRole을 미리 배포해 두고, host task role이 그 role을 assume합니다. {cue: pause} ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AWSops task-role ARN을 정확히 핀해 두면 1st-party로 보고 ExternalId를 생략할 수 있습니다. 반대로 3rd-party거나 와일드카드 principal이면 ExternalId가 필수입니다 — confused-deputy 공격을 막기 위해서입니다. 이 구분은 코드가 강제하는 게 아니라 trust policy로 운영적으로 강제됩니다. 전역 계정 셀렉터로 한 계정만 볼 수도 있고, __all__을 선택하면 전 계정을 fan-out으로 조회해서 비용이나 Bedrock 사용량 같은 걸 집계합니다. @@ -675,7 +675,7 @@ ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AW - **RS256 JWKS** 서명 검증 (iss/aud/token_use) - OAuth `state` + **PKCE public client** -### Login (ADR-002) +### Login - **Primary** = 자체 `/login` 폼 - BFF `POST /api/auth/login` → 무서명 공개 `InitiateAuth(USER_PASSWORD_AUTH)` → `awsops_token` (id_token 12h) @@ -696,7 +696,7 @@ ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AW 인증은 Cognito와 Lambda@Edge가 함께 처리합니다. Lambda@Edge는 us-east-1에서 viewer-request로 동작하며 RS256 JWKS로 토큰 서명을 검증합니다. iss, aud, token_use를 모두 확인하고, OAuth state와 PKCE public client를 씁니다. 시크릿이 없는 공개 클라이언트입니다. {cue: pause} -로그인의 기본 경로는 ADR-002에 따라 자체 `/login` 폼입니다. BFF의 `POST /api/auth/login`이 무서명 공개 InitiateAuth를 USER_PASSWORD_AUTH 방식으로 호출해 awsops_token을 발급합니다. id_token은 12시간 유효합니다. 미인증 요청은 엣지가 `/login`으로 보냅니다. Hosted UI PKCE 플로우는 다크 폴백으로 남겨두고, signout은 쿠키만 삭제합니다. +로그인의 기본 경로는 자체 `/login` 폼입니다. BFF의 `POST /api/auth/login`이 무서명 공개 InitiateAuth를 USER_PASSWORD_AUTH 방식으로 호출해 awsops_token을 발급합니다. id_token은 12시간 유효합니다. 미인증 요청은 엣지가 `/login`으로 보냅니다. Hosted UI PKCE 플로우는 다크 폴백으로 남겨두고, signout은 쿠키만 삭제합니다. 오른쪽 세 가지가 보안 기둥입니다. 공개 ALB가 없는 비공개 엣지, ECS 시크릿은 task role이 아니라 execution role 권한이어야 한다는 점, 그리고 admin 모델은 SSM과 Cognito group 기반으로 fail-closed입니다. {cue: transition} 이걸 실제로 배포하는 흐름을 보겠습니다. @@ -760,16 +760,16 @@ AgentCore와 워커는 각각의 flag로 apply한 뒤 `make agentcore`, `make wo
🔒
동결 (do-not-enable)
-
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External (ADR-007)
+
거버넌스된 External
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결. + 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결.
🧠 @@ -781,10 +781,10 @@ AgentCore와 워커는 각각의 flag로 apply한 뒤 `make agentcore`, `make wo :::notes {timing: 3min} 이 아키텍처의 태세를 정확히 정의하겠습니다. -AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니다. ADR-005(옛 029/036/031 Phase4를 통합, 2026년 6월 11일 reversal 합의)에 따라 AWS 리소스 변경과 자율 실행은 동결입니다. 다만 여기서 정확히 말씀드릴 게 있는데, 이건 "영구 금지"가 아닙니다. BASELINE 문서가 그 표현을 명시적으로 거부합니다. 정확히는 "안전조건 충족 + 새로운 명시적 결정 전까지" 동결이고, 완화하려면 새 ADR과 멀티-AI 패널, 날짜가 박힌 owner override가 필요합니다. do-not-enable, 그냥 조용히 다시 켜지 않는다는 뜻입니다. +AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니다. AWS 리소스 변경과 자율 실행은 동결입니다. 영구 금지는 아니지만, 해제하려면 별도의 명시적인 제품 결정이 필요합니다. do-not-enable, 그냥 조용히 다시 켜지 않는다는 뜻입니다. {cue: pause} -딱 하나 예외가 있습니다. ADR-015인데, 2026년 7월 1일에 오준석님이 owner-override로 승인했습니다. 호스트 자기 web 서비스를 Aurora secret 회전 이벤트에 맞춰 force-new-deployment로 재시작하는 것, 그거 하나만 허용됩니다. IAM은 서비스 1개 ARN으로 스코프되고, secret id가 안 맞으면 fail-closed로 아예 안 돕니다. 기본값은 off입니다. 나머지 ADR-005는 전부 그대로 동결입니다. -다만 외부 데이터에 대해서는 다릅니다. ADR-007이 이걸 다루는데, 외부 관측성 데이터 읽기, 그리고 외부 기록·티켓·메시지 write는 거버넌스 하에 허용됩니다. SSRF 방어, Secrets 관리, DLP와 redaction, human-gate를 모두 거칩니다. 즉 AWS 리소스는 안 건드리지만, 외부 시스템에 리포트를 보내거나 티켓을 끊는 건 통제된 형태로 가능합니다. +딱 하나 예외가 있습니다. 호스트 자기 web 서비스를 Aurora secret 회전 이벤트에 맞춰 force-new-deployment로 재시작하는 것, 그거 하나만 허용됩니다. IAM은 서비스 1개 ARN으로 스코프되고, secret id가 안 맞으면 fail-closed로 아예 안 돕니다. 기본값은 off입니다. 나머지는 전부 그대로 동결입니다. +다만 외부 데이터에 대해서는 다릅니다. 외부 관측성 데이터 읽기, 그리고 외부 기록·티켓·메시지 write는 거버넌스 하에 허용됩니다. SSRF 방어, Secrets 관리, DLP와 redaction, human-gate를 모두 거칩니다. 즉 AWS 리소스는 안 건드리지만, 외부 시스템에 리포트를 보내거나 티켓을 끊는 건 통제된 형태로 가능합니다. 그리고 핵심 차별점, AI 추론은 고객 계정 안 Bedrock에서 돌립니다. 외부 AI SaaS API가 없으므로 운영 데이터가 계정 밖으로 나가지 않습니다. {cue: transition} 전체를 한 장으로 정리하겠습니다. @@ -802,16 +802,16 @@ AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니 - **Terraform MSA on private edge** — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음 - **Aurora 영속 상태** — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐) - **AgentCore 섹션 에이전트** — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기 -- **ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정** — regex + Haiku 분류기 + caching, STS AssumeRole fan-out +- **하이브리드 라우팅 + 멀티 계정** — regex + Haiku 분류기 + caching, STS AssumeRole fan-out - **OOM-safe 비동기 워커 티어** — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리 -- **읽기 전용 동결 태세** — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock +- **읽기 전용 동결 태세** — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock :::notes {timing: 2min} 아키텍처 파트를 한 장으로 정리합니다. 첫째, 비공개 엣지 위의 Terraform MSA입니다. CloudFront VPC Origin에서 내부 ALB를 거쳐 Fargate로 가고, 공개 ALB는 없습니다. 둘째, 영속 상태는 Aurora PostgreSQL 17.9입니다. Steampipe는 라이브 엔진이 아니라 flag로 켜는 인벤토리 sync일 뿐입니다. {cue: pause} -셋째, 라이브 AWS 읽기는 AgentCore 섹션 에이전트가, 9개 게이트웨이에 약 160개 읽기 전용 도구로 처리합니다. 30개 슬라이스 전부 LIVE입니다. 넷째, 라우팅은 ADR-003 하이브리드고 ADR-011 멀티 계정 STS AssumeRole로 여러 계정을 fan-out 조회합니다. 다섯째, 무거운 작업은 OOM에 안전한 비동기 워커 티어가 받는데, 진단 리포트뿐 아니라 스케줄, 알림 다이제스트, 컴플라이언스 잡까지 늘었습니다. 여섯째, 그 위에 읽기 전용 동결 태세가 있는데 영구 금지는 아니고 ADR-015라는 좁은 예외 1건이 있습니다. 그리고 in-account Bedrock입니다. +셋째, 라이브 AWS 읽기는 AgentCore 섹션 에이전트가, 9개 게이트웨이에 약 160개 읽기 전용 도구로 처리합니다. 30개 슬라이스 전부 LIVE입니다. 넷째, 라우팅은 하이브리드고 멀티 계정 STS AssumeRole로 여러 계정을 fan-out 조회합니다. 다섯째, 무거운 작업은 OOM에 안전한 비동기 워커 티어가 받는데, 진단 리포트뿐 아니라 스케줄, 알림 다이제스트, 컴플라이언스 잡까지 늘었습니다. 여섯째, 그 위에 읽기 전용 동결 태세가 있는데 영구 금지는 아니고 좁은 예외 1건이 있습니다. 그리고 in-account Bedrock입니다. {cue: transition} 세 번째 파트, 실제 데모와 진단 리포트로 이어가겠습니다. ::: From 3e249357f7f0f119ac5e09be19872ce4e9bb6f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=A4=80=EC=84=9D=28Junseok=20Oh=29DevOps?= <52226147+Atom-oh@users.noreply.github.com> Date: Thu, 22 Oct 2026 04:08:36 +0000 Subject: [PATCH 3/9] docs-site: remove ADR references from the deck sources and builder Regenerates awsops-intro.pptx with scripts/pptx/build-awsops-intro-pptx.js (verify-deck.sh passes); HTML is edited in step with its Markdown source. Split from #192 to stay under the AI review input limit. Co-Authored-By: Claude Opus 5.5 --- docs-site/scripts/capture-screenshots.ts | 4 +-- .../scripts/pptx/build-awsops-intro-pptx.js | 28 +++++------------- .../diagrams/agentcore-architecture.drawio | 2 +- .../awsops-intro/01-why-awsops.html | 14 ++++----- .../awsops-intro/01-why-awsops.md | 14 ++++----- .../awsops-intro/03-demo-scenarios.html | 20 ++++++------- .../awsops-intro/03-demo-scenarios.md | 22 +++++++------- .../assets/compliance-benchmark-flow.svg | 2 +- .../assets/security-findings-pipeline.svg | 2 +- .../awsops-intro/awsops-intro.pptx | Bin 2413598 -> 2413110 bytes 10 files changed, 48 insertions(+), 60 deletions(-) diff --git a/docs-site/scripts/capture-screenshots.ts b/docs-site/scripts/capture-screenshots.ts index 373526252..2c08e9bf7 100644 --- a/docs-site/scripts/capture-screenshots.ts +++ b/docs-site/scripts/capture-screenshots.ts @@ -168,14 +168,14 @@ async function login(page: Page): Promise { } }); - // Wait for redirect back to app (dark-fallback path only — v2 defaults to /login, ADR-042). + // Wait for redirect back to app (dark-fallback path only — v2 defaults to /login). // Match against BASE_URL's own origin, not just "amazoncognito.com" — a custom Cognito // domain (CLAUDE.md's `a-ops-v2-auth-*`) wouldn't contain that substring, which would make // this predicate true immediately on the auth page itself instead of after the redirect. await page.waitForURL((u) => URL_POLICY.isApp(u.href), { timeout: 60000 }); console.log('Login successful, redirected to app.'); } else if (new URL(currentUrl).pathname === '/login' || (await page.locator('input[type="password"]').count()) > 0) { - // v2's self-hosted /login form (ADR-042) — email + password + a locale-dependent submit + // v2's self-hosted /login form — email + password + a locale-dependent submit // button ("로그인 →" / "Sign in →"), no placeholder text and no basePath on redirect. console.log('Custom login page detected, filling credentials...'); if (!LOGIN_PASSWORD) throw new Error('AWSOPS_LOGIN_PASSWORD is required'); diff --git a/docs-site/scripts/pptx/build-awsops-intro-pptx.js b/docs-site/scripts/pptx/build-awsops-intro-pptx.js index 25f80f448..6731250e1 100644 --- a/docs-site/scripts/pptx/build-awsops-intro-pptx.js +++ b/docs-site/scripts/pptx/build-awsops-intro-pptx.js @@ -466,9 +466,6 @@ kit.sectionDivider(pres, { • JWKS(JSON Web Key Set): 토큰 서명 검증용 공개키 집합 • CMK(Customer Managed Key): 고객 관리형 KMS 암호화 키 -[출처] -• AWSops 결정 기준선 — 리포지토리 docs/decisions/BASELINE.md - [변경 이력] • 2026-08-11: 초기 작성 • 2026-08-12: AWS Light 테마 재설계`); @@ -489,8 +486,8 @@ kit.sectionDivider(pres, { }); const cols = [ ["대화형 어시스턴트", "ai_agent", "자연어 질문을 자동 라우팅하거나 슬래시(/)로 섹션을 지정. \"두 리소스 간 통신이 안 되는 원인\", \"이 IAM 역할 과다권한 점검\" 같은 운영 질문에 라이브 근거로 답변", A.blue], - ["aws-data — 리소스 질의 섹션", "aws_cloud", "\"리전별 EC2 몇 개야?\" 같은 수량·목록 질문을 받는 generic 섹션. 라이브 AWS 조회는 AgentCore 게이트웨이 경유가 원칙(ADR-001/010) — 별도 SQL 라이브 실행 경로는 설계상 차단", A.green], - ["전문 섹션 6종 (자동 수집형 설계)", "evaluations", "유휴 리소스 스캔 · EKS/DB/MSK 최적화 · 지연 분석 · 인시던트 — 근거 데이터를 먼저 모으고 분석하는 설계 — 현재는 설계 원칙(ADR-001/010)에 따라 비활성, 표준 라우팅으로 대응. 총 16개 챗 섹션 구성", A.magenta], + ["aws-data — 리소스 질의 섹션", "aws_cloud", "\"리전별 EC2 몇 개야?\" 같은 수량·목록 질문을 받는 generic 섹션. 라이브 AWS 조회는 AgentCore 게이트웨이 경유가 원칙 — 별도 SQL 라이브 실행 경로는 설계상 차단", A.green], + ["전문 섹션 6종 (자동 수집형 설계)", "evaluations", "유휴 리소스 스캔 · EKS/DB/MSK 최적화 · 지연 분석 · 인시던트 — 근거 데이터를 먼저 모으고 분석하는 설계 — 현재는 설계 원칙에 따라 비활성, 표준 라우팅으로 대응. 총 16개 챗 섹션 구성", A.magenta], ]; const gw5 = 0.35, cw = (CW - gw5 * 2) / 3, cy = 3.15, chh = 2.85; cols.forEach((c, i) => { @@ -513,15 +510,12 @@ kit.sectionDivider(pres, { • 챗 16섹션 정의 = 게이트웨이 9 + aws-data + 전문 섹션 6 (로컬 7종은 현재 비활성 — 표준 라우팅 대응) • 라이브 AWS 조회는 AgentCore 게이트웨이 경유 원칙 -AI 레이어의 핵심은 '분업'입니다. 범용 챗봇 하나가 모든 질문을 받는 게 아니라, 네트워크·컨테이너·데이터·보안·비용·모니터링·IaC·운영·외부관측 아홉 개 도메인 게이트웨이가 각자 전문 도구를 들고 있습니다. 질문이 오면 해당 도메인 에이전트가 라이브 AWS 데이터를 직접 조회해서 답합니다. 여기에 두 가지가 더 있습니다. aws-data는 리소스 수량·목록 질문을 받는 generic 섹션이고 — 라이브 AWS 조회는 어디까지나 AgentCore 게이트웨이 경유가 원칙입니다. 그리고 유휴 리소스 스캔이나 인시던트 분석 같은 여섯 개 전문 섹션은 근거 데이터를 먼저 모으고 분석하는 자동 수집형 설계입니다 — 이 경로는 현재 설계 원칙(ADR-001/010)에 따라 비활성이며 해당 질문은 표준 라우팅이 대응합니다. 합쳐서 16개 섹션 정의입니다. 모델은 Bedrock의 Claude 계열을 용도별로 혼용합니다. +AI 레이어의 핵심은 '분업'입니다. 범용 챗봇 하나가 모든 질문을 받는 게 아니라, 네트워크·컨테이너·데이터·보안·비용·모니터링·IaC·운영·외부관측 아홉 개 도메인 게이트웨이가 각자 전문 도구를 들고 있습니다. 질문이 오면 해당 도메인 에이전트가 라이브 AWS 데이터를 직접 조회해서 답합니다. 여기에 두 가지가 더 있습니다. aws-data는 리소스 수량·목록 질문을 받는 generic 섹션이고 — 라이브 AWS 조회는 어디까지나 AgentCore 게이트웨이 경유가 원칙입니다. 그리고 유휴 리소스 스캔이나 인시던트 분석 같은 여섯 개 전문 섹션은 근거 데이터를 먼저 모으고 분석하는 자동 수집형 설계입니다 — 이 경로는 현재 설계 원칙에 따라 비활성이며 해당 질문은 표준 라우팅이 대응합니다. 합쳐서 16개 섹션 정의입니다. 모델은 Bedrock의 Claude 계열을 용도별로 혼용합니다. [약어] • MCP(Model Context Protocol): AI 에이전트가 도구를 호출하는 표준 프로토콜 • MSK(Managed Streaming for Apache Kafka): AWS 관리형 Kafka 서비스 -[출처] -• AWSops 결정 기준선 — 리포지토리 docs/decisions/BASELINE.md - [변경 이력] • 2026-08-11: 초기 작성 • 2026-08-12: AWS Light 테마 재설계`); @@ -586,7 +580,7 @@ AI 레이어의 핵심은 '분업'입니다. 범용 챗봇 하나가 모든 질 { const s = newContent("읽기 전용은 제약이 아니라 신뢰다", "변경 기능 코드 동결 + K8s 읽기 verb 한정 + 계정당 ReadOnly 역할 1개의 안전 설계"); const cols = [ - ["거버넌스로 동결", "변경·자동 조치·코드 배포 기능은 아키텍처 결정 기록(ADR)으로 동결 — 해제는 별도 승인 절차가 필요한 제품 결정. 단일 문서화 예외(ADR-015): 시크릿 회전 시 자기 웹 서비스 재시작(기본 꺼짐, IAM 1개 ARN 한정)", A.purple], + ["거버넌스로 동결", "변경·자동 조치·코드 배포 기능은 제품 정책으로 동결 — 해제는 별도 승인 절차가 필요한 제품 결정. 단일 문서화 예외: 시크릿 회전 시 자기 웹 서비스 재시작(기본 꺼짐, IAM 1개 ARN 한정)", A.purple], ["K8s는 읽기 verb만", "런타임 조회는 read-only verb(get·list·watch)만 발행 + BFF kind 허용목록으로 추가 제한. 온보딩은 opt-in Access Entry + AWS 관리형 read-only 정책 부여(제어부 권한 설정) — 워크로드 오브젝트는 변경하지 않음", A.green], ["계정 연결 = 역할 1개", "모니터링 대상 계정에는 ReadOnly 역할 하나만 요구. 3rd-party 연결은 ExternalId 필수로 혼동 대리인 차단(1st-party는 역할 ARN 고정 시 선택), 등록 시점에 실제 assume 검증 통과해야 연결", A.blue], ]; @@ -605,22 +599,16 @@ AI 레이어의 핵심은 '분업'입니다. 범용 챗봇 하나가 모든 질 addStatBand(s, [ { value: "1개", label: "계정당 요구 IAM 역할 (ReadOnly)" }, { value: "get·list·watch", label: "K8s에 발행하는 읽기 verb (BFF kind 허용목록)" }, - { value: "1", label: "문서화된 예외 — 자기 웹 재시작 (ADR-015 · 기본 off)" }, + { value: "1", label: "문서화된 예외 — 자기 웹 재시작 (기본 off)" }, { value: "근거 필수", label: "발견마다 근거(소스) 첨부 — 프롬프트 강제 설계" }, ]); kit.addFooter(pres, s, ++pageNum); s.addNotes(`[요약] -• 변경 기능은 거버넌스(ADR)로 동결 — 해제는 별도 승인 절차 +• 변경 기능은 거버넌스로 동결 — 해제는 별도 승인 절차 • K8s 읽기 verb 한정 · 계정 연결은 ReadOnly 역할 1개 + 검증 • AI 오답의 최악 = 틀린 조언 (틀린 변경이 아님) -실무자 여러분께 가장 중요한 슬라이드입니다. AWSops에 변경 기능이 '없는' 것은 미완성이 아니라 설계 결정입니다. 자동 변경은 두 번째 장애의 가장 흔한 원인이고, 운영자가 도구를 신뢰하지 못하면 결국 쓰지 않게 됩니다. 그래서 변경·자동 조치 기능은 아키텍처 결정 기록으로 동결되어 있고, 해제하려면 별도 승인 절차가 필요합니다. 쿠버네티스에는 읽기 verb만 발행하고 — 온보딩 때 opt-in으로 Access Entry에 AWS 관리형 read-only 정책을 부여하는 것이 유일한 설정 변경이며 워크로드 오브젝트는 건드리지 않습니다 — 계정 연결에 요구하는 것도 읽기 전용 역할 하나뿐입니다. 유일한 문서화된 예외는 ADR-015 — 데이터베이스 시크릿 회전 때 자기 자신의 웹 서비스를 재시작하는 것 하나이며, 기본 꺼짐에 IAM도 해당 서비스 ARN 하나로 한정됩니다. 등록 시점에 실제로 역할을 assume해 봐서 성공해야만 연결됩니다. 이 원칙 덕분에 AI가 틀려도 최악의 경우가 '틀린 조언'입니다 — 인프라에는 아무 일도 일어나지 않습니다. 변경은 사람과 기존 IaC 파이프라인의 몫으로 남기고, AWSops는 판단 근거를 극단적으로 잘 만드는 데 집중합니다. - -[약어] -• ADR(Architecture Decision Record): 아키텍처 결정과 근거를 남기는 공식 기록 - -[출처] -• AWSops 결정 기준선 — 리포지토리 docs/decisions/BASELINE.md +실무자 여러분께 가장 중요한 슬라이드입니다. AWSops에 변경 기능이 '없는' 것은 미완성이 아니라 설계 결정입니다. 자동 변경은 두 번째 장애의 가장 흔한 원인이고, 운영자가 도구를 신뢰하지 못하면 결국 쓰지 않게 됩니다. 그래서 변경·자동 조치 기능은 제품 정책으로 동결되어 있고, 해제하려면 별도 승인 절차가 필요합니다. 쿠버네티스에는 읽기 verb만 발행하고 — 온보딩 때 opt-in으로 Access Entry에 AWS 관리형 read-only 정책을 부여하는 것이 유일한 설정 변경이며 워크로드 오브젝트는 건드리지 않습니다 — 계정 연결에 요구하는 것도 읽기 전용 역할 하나뿐입니다. 유일한 문서화된 예외는 데이터베이스 시크릿 회전 때 자기 자신의 웹 서비스를 재시작하는 것 하나이며, 기본 꺼짐에 IAM도 해당 서비스 ARN 하나로 한정됩니다. 등록 시점에 실제로 역할을 assume해 봐서 성공해야만 연결됩니다. 이 원칙 덕분에 AI가 틀려도 최악의 경우가 '틀린 조언'입니다 — 인프라에는 아무 일도 일어나지 않습니다. 변경은 사람과 기존 IaC 파이프라인의 몫으로 남기고, AWSops는 판단 근거를 극단적으로 잘 만드는 데 집중합니다. [변경 이력] • 2026-08-11: 초기 작성 @@ -862,7 +850,7 @@ kit.sectionDivider(pres, { { const s = newContent("가장 많이 받는 질문, 셋", "권한 · AI 신뢰 · 기존 도구 — 도입 검토에서 반드시 나오는 질문 선답변"); const cols = [ - ["\"권한을 얼마나 줘야 하죠?\"", "읽기 전용 역할 하나입니다. 3rd-party 연결에는 ExternalId로 혼동 대리인을 차단하고, 등록 시점에 실제 assume 검증을 통과해야 연결됩니다. 모니터링 대상 계정에는 쓰기 권한을 요구하지도, 받지도 않습니다(호스트 자신에 대한 단일 문서화 예외는 ADR-015 웹 재시작뿐).", A.blue], + ["\"권한을 얼마나 줘야 하죠?\"", "읽기 전용 역할 하나입니다. 3rd-party 연결에는 ExternalId로 혼동 대리인을 차단하고, 등록 시점에 실제 assume 검증을 통과해야 연결됩니다. 모니터링 대상 계정에는 쓰기 권한을 요구하지도, 받지도 않습니다(호스트 자신에 대한 단일 문서화 예외는 웹 재시작뿐).", A.blue], ["\"AI가 틀리면요?\"", "에이전트는 수집된 라이브 데이터에만 근거하고, 신호가 없으면 '데이터 불가'로 답하도록 설계되어 있습니다. 모든 발견에 근거가 첨부되고 — 읽기 전용이라 최악의 경우가 '틀린 조언'입니다. Bedrock은 고객 데이터를 모델 학습에 쓰지 않습니다.", A.purple], ["\"기존 도구는 버리나요?\"", "아니요, 연동입니다. Prometheus·ClickHouse 등 8종을 읽기 전용으로 등록하면 그 데이터가 서비스 맵과 AI 진단의 근거로 흡수됩니다. 기존 대시보드는 그대로 두고 '조합하는 층'을 얹습니다.", A.green], ]; diff --git a/docs-site/static/diagrams/agentcore-architecture.drawio b/docs-site/static/diagrams/agentcore-architecture.drawio index 63b8f7eb8..0ffde87c5 100644 --- a/docs-site/static/diagrams/agentcore-architecture.drawio +++ b/docs-site/static/diagrams/agentcore-architecture.drawio @@ -22,7 +22,7 @@ - + diff --git a/docs-site/static/presentation/awsops-intro/01-why-awsops.html b/docs-site/static/presentation/awsops-intro/01-why-awsops.html index 4fcba3385..2107cad66 100644 --- a/docs-site/static/presentation/awsops-intro/01-why-awsops.html +++ b/docs-site/static/presentation/awsops-intro/01-why-awsops.html @@ -188,7 +188,7 @@

보고서 작성 부담

Bedrock AgentCore
-
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
ADR-003 하이브리드 라우팅
+
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
하이브리드 라우팅
@@ -255,7 +255,7 @@

보고서 작성 부담

AWSops — By the Numbers

-
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI RoutingADR-003 하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
+
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI Routing하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
@@ -296,7 +296,7 @@

For FinOps / Management

🔒
Read-Only Posture
-
AWS 리소스 변경·자율 실행 동결
ADR-005 (FROZEN) / ADR-007 — 설계상 안전
+
AWS 리소스 변경·자율 실행 동결
설계상 안전
📊
@@ -311,7 +311,7 @@

For FinOps / Management

Key Takeaways — 5가지 목표, 하나의 대시보드

-
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 (ADR-005 FROZEN) + 4개 언어 UX
+
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 + 4개 언어 UX
@@ -327,12 +327,12 @@

For FinOps / Management

2: "[1min] 총 65분 세션으로 3개 파트로 나누어 진행합니다.\n첫 번째로 왜 이런 도구가 필요한지, 두 번째로 어떻게 만들었는지, 세 번째로 실제로 어떻게 쓰는지를 보여드리겠습니다.", 3: "⏸️ [3min] [요약]\n• 이 프로젝트를 시작할 때 세운 5가지 목표를 먼저 공유합니다.\n\n이 프로젝트를 시작할 때 5가지 목표를 세웠습니다.\n\n첫째, DevOps·SRE의 가시성 향상입니다. 콘솔을 오가지 않고 NFM 트래픽 분석, Direct Connect 상태, DNS·IP·VPC 엔드포인트·Network Firewall까지 한 화면에서 봅니다.\n\n\n둘째, FinOps로 비용을 최적화하는 것입니다. 읽기 전용 비용 분석과 rightsizing 인사이트, OpenCost 패널을 상시 확인합니다.\n\n셋째, Well-Architected 기준으로 아키텍처를 점검하는 것입니다. 종합진단 리포트가 6개 Pillar에 매핑되어 자동 생성됩니다.\n\n넷째, 보안성 향상입니다. Security Findings와 CIS Compliance 벤치마크를 상시 노출합니다.\n\n다섯째, 장애가 났을 때 AI가 트래픽과 원인을 분석하는 것입니다. NFM의 E2E hop path까지 포함해 자연어로 교차 분석합니다.\n\n\n이 5가지 목표가 앞으로 볼 모든 기능의 출발점입니다. 먼저 이걸 만들게 된 도전 과제부터 보겠습니다.", 4: "❓ ⏸️ [3min] 클라우드 운영을 하다 보면 정말 많은 도전 과제에 직면합니다.\n\n첫 번째는 Console Hopping입니다. 하나의 이슈를 해결하려면 EC2 콘솔에서 시작해서 CloudWatch로 메트릭 보고, VPC에서 네트워크 확인하고, IAM에서 권한 체크하고... 평균 5-7개 콘솔을 돌아다녀야 합니다. 멀티 어카운트면 로그인만 해도 지칩니다.\n\n\n\n두 번째는 데이터 사일로입니다. CloudWatch 메트릭, Prometheus 메트릭, 로그, 트레이스가 각각 다른 시스템에 있어서 교차 분석이 어렵습니다. \"CPU가 높아졌는데 어떤 서비스 때문이지?\" 라는 질문에 답하려면 여러 도구를 동시에 봐야 합니다.\n\n세 번째, 네 번째도 마찬가지로 반복 작업과 보고서 부담이 큽니다.\n\n\n여러분도 이런 경험 있으시죠? 특히 FinOps 리포트를 매달 수동으로 만들어 본 경험이 있으신 분?\n\n\nAWSops는 이 4가지 문제를 동시에 해결합니다.", - 5: "⏸️ [3min] AWSops는 3개 레이어로 구성됩니다.\n\n\nData Layer는 Aurora Serverless v2가 중심입니다. PostgreSQL 17 기반으로 worker 작업, chat 스레드, 진단 리포트 같은 영속 상태를 안전하게 저장합니다. 인벤토리는 flag로 켜는 Steampipe sync가 41종 리소스 타입을 Aurora로 동기화해 화면에 보여주는 보조 역할입니다. 라이브 조회 엔진이 아니라 인벤토리 캐시라는 점이 핵심입니다.\n\nAI Engine은 Bedrock입니다. Opus 4.8, Sonnet 5, Haiku 4.5를 상황에 맞게 쓰고, AgentCore는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)로 설계되어 160개 이상의 읽기 전용 도구를 갖췄고, 함대 배포가 완료되어 30개 슬라이스 전부, 9개 게이트웨이 전부 READY MCP 타깃을 보유하고 있습니다. 라우팅은 ADR-003 하이브리드 방식으로 빠르고 정확합니다.\n\nDashboard는 Next.js 14 thin-BFF입니다. Overview, AI Diagnosis, Assistant, Security, Compliance, Topology, Monitoring, Accounts, Integrations, Jobs, Customization까지 하나의 대시보드로 통합되어 있고, 화면에 보이는 스크린샷처럼 실제 라이브 v2 환경입니다. 무거운 작업은 비동기 워커 티어로 넘깁니다.\n\n\n구체적인 숫자를 보겠습니다.", + 5: "⏸️ [3min] AWSops는 3개 레이어로 구성됩니다.\n\n\nData Layer는 Aurora Serverless v2가 중심입니다. PostgreSQL 17 기반으로 worker 작업, chat 스레드, 진단 리포트 같은 영속 상태를 안전하게 저장합니다. 인벤토리는 flag로 켜는 Steampipe sync가 41종 리소스 타입을 Aurora로 동기화해 화면에 보여주는 보조 역할입니다. 라이브 조회 엔진이 아니라 인벤토리 캐시라는 점이 핵심입니다.\n\nAI Engine은 Bedrock입니다. Opus 4.8, Sonnet 5, Haiku 4.5를 상황에 맞게 쓰고, AgentCore는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)로 설계되어 160개 이상의 읽기 전용 도구를 갖췄고, 함대 배포가 완료되어 30개 슬라이스 전부, 9개 게이트웨이 전부 READY MCP 타깃을 보유하고 있습니다. 라우팅은 하이브리드 방식으로 빠르고 정확합니다.\n\nDashboard는 Next.js 14 thin-BFF입니다. Overview, AI Diagnosis, Assistant, Security, Compliance, Topology, Monitoring, Accounts, Integrations, Jobs, Customization까지 하나의 대시보드로 통합되어 있고, 화면에 보이는 스크린샷처럼 실제 라이브 v2 환경입니다. 무거운 작업은 비동기 워커 티어로 넘깁니다.\n\n\n구체적인 숫자를 보겠습니다.", 6: "[1min] [요약]\n• 슬라이드웨어 목업이 아니라 실제 라이브 v2 환경 캡처\n\n지금 보시는 건 mockup이 아니라 실제 운영 중인 v2 대시보드 화면입니다.\n\n\n숫자로 다시 정리해 보겠습니다.", - 7: "[2min] 숫자보다 구조로 보면 더 명확합니다.\n\n인프라는 Terraform 기반 MSA입니다. 공개 ALB 없이 CloudFront VPC Origin이 내부 ALB를 거쳐 Fargate로 들어오는 비공개 엣지 구조입니다. 컴퓨트는 ECS Fargate로, 웹 thin-BFF와 OOM에 안전한 비동기 워커 티어가 분리되어 있습니다. 모두 arm64입니다.\n\n데이터는 Aurora Serverless v2, PostgreSQL 17로 영속 상태를 보관하고, 인벤토리는 41종 리소스 타입을 sync합니다.\n\nAI는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)에 160개 이상의 읽기 전용 도구가 설계되어 있고, 30개 슬라이스 전부 함대 배포되어 9개 게이트웨이 전부 READY 상태입니다. 라우팅은 ADR-003 하이브리드로 게이트 정확도 96.9%를 달성했습니다. 진단은 light·mid 티어가 9섹션(기본 8 + 의도-실제 드리프트 1), deep 티어가 16섹션이며 Well-Architected에 매핑되고 DOCX/PDF로 뽑을 수 있습니다. UX 쪽은 3-테마·모바일 대응에 더해 한국어/English/中文/日本語 4개 언어를 완전히 지원합니다 — 일본어는 최근 복원되어 전체 화면 번역 커버리지 점검까지 마쳤습니다.\n\n\n이게 어떤 가치를 만드는지 보겠습니다.", + 7: "[2min] 숫자보다 구조로 보면 더 명확합니다.\n\n인프라는 Terraform 기반 MSA입니다. 공개 ALB 없이 CloudFront VPC Origin이 내부 ALB를 거쳐 Fargate로 들어오는 비공개 엣지 구조입니다. 컴퓨트는 ECS Fargate로, 웹 thin-BFF와 OOM에 안전한 비동기 워커 티어가 분리되어 있습니다. 모두 arm64입니다.\n\n데이터는 Aurora Serverless v2, PostgreSQL 17로 영속 상태를 보관하고, 인벤토리는 41종 리소스 타입을 sync합니다.\n\nAI는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)에 160개 이상의 읽기 전용 도구가 설계되어 있고, 30개 슬라이스 전부 함대 배포되어 9개 게이트웨이 전부 READY 상태입니다. 라우팅은 하이브리드로 게이트 정확도 96.9%를 달성했습니다. 진단은 light·mid 티어가 9섹션(기본 8 + 의도-실제 드리프트 1), deep 티어가 16섹션이며 Well-Architected에 매핑되고 DOCX/PDF로 뽑을 수 있습니다. UX 쪽은 3-테마·모바일 대응에 더해 한국어/English/中文/日本語 4개 언어를 완전히 지원합니다 — 일본어는 최근 복원되어 전체 화면 번역 커버리지 점검까지 마쳤습니다.\n\n\n이게 어떤 가치를 만드는지 보겠습니다.", 8: "⏸️ [3min] 두 가지 관점에서 가치를 드립니다.\n\nDevOps나 SRE 분들에게는 콘솔 호핑 없이 한 화면에서 모든 리소스를 보고, AI에게 자연어로 질문하면 됩니다. \"이 EC2 인스턴스가 왜 느려?\"라고 물으면 CloudWatch 메트릭을 확인하고, 네트워크 경로를 분석하고, 관련 로그를 찾아줍니다. 모두 읽기 전용이고, 응답은 스트리밍으로 흐릅니다. Topology와 EKS 읽기 전용 뷰에 더해, NFM 트래픽 top-contributor와 E2E hop path, Direct Connect 피크 사용률·BGP 라우트, DNS·IP·VPC 엔드포인트·Network Firewall까지 네트워크 6종 메뉴가 같은 대시보드에 통합되어 있습니다. Prometheus·Loki·Tempo 같은 데이터소스 Explore도 함께 제공합니다.\n\n\n\nFinOps나 Management 분들에게는 읽기 전용 비용 분석과 rightsizing 인사이트를 드립니다. 중요한 건 권고만 제시하고 자동으로 바꾸지 않는다는 점입니다. 그리고 종합진단 리포트를 light·mid 티어 9섹션, deep 티어 16섹션으로 만들고, Well-Architected에 매핑해 DOCX와 PDF로 내보냅니다. 무거운 생성 작업은 비동기 워커가 처리하므로 수작업 2-3일이 사라집니다.\n\n\n가장 중요한 차별점을 보겠습니다.", 9: "[1min] [요약]\n• Cmd-K로 어디서든 키보드 이동\n• 한/영/中/日 4개 언어, 최근 일본어 복원 + 전체 커버리지 점검\n\nCmd-K 커맨드 팔레트로 마우스 없이 전체 화면을 이동할 수 있고, 한국어·English·中文·日本語 4개 언어를 완전히 지원합니다. 일본어는 최근 복원되면서 전체 화면 번역 커버리지 점검도 함께 마쳤습니다.\n\n\n가장 중요한 차별점을 보겠습니다.", - 10: "❓ [3min] AWSops의 차별점은 세 가지로 압축됩니다.\n\n첫째, In-Account Bedrock AI입니다. AI 추론을 고객 AWS 계정 안의 Bedrock에서 직접 호출합니다. OpenAI 같은 외부 AI SaaS API를 쓰지 않으므로 데이터가 계정 밖으로 나가지 않습니다. 금융, 공공, 의료처럼 데이터 주권이 중요한 환경에 적합합니다.\n\n둘째, 읽기 전용 운영 태세입니다. ADR-005 기준으로 AWS 리소스 변경과 자율 실행은 동결(FROZEN, 새 명시적 결정 전까지)되어 있습니다. AI가 진단하고 권고할 뿐 직접 바꾸지 않으므로, 설계 단계에서부터 안전합니다. \"read-only\"는 AWS 리소스에 한정된 정의이고, 외부 관측성 데이터소스의 읽기/쓰기는 ADR-007 거버넌스 하에 별도로 허용됩니다.\n\n셋째, AI 종합진단 리포트입니다. Well-Architected에 매핑된 light·mid 9섹션, deep 16섹션 리포트를 비동기 워커가 생성하고 DOCX와 PDF로 내보냅니다.\n\n\n외부 AI SaaS에 운영 데이터를 보내는 게 부담스러웠던 분 계시죠? AWSops는 그 경로 자체가 없습니다.\n\n\n이제 아키텍처를 자세히 살펴보겠습니다.", + 10: "❓ [3min] AWSops의 차별점은 세 가지로 압축됩니다.\n\n첫째, In-Account Bedrock AI입니다. AI 추론을 고객 AWS 계정 안의 Bedrock에서 직접 호출합니다. OpenAI 같은 외부 AI SaaS API를 쓰지 않으므로 데이터가 계정 밖으로 나가지 않습니다. 금융, 공공, 의료처럼 데이터 주권이 중요한 환경에 적합합니다.\n\n둘째, 읽기 전용 운영 태세입니다. AWS 리소스 변경과 자율 실행은 동결(FROZEN)되어 있습니다. AI가 진단하고 권고할 뿐 직접 바꾸지 않으므로, 설계 단계에서부터 안전합니다. \"read-only\"는 AWS 리소스에 한정된 정의이고, 외부 관측성 데이터소스의 읽기/쓰기는 거버넌스 하에 별도로 허용됩니다.\n\n셋째, AI 종합진단 리포트입니다. Well-Architected에 매핑된 light·mid 9섹션, deep 16섹션 리포트를 비동기 워커가 생성하고 DOCX와 PDF로 내보냅니다.\n\n\n외부 AI SaaS에 운영 데이터를 보내는 게 부담스러웠던 분 계시죠? AWSops는 그 경로 자체가 없습니다.\n\n\n이제 아키텍처를 자세히 살펴보겠습니다.", 11: "[2min] 첫 번째 파트를 정리하겠습니다.\n\nAWSops는 처음 세운 5가지 목표를 하나의 대시보드 안에서 동시에 해결합니다.\n가시성은 Overview·Topology·Monitoring에 NFM·Direct Connect를 포함한 네트워크 6종 메뉴까지 통합해서, FinOps는 읽기 전용 비용 분석과 Rightsizing으로, Well-Architected 점검은 자동 생성되는 종합진단 리포트로, 보안성은 Security Findings와 CIS Compliance로, 장애 대응은 AI가 메트릭·로그·트레이스·NFM 경로를 함께 교차 분석하는 것으로 풀었습니다.\n\n그리고 가장 중요한 것은, AI 추론을 고객 계정 안 Bedrock에서 돌리고, AWS 리소스 변경과 자율 실행은 동결한 읽기 전용 태세라는 점입니다. 설계상 안전합니다.\n\n\n5분 쉬고 아키텍처를 자세히 보겠습니다." }; const deck = new SlideFramework({ diff --git a/docs-site/static/presentation/awsops-intro/01-why-awsops.md b/docs-site/static/presentation/awsops-intro/01-why-awsops.md index 488c1c20a..6c7775d46 100644 --- a/docs-site/static/presentation/awsops-intro/01-why-awsops.md +++ b/docs-site/static/presentation/awsops-intro/01-why-awsops.md @@ -213,7 +213,7 @@ AWSops는 이 4가지 문제를 동시에 해결합니다.
Bedrock AgentCore
-
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
ADR-003 하이브리드 라우팅
+
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
하이브리드 라우팅
@@ -274,7 +274,7 @@ AWSops는 3개 레이어로 구성됩니다. {cue: pause} Data Layer는 Aurora Serverless v2가 중심입니다. PostgreSQL 17 기반으로 worker 작업, chat 스레드, 진단 리포트 같은 영속 상태를 안전하게 저장합니다. 인벤토리는 flag로 켜는 Steampipe sync가 41종 리소스 타입을 Aurora로 동기화해 화면에 보여주는 보조 역할입니다. 라이브 조회 엔진이 아니라 인벤토리 캐시라는 점이 핵심입니다. -AI Engine은 Bedrock입니다. Opus 4.8, Sonnet 5, Haiku 4.5를 상황에 맞게 쓰고, AgentCore는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)로 설계되어 160개 이상의 읽기 전용 도구를 갖췄고, 함대 배포가 완료되어 30개 슬라이스 전부, 9개 게이트웨이 전부 READY MCP 타깃을 보유하고 있습니다. 라우팅은 ADR-003 하이브리드 방식으로 빠르고 정확합니다. +AI Engine은 Bedrock입니다. Opus 4.8, Sonnet 5, Haiku 4.5를 상황에 맞게 쓰고, AgentCore는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)로 설계되어 160개 이상의 읽기 전용 도구를 갖췄고, 함대 배포가 완료되어 30개 슬라이스 전부, 9개 게이트웨이 전부 READY MCP 타깃을 보유하고 있습니다. 라우팅은 하이브리드 방식으로 빠르고 정확합니다. Dashboard는 Next.js 14 thin-BFF입니다. Overview, AI Diagnosis, Assistant, Security, Compliance, Topology, Monitoring, Accounts, Integrations, Jobs, Customization까지 하나의 대시보드로 통합되어 있고, 화면에 보이는 스크린샷처럼 실제 라이브 v2 환경입니다. 무거운 작업은 비동기 워커 티어로 넘깁니다. @@ -320,7 +320,7 @@ Dashboard는 Next.js 14 thin-BFF입니다. Overview, AI Diagnosis, Assistant, Se | **Compute** | ECS Fargate | web thin-BFF + OOM-safe 비동기 워커 티어 (arm64) | | **Data** | Aurora Serverless v2 | PostgreSQL 17 영속 상태 + 41종 인벤토리 sync | | **AI Tools** | 9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVE | AgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃) | -| **AI Routing** | ADR-003 하이브리드 | regex fast-path + Haiku 분류기, 게이트 96.9% | +| **AI Routing** | 하이브리드 | regex fast-path + Haiku 분류기, 게이트 96.9% | | **Diagnosis** | light·mid 9 / deep 16 섹션 | Well-Architected 매핑, DOCX/PDF 내보내기 | | **UX** | 3-테마 + 모바일 + 4개 언어 | 반응형 대시보드 + Cmd-K + 한/영/中/日 i18n | @@ -332,7 +332,7 @@ Dashboard는 Next.js 14 thin-BFF입니다. Overview, AI Diagnosis, Assistant, Se 데이터는 Aurora Serverless v2, PostgreSQL 17로 영속 상태를 보관하고, 인벤토리는 41종 리소스 타입을 sync합니다. -AI는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)에 160개 이상의 읽기 전용 도구가 설계되어 있고, 30개 슬라이스 전부 함대 배포되어 9개 게이트웨이 전부 READY 상태입니다. 라우팅은 ADR-003 하이브리드로 게이트 정확도 96.9%를 달성했습니다. 진단은 light·mid 티어가 9섹션(기본 8 + 의도-실제 드리프트 1), deep 티어가 16섹션이며 Well-Architected에 매핑되고 DOCX/PDF로 뽑을 수 있습니다. UX 쪽은 3-테마·모바일 대응에 더해 한국어/English/中文/日本語 4개 언어를 완전히 지원합니다 — 일본어는 최근 복원되어 전체 화면 번역 커버리지 점검까지 마쳤습니다. +AI는 9개 섹션 게이트웨이(8개 AWS 도메인 + external-obs)에 160개 이상의 읽기 전용 도구가 설계되어 있고, 30개 슬라이스 전부 함대 배포되어 9개 게이트웨이 전부 READY 상태입니다. 라우팅은 하이브리드로 게이트 정확도 96.9%를 달성했습니다. 진단은 light·mid 티어가 9섹션(기본 8 + 의도-실제 드리프트 1), deep 티어가 16섹션이며 Well-Architected에 매핑되고 DOCX/PDF로 뽑을 수 있습니다. UX 쪽은 3-테마·모바일 대응에 더해 한국어/English/中文/日本語 4개 언어를 완전히 지원합니다 — 일본어는 최근 복원되어 전체 화면 번역 커버리지 점검까지 마쳤습니다. {cue: transition} 이게 어떤 가치를 만드는지 보겠습니다. @@ -432,7 +432,7 @@ Cmd-K 커맨드 팔레트로 마우스 없이 전체 화면을 이동할 수 있
🔒
Read-Only Posture
-
AWS 리소스 변경·자율 실행 동결
ADR-005 (FROZEN) / ADR-007 — 설계상 안전
+
AWS 리소스 변경·자율 실행 동결
설계상 안전
📊
@@ -448,7 +448,7 @@ AWSops의 차별점은 세 가지로 압축됩니다. 첫째, In-Account Bedrock AI입니다. AI 추론을 고객 AWS 계정 안의 Bedrock에서 직접 호출합니다. OpenAI 같은 외부 AI SaaS API를 쓰지 않으므로 데이터가 계정 밖으로 나가지 않습니다. 금융, 공공, 의료처럼 데이터 주권이 중요한 환경에 적합합니다. -둘째, 읽기 전용 운영 태세입니다. ADR-005 기준으로 AWS 리소스 변경과 자율 실행은 동결(FROZEN, 새 명시적 결정 전까지)되어 있습니다. AI가 진단하고 권고할 뿐 직접 바꾸지 않으므로, 설계 단계에서부터 안전합니다. "read-only"는 AWS 리소스에 한정된 정의이고, 외부 관측성 데이터소스의 읽기/쓰기는 ADR-007 거버넌스 하에 별도로 허용됩니다. +둘째, 읽기 전용 운영 태세입니다. AWS 리소스 변경과 자율 실행은 동결(FROZEN)되어 있습니다. AI가 진단하고 권고할 뿐 직접 바꾸지 않으므로, 설계 단계에서부터 안전합니다. "read-only"는 AWS 리소스에 한정된 정의이고, 외부 관측성 데이터소스의 읽기/쓰기는 거버넌스 하에 별도로 허용됩니다. 셋째, AI 종합진단 리포트입니다. Well-Architected에 매핑된 light·mid 9섹션, deep 16섹션 리포트를 비동기 워커가 생성하고 DOCX와 PDF로 내보냅니다. @@ -473,7 +473,7 @@ AWSops의 차별점은 세 가지로 압축됩니다. - **③ Well-Architected** → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF) - **④ 보안성** → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용 - **⑤ 장애 대응 AI** → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석 -- **핵심 차별점** → In-account Bedrock AI + 읽기 전용 태세 (ADR-005 FROZEN) + 4개 언어 UX +- **핵심 차별점** → In-account Bedrock AI + 읽기 전용 태세 + 4개 언어 UX :::notes {timing: 2min} diff --git a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html index 889e5abcc..943f2aa39 100644 --- a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html +++ b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html @@ -431,7 +431,7 @@

동작 흐름 (read-only)

분석 결과 예시 (권장만)

  • "payment Pod: CPU request 500m, 실사용 50m → 90% 과할당 (rightsizing 권장)"
  • "frontend Deployment: Memory limit 2Gi, 사용량 200Mi → 다운사이징 권장"
  • "Node 3대 중 2대 활용률 15% 미만 → 통합 검토"
  • "예상 월 절감 $1,200 — 권장사항"

Read-Only 원칙

-

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 ADR-005로 동결 — do-not-enable)

+

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 동결 — do-not-enable)

@@ -636,7 +636,7 @@

스케줄 진단 (diagnosis_schedule_enabled)

  • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
  • hourly schedule_dispatcher — 스캔 후 report job enqueue
  • v1 report-scheduler.ts 패턴 승계

알림 다이제스트 (병합·배포 완료)

-
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
+
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
@@ -711,7 +711,7 @@

인증 & 온보딩

Feature Tour: 멀티 계정 Security & Compliance

-

ADR-011 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

+

멀티 계정 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

Security Findings Pipeline

@@ -779,8 +779,8 @@

AWSops가 제공하는 것

핵심 차별점

  • in-account Bedrock (외부 AI SaaS API 없음)
  • private edge (공개 ALB 없음, CloudFront VPC Origin)
  • OOM-safe 비동기 워커 티어
-

Read-Only 자세 (ADR-005/007)

-
  • AWS-리소스 변경 + 자율 = 동결 (ADR-005, do-not-enable)
  • 외부 관측성 READ 허용
  • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용 +

    Read-Only 자세

    +
    • AWS-리소스 변경 + 자율 = 동결 (do-not-enable)
    • 외부 관측성 READ 허용
    • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용
      • SSRF · Secrets · DLP · human-gate · flag-OFF
    • 변경되는 것은 DATA, AWS 리소스가 아님

    시작하기

    1. make configure → Terraform apply
    2. make deploy
    3. Cognito 사용자 추가 · /login
    4. 어시스턴트에서 질문 시작
    @@ -810,15 +810,15 @@

    권장사항만 제시 · **자동 적용 없음** -> (mutating 설치 버튼은 **ADR-005**로 동결 — do-not-enable) +> (mutating 설치 버튼은 동결 — do-not-enable) ::: @@ -528,7 +528,7 @@ EKS 워크로드는 read-only 메트릭으로 request 대비 실사용량을 비 {timing: 1min} {cue: emphasis} -여기서 중요한 점은, AWSops는 권장사항만 제시한다는 것입니다. 어떤 변경도 자동으로 적용하지 않습니다. 과거 설계에 있던 OpenCost mutating 설치 버튼은 **ADR-005**(AWS 리소스 변경·자율 조치 = FROZEN)로 동결됐습니다. 진단과 권고까지가 AWSops의 역할이고, 적용 결정과 실행은 운영자의 몫입니다. +여기서 중요한 점은, AWSops는 권장사항만 제시한다는 것입니다. 어떤 변경도 자동으로 적용하지 않습니다. 과거 설계에 있던 OpenCost mutating 설치 버튼은 AWS 리소스 변경·자율 조치 동결(FROZEN) 원칙에 따라 동결됐습니다. 진단과 권고까지가 AWSops의 역할이고, 적용 결정과 실행은 운영자의 몫입니다. {cue: transition} 다음은 인벤토리와 유휴 리소스 점검입니다. @@ -785,7 +785,7 @@ AI 종합진단 리포트는 AWSops의 플래그십 기능입니다. 전부 read {cue: pause} -실행은 비동기 워커 티어에서 일어납니다. 웹은 thin-BFF라 무거운 작업을 직접 돌리지 않고 워커 큐에 넣는데, 진단 잡은 범용 `POST /api/jobs`가 아니라 소유권을 검사하는 전용 라우트 `/api/diagnosis`로 제출합니다(ADR-009, IDOR 방지 — 범용 라우트는 `noop` 계열만 허용). SQS, Step Functions, Lambda 또는 Fargate 워커가 받아서 섹션을 분석합니다. 진행 상황은 SSE로 실시간 표시됩니다. "3/16 Security Posture 분석 중" 같은 상태가 클라이언트에 흐릅니다. +실행은 비동기 워커 티어에서 일어납니다. 웹은 thin-BFF라 무거운 작업을 직접 돌리지 않고 워커 큐에 넣는데, 진단 잡은 범용 `POST /api/jobs`가 아니라 소유권을 검사하는 전용 라우트 `/api/diagnosis`로 제출합니다(IDOR 방지 — 범용 라우트는 `noop` 계열만 허용). SQS, Step Functions, Lambda 또는 Fargate 워커가 받아서 섹션을 분석합니다. 진행 상황은 SSE로 실시간 표시됩니다. "3/16 Security Posture 분석 중" 같은 상태가 클라이언트에 흐릅니다. {cue: transition} 완성된 리포트 화면을 보겠습니다. @@ -896,7 +896,7 @@ DOCX는 python-docx로, PDF는 chromium과 playwright로 렌더링합니다. 한 ### 알림 다이제스트 (병합·배포 완료) -- **`diagnosis_digest.py`** — `notified_at IS NULL` 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상) +- **`diagnosis_digest.py`** — `notified_at IS NULL` 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 main 병합·라이브 배포됨) - 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건) - **PII 스크러빙** — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브) @@ -1106,7 +1106,7 @@ EKS 화면도 read-only지만 이제 완전한 메뉴 패밀리입니다. fleet # Feature Tour: 멀티 계정 Security & Compliance -**ADR-011** — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계). +**멀티 계정** — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계). :::html
    @@ -1124,11 +1124,11 @@ EKS 화면도 read-only지만 이제 완전한 메뉴 패밀리입니다. fleet :::notes {timing: 2min} [요약] -• ADR-011 — 멀티 계정은 STS AssumeRole read-only fan-out, ExternalId는 1st-party 옵션·3rd-party 필수 +• 멀티 계정은 STS AssumeRole read-only fan-out, ExternalId는 1st-party 옵션·3rd-party 필수 • Security 페이지에 CVE Severity Distribution donut(ECR 스캔 집계)이 추가됨 • Compliance 벤치마크도 계정 단위로 스코핑되어 실행/이력 관리 -멀티 계정 지원은 ADR-011을 기준으로 합니다. 각 대상 계정에 STS AssumeRole로 read-only fan-out하고, ExternalId는 host ARN이 고정되는 1st-party 계정은 옵션, 신뢰 관계가 약한 3rd-party 계정은 필수입니다. +멀티 계정은 다음과 같이 지원합니다. 각 대상 계정에 STS AssumeRole로 read-only fan-out하고, ExternalId는 host ARN이 고정되는 1st-party 계정은 옵션, 신뢰 관계가 약한 3rd-party 계정은 필수입니다. {cue: pause} @@ -1233,9 +1233,9 @@ EKS 화면도 read-only지만 이제 완전한 메뉴 패밀리입니다. fleet ::: right -### Read-Only 자세 (ADR-005/007) +### Read-Only 자세 -- **AWS-리소스 변경 + 자율 = 동결** (ADR-005, do-not-enable) +- **AWS-리소스 변경 + 자율 = 동결** (do-not-enable) - 외부 관측성 **READ** 허용 - 외부 기록 / 티켓 / 메시지 **WRITE** 는 거버넌스 하 허용 - SSRF · Secrets · DLP · human-gate · flag-OFF @@ -1262,7 +1262,7 @@ AWSops를 정리하면, read-only AWS 운영 대시보드에 AI 진단을 결합 {cue: emphasis} -가장 중요한 원칙은 read-only 자세입니다. ADR-007(keystone) 기준으로 read-only는 AWS **리소스**에 한정되고, AWS 리소스 변경과 자율 실행은 ADR-005로 동결(새 명시적 결정 전까지, 영구 아님)입니다. 다만 외부 관측성 데이터를 읽고, 외부 기록이나 티켓, 메시지를 쓰는 것은 SSRF 방어, Secrets 관리, DLP, human-gate, flag-OFF 같은 거버넌스 아래에서 허용됩니다. 변경되는 것은 데이터일 뿐, AWS 리소스가 아닙니다. +가장 중요한 원칙은 read-only 자세입니다. read-only는 AWS **리소스**에 한정되고, AWS 리소스 변경과 자율 실행은 동결(새 명시적 결정 전까지, 영구 아님)입니다. 다만 외부 관측성 데이터를 읽고, 외부 기록이나 티켓, 메시지를 쓰는 것은 SSRF 방어, Secrets 관리, DLP, human-gate, flag-OFF 같은 거버넌스 아래에서 허용됩니다. 변경되는 것은 데이터일 뿐, AWS 리소스가 아닙니다. 시작은 간단합니다. configure하고 Terraform을 apply한 뒤 deploy하고, Cognito 사용자를 추가해 `/login`으로 들어오면 됩니다. diff --git a/docs-site/static/presentation/awsops-intro/assets/compliance-benchmark-flow.svg b/docs-site/static/presentation/awsops-intro/assets/compliance-benchmark-flow.svg index 482722ccf..aa0dc7f80 100644 --- a/docs-site/static/presentation/awsops-intro/assets/compliance-benchmark-flow.svg +++ b/docs-site/static/presentation/awsops-intro/assets/compliance-benchmark-flow.svg @@ -54,7 +54,7 @@ - READ-ONLY — no remediation (ADR-005/007) + READ-ONLY — no remediation diff --git a/docs-site/static/presentation/awsops-intro/assets/security-findings-pipeline.svg b/docs-site/static/presentation/awsops-intro/assets/security-findings-pipeline.svg index 315110a2e..238a5545c 100644 --- a/docs-site/static/presentation/awsops-intro/assets/security-findings-pipeline.svg +++ b/docs-site/static/presentation/awsops-intro/assets/security-findings-pipeline.svg @@ -78,7 +78,7 @@ STS AssumeRole read-only fan-out - per ADR-011 + per account diff --git a/docs-site/static/presentation/awsops-intro/awsops-intro.pptx b/docs-site/static/presentation/awsops-intro/awsops-intro.pptx index dc8199c7fce39a3db53ca5e3c62b00061d6ba227..d5ba7bf3ecde3a08060968c16c7dd26bedaff3d4 100644 GIT binary patch delta 5960 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 Date: Thu, 22 Oct 2026 23:49:16 +0000 Subject: [PATCH 4/9] fix: address review feedback (iteration 1/5) Keep the facts the ADR removal dropped: the diagnosis digest's approved scope is the scheduled summary while the implementation also batches manual runs, and lifting the AWS-mutation freeze needs a new decision document, a multi-AI panel review and a dated owner approval. Co-Authored-By: Claude Opus 5.5 --- docs-site/static/presentation/awsops-intro/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/index.html b/docs-site/static/presentation/awsops-intro/index.html index 5b3edc81c..b5a48e736 100644 --- a/docs-site/static/presentation/awsops-intro/index.html +++ b/docs-site/static/presentation/awsops-intro/index.html @@ -564,7 +564,7 @@

    Chat UX

    잡 종류 (2026-06-18 이후 증가)

    -
    • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
    • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨)
    • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
    +
    • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
    • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; 승인된 범위는 스케줄 진단 요약뿐이지만 현재 구현은 수동 실행분까지 함께 묶음 — 후속 정리 필요)
    • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

    @@ -1329,7 +1329,7 @@

    스케줄 진단 (diagnosis_schedule_enabled)

    • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
    • hourly schedule_dispatcher — 스캔 후 report job enqueue
    • v1 report-scheduler.ts 패턴 승계

    알림 다이제스트 (병합·배포 완료)

    -
    • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨)
    • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
    • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
    +
    • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; 승인된 범위는 스케줄 요약뿐이지만 현재 구현은 수동 실행분까지 묶음 — 후속 정리 대상)
    • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
    • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)

@@ -1530,7 +1530,7 @@

Date: Thu, 22 Oct 2026 23:49:19 +0000 Subject: [PATCH 5/9] fix: address review feedback (iteration 1/5) Keep the facts the ADR removal dropped: the diagnosis digest's approved scope is the scheduled summary while the implementation also batches manual runs, and lifting the AWS-mutation freeze needs a new decision document, a multi-AI panel review and a dated owner approval. Co-Authored-By: Claude Opus 5.5 --- .../static/presentation/awsops-intro/02-architecture.html | 4 ++-- docs-site/static/presentation/awsops-intro/02-architecture.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/02-architecture.html b/docs-site/static/presentation/awsops-intro/02-architecture.html index 76b3c3b75..80242e815 100644 --- a/docs-site/static/presentation/awsops-intro/02-architecture.html +++ b/docs-site/static/presentation/awsops-intro/02-architecture.html @@ -265,7 +265,7 @@

Chat UX

잡 종류 (2026-06-18 이후 증가)

-
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
+
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; 승인된 범위는 스케줄 진단 요약뿐이지만 현재 구현은 수동 실행분까지 함께 묶음 — 후속 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

@@ -435,7 +435,7 @@

Date: Thu, 22 Oct 2026 23:49:25 +0000 Subject: [PATCH 6/9] fix: address review feedback (iteration 1/5) Keep the facts the ADR removal dropped: the diagnosis digest's approved scope is the scheduled summary while the implementation also batches manual runs, and lifting the AWS-mutation freeze needs a new decision document, a multi-AI panel review and a dated owner approval. Co-Authored-By: Claude Opus 5.5 --- .../static/presentation/awsops-intro/03-demo-scenarios.html | 2 +- docs-site/static/presentation/awsops-intro/03-demo-scenarios.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html index 943f2aa39..cee5936c3 100644 --- a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html +++ b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.html @@ -636,7 +636,7 @@

스케줄 진단 (diagnosis_schedule_enabled)

  • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
  • hourly schedule_dispatcher — 스캔 후 report job enqueue
  • v1 report-scheduler.ts 패턴 승계

알림 다이제스트 (병합·배포 완료)

-
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
+
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; 승인된 범위는 스케줄 요약뿐이지만 현재 구현은 수동 실행분까지 묶음 — 후속 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)

diff --git a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.md b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.md index c0a153303..a8f7310c5 100644 --- a/docs-site/static/presentation/awsops-intro/03-demo-scenarios.md +++ b/docs-site/static/presentation/awsops-intro/03-demo-scenarios.md @@ -896,7 +896,7 @@ DOCX는 python-docx로, PDF는 chromium과 playwright로 렌더링합니다. 한 ### 알림 다이제스트 (병합·배포 완료) -- **`diagnosis_digest.py`** — `notified_at IS NULL` 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 main 병합·라이브 배포됨) +- **`diagnosis_digest.py`** — `notified_at IS NULL` 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 main 병합·라이브 배포됨; 승인된 범위는 스케줄 요약뿐이지만 현재 구현은 수동 실행분까지 묶음 — 후속 정리 대상) - 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건) - **PII 스크러빙** — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브) From 92c9e6a860baac11d4b2b1c10a3d794c67c33213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=A4=80=EC=84=9D=28Junseok=20Oh=29DevOps?= <52226147+Atom-oh@users.noreply.github.com> Date: Sat, 24 Oct 2026 06:59:17 +0000 Subject: [PATCH 7/9] docs-site: leave the architecture part and combined deck to their own PRs The architecture section (#196) and the regenerated combined index.html (#195, merged last) carry their own changes, so each review stays under the input limit with its sources and renderings together. Co-Authored-By: Claude Opus 5.5 --- .../awsops-intro/02-architecture.html | 50 +++++------ .../awsops-intro/02-architecture.md | 56 ++++++------- .../presentation/awsops-intro/index.html | 84 +++++++++---------- 3 files changed, 95 insertions(+), 95 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/02-architecture.html b/docs-site/static/presentation/awsops-intro/02-architecture.html index 80242e815..31ca70759 100644 --- a/docs-site/static/presentation/awsops-intro/02-architecture.html +++ b/docs-site/static/presentation/awsops-intro/02-architecture.html @@ -80,7 +80,7 @@

Foundation

LIVE 오늘: workers · steampipe · agentcore · integrations · ai_cost_tracking · diagnosis_schedule · diagnosis_notify · eks_auto_register · hybrid_routing

Feature Flags (~17개, 전부 default-off = $0)

-
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — FROZEN, do-not-enable
+
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — ADR-005 FROZEN, do-not-enable
@@ -95,7 +95,7 @@

Core Layers

파일역할
network.tfVPC 신규/재사용
edge.tfCloudFront + VPC Origin + ALB
auth.tfCognito + Lambda@Edge
data.tfAurora + schema
workload.tfECS web service
ecr.tfdual-tier ECR
ai.tfAgentCore + SSM
workers.tfSQS + SFN + Lambda

Gated Subsystems

-
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포
+
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포 (ADR-015)
@@ -107,7 +107,7 @@

Gated Subsystems

Next.js 14 Standalone (arm64)

-
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트
+
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트(ADR-009)

Routes

  • /api/health — 공개 헬스체크
  • /api/stream — SSE 스트리밍
  • /api/db — Aurora ping
  • /api/jobs (+/[id]) — 비동기 작업
@@ -123,7 +123,7 @@

Routes

Aurora (PostgreSQL 17.9)

-
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)
+
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • ADR-030 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)

Steampipe = 인벤토리 sync ONLY

warm Fargate → Aurora → /inventory/[type]
flag-gated (steampipe_enabled)
41종 리소스 타입 동기화
fan-out sync · registry-driven nav
NOT a live query engine — pg Pool / 라이브 조회 아님

@@ -175,13 +175,13 @@

Steampipe = 인벤토리 sync ONLY

ops external-obs
-
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
-

Hybrid Routing & Streaming Chat

+

Hybrid Routing & Streaming Chat — ADR-003

@@ -265,7 +265,7 @@

Chat UX

잡 종류 (2026-06-18 이후 증가)

-
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; 승인된 범위는 스케줄 진단 요약뿐이지만 현재 구현은 수동 실행분까지 함께 묶음 — 후속 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
+
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

@@ -305,7 +305,7 @@

Read-Only Query

-

Multi-Account — STS AssumeRole Fan-Out

+

Multi-Account — STS AssumeRole Fan-Out (ADR-011)

@@ -313,7 +313,7 @@

Registry + Assume

  • Aurora accounts 레지스트리 — 호스트 계정은 lazy seed
  • 대상 계정 AWSopsReadOnlyRole을 host task role이 STS AssumeRole
  • ExternalId — 1st-party(trust policy가 task-role ARN 핀) = 선택, 3rd-party/와일드카드 = 필수(confused-deputy 방어)
  • 글로벌 셀렉터: 단일 계정 스코프 / __all__ = 전 계정 fan-out

Safety

-
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
+
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음(ADR-005 동결과 정합)
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
@@ -326,7 +326,7 @@

Safety

Cognito + Lambda@Edge

  • us-east-1, py3.12, viewer-request
  • RS256 JWKS 서명 검증 (iss/aud/token_use)
  • OAuth state + PKCE public client
-

Login

+

Login (ADR-002)

  • Primary = 자체 /login 폼
  • BFF POST /api/auth/login → 무서명 공개 InitiateAuth(USER_PASSWORD_AUTH) → awsops_token (id_token 12h)
  • Hosted UI PKCE = dark fallback, signout = 쿠키 삭제

🔒 Private Edge
공개 ALB 없음 — 진입점은 CloudFront 하나
🔑 ECS Secrets
execution role 권한 (task role 아님)
👤 Admin
SSM + Cognito group (fail-closed)

@@ -371,16 +371,16 @@

Login

🔒
동결 (do-not-enable)
-
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External
+
거버넌스된 External (ADR-007)
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결. + 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결.
🧠 @@ -394,7 +394,7 @@

Login

Key Takeaways — Architecture

-
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • 하이브리드 라우팅 + 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock
+
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock
@@ -420,23 +420,23 @@

_*.sql`) ::: @@ -259,7 +259,7 @@ AWSops가 어떻게 만들어졌는지 레이어별로 자세히 보겠습니다 :::notes {timing: 3min} 영속 상태는 Aurora Serverless v2가 담당합니다. -PostgreSQL 17.9, 0.5에서 4 ACU로 오토스케일하고, KMS CMK로 암호화하며 master secret은 RDS가 관리합니다. 앱은 node-pg 공유 풀로 접근합니다. 스키마는 v9 baseline에 worker_jobs, chat 스레드, 진단 리포트 테이블이 더해진 형태이고, 새 테이블은 schema.sql에 덧붙이지 않고 ULID 마이그레이션 파일로 추가하는 규칙입니다. +PostgreSQL 17.9, 0.5에서 4 ACU로 오토스케일하고, KMS CMK로 암호화하며 master secret은 RDS가 관리합니다. 앱은 node-pg 공유 풀로 접근합니다. 스키마는 ADR-030 기반 v9 baseline에 worker_jobs, chat 스레드, 진단 리포트 테이블이 더해진 형태이고, 새 테이블은 schema.sql에 덧붙이지 않고 ULID 마이그레이션 파일로 추가하는 규칙입니다. {cue: pause} 여기서 꼭 짚어야 할 점이 있습니다. Steampipe는 라이브 쿼리 엔진이 아닙니다. flag로 켜는 인벤토리 sync일 뿐입니다. warm Fargate가 41종 리소스 타입을 Aurora로 동기화하고, 이걸 generic `/inventory/[type]` 페이지가 보여줍니다. 라이브 AWS 조회는 어디까지나 AgentCore MCP 도구가 합니다. 예전의 임베디드 pg Pool 방식이 아니라는 점을 강조합니다. {cue: transition} @@ -333,14 +333,14 @@ AI 엔진은 Bedrock AgentCore입니다. ops external-obs

-
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
::: :::notes {timing: 2min} 도구는 9개 섹션 게이트웨이로 묶입니다. -network, container, data, security, cost, monitoring, iac, ops, 그리고 external-obs입니다. 2026년 6월 24일에 external-obs에 Prometheus·ClickHouse 커넥터가 붙었고, 그때부터 9번째 라우팅 가능한 게이트웨이로 승격됐습니다. 예전 버전에서 "9번째 게이트웨이가 아니다"라고 했던 건 그 커넥터가 붙기 전 부트스트랩 상태를 말한 거였고, 지금은 정반대입니다. +network, container, data, security, cost, monitoring, iac, ops, 그리고 external-obs입니다. ADR-004가 2026년 6월 24일에 개정되면서 external-obs에 Prometheus·ClickHouse 커넥터가 붙었고, 그때부터 9번째 라우팅 가능한 게이트웨이로 승격됐습니다. 예전 버전에서 "9번째 게이트웨이가 아니다"라고 했던 건 그 커넥터가 붙기 전 부트스트랩 상태를 말한 거였고, 지금은 정반대입니다. {cue: pause} 전체 카탈로그는 30개 슬라이스, 약 160개 읽기 전용 도구이고, 함대 배포가 완료돼 30개 슬라이스 전부, 9개 게이트웨이 전부 READY 상태로 라이브입니다. {cue: transition} @@ -354,7 +354,7 @@ network, container, data, security, cost, monitoring, iac, ops, 그리고 extern @type: content @transition: slide -# Hybrid Routing & Streaming Chat +# Hybrid Routing & Streaming Chat — ADR-003 ::: left @@ -388,7 +388,7 @@ network, container, data, security, cost, monitoring, iac, ops, 그리고 extern :::notes {timing: 3min} -9개 게이트웨이 중 어디로 보낼지는 하이브리드 라우팅이 정합니다. +9개 게이트웨이 중 어디로 보낼지는 ADR-003 하이브리드 라우팅이 정합니다. 파이프라인은 3단계입니다. 먼저 regex fast-path가 명백한 질의를 즉시 라우팅합니다. 애매하면 Haiku 4.5 분류기가 판단합니다. 그리고 prompt caching으로 약 59% 캐시 히트를 내서 비용과 지연을 줄입니다. 결정된 섹션으로 라우팅한 뒤 SSE로 응답을 스트리밍하면서 어떤 도구를 호출하는지도 함께 보여줍니다. {cue: pause} 게이트 정확도는 69.2%에서 96.9%로 27.7 포인트 올랐고, 2026년 6월 10일에 라이브입니다. @@ -484,7 +484,7 @@ Well-Architected Review를 수동으로 며칠씩 만들어 보신 분 계시죠 :::notes {timing: 2min} 무거운 작업은 모두 비동기 워커 티어가 받습니다. -흐름은 이렇습니다. 웹이 진단은 `/api/diagnosis`, 컴플라이언스는 `/api/compliance/run`으로 제출하면(범용 `POST /api/jobs`는 `noop` 계열만 허용) worker_jobs 테이블에 queued 상태로 기록하고 SQS에 넣습니다. ESM이 킬스위치 역할을 하면서 dispatcher Lambda를 호출하는데, dispatcher는 job_id 기준으로 멱등하게 동작합니다. +흐름은 이렇습니다. 웹이 진단은 `/api/diagnosis`, 컴플라이언스는 `/api/compliance/run`으로 제출하면(범용 `POST /api/jobs`는 `noop` 계열만 허용, ADR-009) worker_jobs 테이블에 queued 상태로 기록하고 SQS에 넣습니다. ESM이 킬스위치 역할을 하면서 dispatcher Lambda를 호출하는데, dispatcher는 job_id 기준으로 멱등하게 동작합니다. {cue: pause} 그다음 Step Functions Standard가 `$.runtime` 값을 보고 분기합니다. 짧은 작업은 RunLambda로, 길거나 OOM 위험이 있는 작업은 ecs:runTask.sync로 Fargate 워커에 넘깁니다. 진단 리포트나 DOCX·PDF 생성 같은 무거운 작업이 여기로 갑니다. 워커는 스스로 running과 succeeded를 Aurora에 기록합니다. 실패해서 Catch로 빠지면 status_updater Lambda가 failed로 표시하는데, 이건 SFN이 VPC 안 Aurora에 직접 쓸 수 없기 때문입니다. 마지막으로 reaper가 5분마다 stale 작업을 정합화합니다. 그래서 OOM에 안전한 백본입니다. 참고로 Fargate 워커는 ENTRYPOINT가 아니라 CMD를 써야 SFN command override가 정상 동작합니다. @@ -506,7 +506,7 @@ Well-Architected Review를 수동으로 며칠씩 만들어 보신 분 계시죠 ### 잡 종류 (2026-06-18 이후 증가) - **schedule_dispatcher** — 시간별 EventBridge → `report_schedules` 스캔 → 진단 잡 enqueue (`diagnosis_schedule_enabled`, LIVE) -- **diagnosis_digest** (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 배포됨; 승인된 범위는 스케줄 진단 요약뿐이지만 현재 구현은 수동 실행분까지 함께 묶음 — 후속 정리 필요) +- **diagnosis_digest** (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (`workers_enabled && diagnosis_notify_enabled` 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요) - **compliance** (Powerpipe) — CIS 벤치마크 Fargate 잡 (`steampipe_enabled`) ::: @@ -618,7 +618,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 @type: content @transition: slide -# Multi-Account — STS AssumeRole Fan-Out +# Multi-Account — STS AssumeRole Fan-Out (ADR-011) ::: left @@ -636,7 +636,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 ### Safety - **host self-assume 가드** — target == host면 `get_role_arn()`이 `None` 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지) -- **read-only 한정** — 대상 계정 변경 작업 없음 +- **read-only 한정** — 대상 계정 변경 작업 없음(ADR-005 동결과 정합) - `/accounts` admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음) ::: @@ -648,7 +648,7 @@ EKS 페이지에는 접근 권한 배지와 CLI 가이드, 클러스터별 워 • ExternalId는 1st-party(task-role ARN 핀)면 선택, 3rd-party면 필수 • host self-assume 가드로 "cross-account 차단" 오진을 방지 -AWSops는 단일 호스트 계정에서 돌지만, 여러 AWS 계정을 통합 대시보드로 보여줄 수 있습니다. STS AssumeRole 기반 read-only 페더레이션으로 조회합니다. Aurora에 accounts 레지스트리를 두고, 호스트 계정은 처음 접근할 때 lazy seed로 등록됩니다. 대상 계정에는 AWSopsReadOnlyRole을 미리 배포해 두고, host task role이 그 role을 assume합니다. +AWSops는 단일 호스트 계정에서 돌지만, 여러 AWS 계정을 통합 대시보드로 보여줄 수 있습니다. ADR-011이 이걸 STS AssumeRole 기반 read-only 페더레이션으로 정의합니다. Aurora에 accounts 레지스트리를 두고, 호스트 계정은 처음 접근할 때 lazy seed로 등록됩니다. 대상 계정에는 AWSopsReadOnlyRole을 미리 배포해 두고, host task role이 그 role을 assume합니다. {cue: pause} ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AWSops task-role ARN을 정확히 핀해 두면 1st-party로 보고 ExternalId를 생략할 수 있습니다. 반대로 3rd-party거나 와일드카드 principal이면 ExternalId가 필수입니다 — confused-deputy 공격을 막기 위해서입니다. 이 구분은 코드가 강제하는 게 아니라 trust policy로 운영적으로 강제됩니다. 전역 계정 셀렉터로 한 계정만 볼 수도 있고, __all__을 선택하면 전 계정을 fan-out으로 조회해서 비용이나 Bedrock 사용량 같은 걸 집계합니다. @@ -675,7 +675,7 @@ ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AW - **RS256 JWKS** 서명 검증 (iss/aud/token_use) - OAuth `state` + **PKCE public client** -### Login +### Login (ADR-002) - **Primary** = 자체 `/login` 폼 - BFF `POST /api/auth/login` → 무서명 공개 `InitiateAuth(USER_PASSWORD_AUTH)` → `awsops_token` (id_token 12h) @@ -696,7 +696,7 @@ ExternalId는 상황에 따라 다릅니다. 대상 계정의 trust policy가 AW 인증은 Cognito와 Lambda@Edge가 함께 처리합니다. Lambda@Edge는 us-east-1에서 viewer-request로 동작하며 RS256 JWKS로 토큰 서명을 검증합니다. iss, aud, token_use를 모두 확인하고, OAuth state와 PKCE public client를 씁니다. 시크릿이 없는 공개 클라이언트입니다. {cue: pause} -로그인의 기본 경로는 자체 `/login` 폼입니다. BFF의 `POST /api/auth/login`이 무서명 공개 InitiateAuth를 USER_PASSWORD_AUTH 방식으로 호출해 awsops_token을 발급합니다. id_token은 12시간 유효합니다. 미인증 요청은 엣지가 `/login`으로 보냅니다. Hosted UI PKCE 플로우는 다크 폴백으로 남겨두고, signout은 쿠키만 삭제합니다. +로그인의 기본 경로는 ADR-002에 따라 자체 `/login` 폼입니다. BFF의 `POST /api/auth/login`이 무서명 공개 InitiateAuth를 USER_PASSWORD_AUTH 방식으로 호출해 awsops_token을 발급합니다. id_token은 12시간 유효합니다. 미인증 요청은 엣지가 `/login`으로 보냅니다. Hosted UI PKCE 플로우는 다크 폴백으로 남겨두고, signout은 쿠키만 삭제합니다. 오른쪽 세 가지가 보안 기둥입니다. 공개 ALB가 없는 비공개 엣지, ECS 시크릿은 task role이 아니라 execution role 권한이어야 한다는 점, 그리고 admin 모델은 SSM과 Cognito group 기반으로 fail-closed입니다. {cue: transition} 이걸 실제로 배포하는 흐름을 보겠습니다. @@ -760,16 +760,16 @@ AgentCore와 워커는 각각의 flag로 apply한 뒤 `make agentcore`, `make wo
🔒
동결 (do-not-enable)
-
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External
+
거버넌스된 External (ADR-007)
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결. + 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결.
🧠 @@ -781,10 +781,10 @@ AgentCore와 워커는 각각의 flag로 apply한 뒤 `make agentcore`, `make wo :::notes {timing: 3min} 이 아키텍처의 태세를 정확히 정의하겠습니다. -AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니다. AWS 리소스 변경과 자율 실행은 동결입니다. 영구 금지는 아니지만, 해제하려면 새 결정 문서와 멀티 AI 패널 검토, 날짜가 기록된 소유자 승인이 모두 필요합니다. do-not-enable, 그냥 조용히 다시 켜지 않는다는 뜻입니다. +AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니다. ADR-005(옛 029/036/031 Phase4를 통합, 2026년 6월 11일 reversal 합의)에 따라 AWS 리소스 변경과 자율 실행은 동결입니다. 다만 여기서 정확히 말씀드릴 게 있는데, 이건 "영구 금지"가 아닙니다. BASELINE 문서가 그 표현을 명시적으로 거부합니다. 정확히는 "안전조건 충족 + 새로운 명시적 결정 전까지" 동결이고, 완화하려면 새 ADR과 멀티-AI 패널, 날짜가 박힌 owner override가 필요합니다. do-not-enable, 그냥 조용히 다시 켜지 않는다는 뜻입니다. {cue: pause} -딱 하나 예외가 있습니다. 호스트 자기 web 서비스를 Aurora secret 회전 이벤트에 맞춰 force-new-deployment로 재시작하는 것, 그거 하나만 허용됩니다. IAM은 서비스 1개 ARN으로 스코프되고, secret id가 안 맞으면 fail-closed로 아예 안 돕니다. 기본값은 off입니다. 나머지는 전부 그대로 동결입니다. -다만 외부 데이터에 대해서는 다릅니다. 외부 관측성 데이터 읽기, 그리고 외부 기록·티켓·메시지 write는 거버넌스 하에 허용됩니다. SSRF 방어, Secrets 관리, DLP와 redaction, human-gate를 모두 거칩니다. 즉 AWS 리소스는 안 건드리지만, 외부 시스템에 리포트를 보내거나 티켓을 끊는 건 통제된 형태로 가능합니다. +딱 하나 예외가 있습니다. ADR-015인데, 2026년 7월 1일에 오준석님이 owner-override로 승인했습니다. 호스트 자기 web 서비스를 Aurora secret 회전 이벤트에 맞춰 force-new-deployment로 재시작하는 것, 그거 하나만 허용됩니다. IAM은 서비스 1개 ARN으로 스코프되고, secret id가 안 맞으면 fail-closed로 아예 안 돕니다. 기본값은 off입니다. 나머지 ADR-005는 전부 그대로 동결입니다. +다만 외부 데이터에 대해서는 다릅니다. ADR-007이 이걸 다루는데, 외부 관측성 데이터 읽기, 그리고 외부 기록·티켓·메시지 write는 거버넌스 하에 허용됩니다. SSRF 방어, Secrets 관리, DLP와 redaction, human-gate를 모두 거칩니다. 즉 AWS 리소스는 안 건드리지만, 외부 시스템에 리포트를 보내거나 티켓을 끊는 건 통제된 형태로 가능합니다. 그리고 핵심 차별점, AI 추론은 고객 계정 안 Bedrock에서 돌립니다. 외부 AI SaaS API가 없으므로 운영 데이터가 계정 밖으로 나가지 않습니다. {cue: transition} 전체를 한 장으로 정리하겠습니다. @@ -802,16 +802,16 @@ AWSops는 읽기 전용 AWS 운영 대시보드에 AI 진단을 더한 것입니 - **Terraform MSA on private edge** — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음 - **Aurora 영속 상태** — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐) - **AgentCore 섹션 에이전트** — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기 -- **하이브리드 라우팅 + 멀티 계정** — regex + Haiku 분류기 + caching, STS AssumeRole fan-out +- **ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정** — regex + Haiku 분류기 + caching, STS AssumeRole fan-out - **OOM-safe 비동기 워커 티어** — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리 -- **읽기 전용 동결 태세** — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock +- **읽기 전용 동결 태세** — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock :::notes {timing: 2min} 아키텍처 파트를 한 장으로 정리합니다. 첫째, 비공개 엣지 위의 Terraform MSA입니다. CloudFront VPC Origin에서 내부 ALB를 거쳐 Fargate로 가고, 공개 ALB는 없습니다. 둘째, 영속 상태는 Aurora PostgreSQL 17.9입니다. Steampipe는 라이브 엔진이 아니라 flag로 켜는 인벤토리 sync일 뿐입니다. {cue: pause} -셋째, 라이브 AWS 읽기는 AgentCore 섹션 에이전트가, 9개 게이트웨이에 약 160개 읽기 전용 도구로 처리합니다. 30개 슬라이스 전부 LIVE입니다. 넷째, 라우팅은 하이브리드고 멀티 계정 STS AssumeRole로 여러 계정을 fan-out 조회합니다. 다섯째, 무거운 작업은 OOM에 안전한 비동기 워커 티어가 받는데, 진단 리포트뿐 아니라 스케줄, 알림 다이제스트, 컴플라이언스 잡까지 늘었습니다. 여섯째, 그 위에 읽기 전용 동결 태세가 있는데 영구 금지는 아니고 좁은 예외 1건이 있습니다. 그리고 in-account Bedrock입니다. +셋째, 라이브 AWS 읽기는 AgentCore 섹션 에이전트가, 9개 게이트웨이에 약 160개 읽기 전용 도구로 처리합니다. 30개 슬라이스 전부 LIVE입니다. 넷째, 라우팅은 ADR-003 하이브리드고 ADR-011 멀티 계정 STS AssumeRole로 여러 계정을 fan-out 조회합니다. 다섯째, 무거운 작업은 OOM에 안전한 비동기 워커 티어가 받는데, 진단 리포트뿐 아니라 스케줄, 알림 다이제스트, 컴플라이언스 잡까지 늘었습니다. 여섯째, 그 위에 읽기 전용 동결 태세가 있는데 영구 금지는 아니고 ADR-015라는 좁은 예외 1건이 있습니다. 그리고 in-account Bedrock입니다. {cue: transition} 세 번째 파트, 실제 데모와 진단 리포트로 이어가겠습니다. ::: diff --git a/docs-site/static/presentation/awsops-intro/index.html b/docs-site/static/presentation/awsops-intro/index.html index b5a48e736..c9518e3c8 100644 --- a/docs-site/static/presentation/awsops-intro/index.html +++ b/docs-site/static/presentation/awsops-intro/index.html @@ -188,7 +188,7 @@

보고서 작성 부담

Bedrock AgentCore
-
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
하이브리드 라우팅
+
Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
AgentCore Runtime + 섹션 에이전트
ADR-003 하이브리드 라우팅
@@ -255,7 +255,7 @@

보고서 작성 부담

AWSops — By the Numbers

-
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI Routing하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
+
항목내용설명
InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
AI RoutingADR-003 하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
@@ -296,7 +296,7 @@

For FinOps / Management

🔒
Read-Only Posture
-
AWS 리소스 변경·자율 실행 동결
설계상 안전
+
AWS 리소스 변경·자율 실행 동결
ADR-005 (FROZEN) / ADR-007 — 설계상 안전
📊
@@ -311,7 +311,7 @@

For FinOps / Management

Key Takeaways — 5가지 목표, 하나의 대시보드

-
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 + 4개 언어 UX
+
  • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
  • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
  • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
  • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
  • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
  • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 (ADR-005 FROZEN) + 4개 언어 UX
@@ -379,7 +379,7 @@

Foundation

LIVE 오늘: workers · steampipe · agentcore · integrations · ai_cost_tracking · diagnosis_schedule · diagnosis_notify · eks_auto_register · hybrid_routing

Feature Flags (~17개, 전부 default-off = $0)

-
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — FROZEN, do-not-enable
+
  • agentcore_enabled · workers_enabled · steampipe_enabled
  • hybrid_routing_enabled · diagnosis_schedule_enabled · diagnosis_notify_enabled
  • incident_lifecycle_enabled · k8sgpt_enabled · rca_writeback_enabled
  • eks_auto_register_enabled · ai_cost_tracking_enabled · multi_route_synthesis_enabled
  • remediation_enabled — ADR-005 FROZEN, do-not-enable
@@ -394,7 +394,7 @@

Core Layers

파일역할
network.tfVPC 신규/재사용
edge.tfCloudFront + VPC Origin + ALB
auth.tfCognito + Lambda@Edge
data.tfAurora + schema
workload.tfECS web service
ecr.tfdual-tier ECR
ai.tfAgentCore + SSM
workers.tfSQS + SFN + Lambda

Gated Subsystems

-
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포
+
파일역할
eks.tfAccess Entry + AdminView
steampipe.tf인벤토리 sync (steampipe_enabled)
notify.tf진단 알림 SNS (diagnosis_notify_enabled)
incidents.tf인시던트 webhook (incident_lifecycle_enabled)
k8sgpt.tfK8sGPT 예산/리소스 (k8sgpt_enabled)
writeback.tfRCA write-back (rca_writeback_enabled)
remediation.tf리메디에이션 substrate (FROZEN)
secret-rotation.tf자기치유 재배포 (ADR-015)
@@ -406,7 +406,7 @@

Gated Subsystems

Next.js 14 Standalone (arm64)

-
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트
+
  • 루트 경로 서빙 — basePath 없음, fetch는 /api/*
  • Thin-BFF 원칙 — 무겁고·길고·OOM 위험 작업은 직접 실행 금지
  • 무거운 작업은 워커 큐로 enqueue — 범용 POST /api/jobs는 noop 계열만, report/compliance 등 도메인 job은 소유권 검사하는 전용 라우트(ADR-009)

Routes

  • /api/health — 공개 헬스체크
  • /api/stream — SSE 스트리밍
  • /api/db — Aurora ping
  • /api/jobs (+/[id]) — 비동기 작업
@@ -422,7 +422,7 @@

Routes

Aurora (PostgreSQL 17.9)

-
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)
+
  • 0.5–4 ACU, KMS CMK, RDS-관리 master secret
  • 앱 접근 = node-pg (web/lib/db.ts)
  • ADR-030 스키마 (v9 baseline) + worker_jobs · chat threads · diagnosis
  • 새 테이블 = ULID 마이그레이션 (migrations/_*.sql)

Steampipe = 인벤토리 sync ONLY

warm Fargate → Aurora → /inventory/[type]
flag-gated (steampipe_enabled)
41종 리소스 타입 동기화
fan-out sync · registry-driven nav
NOT a live query engine — pg Pool / 라이브 조회 아님

@@ -474,13 +474,13 @@

Steampipe = 인벤토리 sync ONLY

ops external-obs
-
external-obs = 9번째 게이트웨이(2026-06-24 승격) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 설계 원칙에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
+
external-obs = 9번째 게이트웨이(2026-06-24 승격, ADR-004) — Prometheus·ClickHouse 커넥터 호스팅, 챗 키 observability로 별칭. 30슬라이스 전부 LIVE(9개 게이트웨이 전부 READY MCP 타깃). 16개 챗 키는 전부 등록되어 있지만, 그중 aws-data + 콜렉터 6종(7개)은 steampipeAvailable()이 ADR-001/010에 따라 항상 false를 반환해 하드 비활성 — 선택하면 fail-open으로 ops에 위임됨
-

Hybrid Routing & Streaming Chat

+

Hybrid Routing & Streaming Chat — ADR-003

@@ -564,7 +564,7 @@

Chat UX

잡 종류 (2026-06-18 이후 증가)

-
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; 승인된 범위는 스케줄 진단 요약뿐이지만 현재 구현은 수동 실행분까지 함께 묶음 — 후속 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)
+
  • schedule_dispatcher — 시간별 EventBridge → report_schedules 스캔 → 진단 잡 enqueue (diagnosis_schedule_enabled, LIVE)
  • diagnosis_digest (workers.tf) — 리포트별 이메일 대신 배치 SNS 다이제스트 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 배포됨; ADR-13이 명시적으로 승인한 건 스케줄 진단 요약뿐이라 수동 실행분까지 배치하는 현재 구현은 ADR 범위를 넘어섬 — 후속 ADR 정리 필요)
  • compliance (Powerpipe) — CIS 벤치마크 Fargate 잡 (steampipe_enabled)

@@ -604,7 +604,7 @@

Read-Only Query

-

Multi-Account — STS AssumeRole Fan-Out

+

Multi-Account — STS AssumeRole Fan-Out (ADR-011)

@@ -612,7 +612,7 @@

Registry + Assume

  • Aurora accounts 레지스트리 — 호스트 계정은 lazy seed
  • 대상 계정 AWSopsReadOnlyRole을 host task role이 STS AssumeRole
  • ExternalId — 1st-party(trust policy가 task-role ARN 핀) = 선택, 3rd-party/와일드카드 = 필수(confused-deputy 방어)
  • 글로벌 셀렉터: 단일 계정 스코프 / __all__ = 전 계정 fan-out

Safety

-
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
+
  • host self-assume 가드 — target == host면 get_role_arn()이 None 반환 → host 실행 role 직접 사용(v1 전용 role을 host에서 self-assume → AccessDenied 오진 방지)
  • read-only 한정 — 대상 계정 변경 작업 없음(ADR-005 동결과 정합)
  • /accounts admin UI + CFN으로 대상 계정에 read-only role 배포(코드 변경 없음)
@@ -625,7 +625,7 @@

Safety

Cognito + Lambda@Edge

  • us-east-1, py3.12, viewer-request
  • RS256 JWKS 서명 검증 (iss/aud/token_use)
  • OAuth state + PKCE public client
-

Login

+

Login (ADR-002)

  • Primary = 자체 /login 폼
  • BFF POST /api/auth/login → 무서명 공개 InitiateAuth(USER_PASSWORD_AUTH) → awsops_token (id_token 12h)
  • Hosted UI PKCE = dark fallback, signout = 쿠키 삭제

🔒 Private Edge
공개 ALB 없음 — 진입점은 CloudFront 하나
🔑 ECS Secrets
execution role 권한 (task role 아님)
👤 Admin
SSM + Cognito group (fail-closed)

@@ -670,16 +670,16 @@

Login

🔒
동결 (do-not-enable)
-
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
+
ADR-005 (029/036/031P4 통합, 2026-06-11 reversal)
AWS-리소스 변경 + 자율 — 새 명시적 결정 전까지 동결(영구 아님)
📥
-
거버넌스된 External
+
거버넌스된 External (ADR-007)
외부 DATA read + 기록/티켓/메시지 write 허용
SSRF · Secrets · DLP · human-gate 하
- 예외 1건: 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지는 전부 그대로 동결. + 예외 1건 — ADR-015 (2026-07-01 owner-override): 호스트 자기 web 서비스의 ecs:UpdateService force-new-deployment(재시작)만, Aurora secret 회전 이벤트 트리거 한정, IAM 1 ARN, secret-id fail-closed, default-off. 나머지 ADR-005 전부는 그대로 동결.
🧠 @@ -693,7 +693,7 @@

Login

Key Takeaways — Architecture

-
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • 하이브리드 라우팅 + 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결 + 예외 1건, in-account Bedrock
+
  • Terraform MSA on private edge — CloudFront VPC Origin → 내부 ALB → Fargate, 공개 ALB 없음
  • Aurora 영속 상태 — PostgreSQL 17.9 (Steampipe = flag-gated 인벤토리 sync일 뿐)
  • AgentCore 섹션 에이전트 — 9 게이트웨이 · ~160 read-only 도구(30슬라이스 전부 LIVE)로 라이브 AWS 읽기
  • ADR-003 하이브리드 라우팅 + ADR-011 멀티 계정 — regex + Haiku 분류기 + caching, STS AssumeRole fan-out
  • OOM-safe 비동기 워커 티어 — SQS + SFN + Lambda/Fargate, 진단·스케줄·알림·컴플라이언스 처리
  • 읽기 전용 동결 태세 — AWS 변경·자율 동결(ADR-005, 새 결정 전까지) + ADR-015 예외 1건, in-account Bedrock
@@ -1124,7 +1124,7 @@

동작 흐름 (read-only)

분석 결과 예시 (권장만)

  • "payment Pod: CPU request 500m, 실사용 50m → 90% 과할당 (rightsizing 권장)"
  • "frontend Deployment: Memory limit 2Gi, 사용량 200Mi → 다운사이징 권장"
  • "Node 3대 중 2대 활용률 15% 미만 → 통합 검토"
  • "예상 월 절감 $1,200 — 권장사항"

Read-Only 원칙

-

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 동결 — do-not-enable)

+

권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 ADR-005로 동결 — do-not-enable)

@@ -1329,7 +1329,7 @@

스케줄 진단 (diagnosis_schedule_enabled)

  • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
  • hourly schedule_dispatcher — 스캔 후 report job enqueue
  • v1 report-scheduler.ts 패턴 승계

알림 다이제스트 (병합·배포 완료)

-
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; 승인된 범위는 스케줄 요약뿐이지만 현재 구현은 수동 실행분까지 묶음 — 후속 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
+
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
@@ -1404,7 +1404,7 @@

인증 & 온보딩

Feature Tour: 멀티 계정 Security & Compliance

-

멀티 계정 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

+

ADR-011 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

Security Findings Pipeline

@@ -1472,8 +1472,8 @@

AWSops가 제공하는 것

핵심 차별점

  • in-account Bedrock (외부 AI SaaS API 없음)
  • private edge (공개 ALB 없음, CloudFront VPC Origin)
  • OOM-safe 비동기 워커 티어
-

Read-Only 자세

-
  • AWS-리소스 변경 + 자율 = 동결 (do-not-enable)
  • 외부 관측성 READ 허용
  • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용 +

    Read-Only 자세 (ADR-005/007)

    +
    • AWS-리소스 변경 + 자율 = 동결 (ADR-005, do-not-enable)
    • 외부 관측성 READ 허용
    • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용
      • SSRF · Secrets · DLP · human-gate · flag-OFF
    • 변경되는 것은 DATA, AWS 리소스가 아님

    시작하기

    1. make configure → Terraform apply
    2. make deploy
    3. Cognito 사용자 추가 · /login
    4. 어시스턴트에서 질문 시작
    @@ -1506,43 +1506,43 @@

    Date: Sat, 24 Oct 2026 07:04:34 +0000 Subject: [PATCH 8/9] chore: request review after retargeting to dev Co-Authored-By: Claude Opus 5.5 From 8c7726775ef35bceea1640c3fee39ed458d92dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=A4=80=EC=84=9D=28Junseok=20Oh=29DevOps?= <52226147+Atom-oh@users.noreply.github.com> Date: Sat, 24 Oct 2026 07:16:40 +0000 Subject: [PATCH 9/9] docs-site: carry the why/demo slide edits into the combined deck index.html renders the same blocks, so the why-awsops and demo-scenario slide and speaker-note lines change with their sources in this PR. Co-Authored-By: Claude Opus 5.5 --- .../presentation/awsops-intro/index.html | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs-site/static/presentation/awsops-intro/index.html b/docs-site/static/presentation/awsops-intro/index.html index c9518e3c8..bf9fd3309 100644 --- a/docs-site/static/presentation/awsops-intro/index.html +++ b/docs-site/static/presentation/awsops-intro/index.html @@ -188,7 +188,7 @@

    보고서 작성 부담

    Bedrock AgentCore
    -
    Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
    AgentCore Runtime + 섹션 에이전트
    ADR-003 하이브리드 라우팅
    +
    Claude Opus 4.8 / Sonnet 5 / Haiku 4.5
    AgentCore Runtime + 섹션 에이전트
    하이브리드 라우팅
    @@ -255,7 +255,7 @@

    보고서 작성 부담

    AWSops — By the Numbers

    -
    항목내용설명
    InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
    ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
    DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
    AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
    AI RoutingADR-003 하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
    Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
    UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
    +
    항목내용설명
    InfraTerraform MSA비공개 엣지 — CloudFront VPC Origin → 내부 ALB → Fargate
    ComputeECS Fargateweb thin-BFF + OOM-safe 비동기 워커 티어 (arm64)
    DataAurora Serverless v2PostgreSQL 17 영속 상태 + 41종 인벤토리 sync
    AI Tools9 게이트웨이 설계 (160+ 도구) · 30개 슬라이스 전부 LIVEAgentCore 섹션 에이전트 (모두 read-only; 9개 게이트웨이 전부 READY MCP 타깃)
    AI Routing하이브리드regex fast-path + Haiku 분류기, 게이트 96.9%
    Diagnosislight·mid 9 / deep 16 섹션Well-Architected 매핑, DOCX/PDF 내보내기
    UX3-테마 + 모바일 + 4개 언어반응형 대시보드 + Cmd-K + 한/영/中/日 i18n
    @@ -296,7 +296,7 @@

    For FinOps / Management

    🔒
    Read-Only Posture
    -
    AWS 리소스 변경·자율 실행 동결
    ADR-005 (FROZEN) / ADR-007 — 설계상 안전
    +
    AWS 리소스 변경·자율 실행 동결
    설계상 안전
    📊
    @@ -311,7 +311,7 @@

    For FinOps / Management

    Key Takeaways — 5가지 목표, 하나의 대시보드

    -
    • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
    • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
    • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
    • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
    • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
    • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 (ADR-005 FROZEN) + 4개 언어 UX
    +
    • ① 가시성 → Overview·Topology·Monitoring + NFM·Direct Connect까지 통합된 Network 6종 메뉴
    • ② FinOps → 읽기 전용 비용 분석 + Rightsizing 인사이트 + OpenCost 패널
    • ③ Well-Architected → 종합진단 리포트 자동 생성 (light·mid/deep, DOCX/PDF)
    • ④ 보안성 → Security Findings + CIS Compliance 벤치마크, 둘 다 읽기 전용
    • ⑤ 장애 대응 AI → AI Assistant/Diagnosis가 메트릭·로그·트레이스·NFM 경로를 자연어로 교차 분석
    • 핵심 차별점 → In-account Bedrock AI + 읽기 전용 태세 + 4개 언어 UX
    @@ -1124,7 +1124,7 @@

    동작 흐름 (read-only)

    분석 결과 예시 (권장만)

    • "payment Pod: CPU request 500m, 실사용 50m → 90% 과할당 (rightsizing 권장)"
    • "frontend Deployment: Memory limit 2Gi, 사용량 200Mi → 다운사이징 권장"
    • "Node 3대 중 2대 활용률 15% 미만 → 통합 검토"
    • "예상 월 절감 $1,200 — 권장사항"

    Read-Only 원칙

    -

    권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 ADR-005로 동결 — do-not-enable)

    +

    권장사항만 제시 · 자동 적용 없음 (mutating 설치 버튼은 동결 — do-not-enable)

@@ -1329,7 +1329,7 @@

스케줄 진단 (diagnosis_schedule_enabled)

  • report_schedules 테이블 — 주간 / 격주 / 월간 (next_run_at 기준)
  • hourly schedule_dispatcher — 스캔 후 report job enqueue
  • v1 report-scheduler.ts 패턴 승계

알림 다이제스트 (병합·배포 완료)

-
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; ADR-13이 승인한 건 스케줄 요약뿐이라 수동 실행분까지 묶는 현재 범위는 ADR 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
+
  • diagnosis_digest.py — notified_at IS NULL 리포트를 ~15분 배치로 묶어 SNS 1건 발송 (workers_enabled && diagnosis_notify_enabled 게이트로 이미 main 병합·라이브 배포됨; 승인된 범위는 스케줄 요약뿐이지만 현재 구현은 수동 실행분까지 묶음 — 후속 정리 대상)
  • 완료 즉시 개별 발송(per-report) 방식 폐기 — 폭주 방지(하루 44건 → 1건)
  • PII 스크러빙 — Bedrock 호출 전 ARN·계정ID·이메일·IP·액세스키를 결정론적으로 마스킹 (현재 라이브)
@@ -1404,7 +1404,7 @@

인증 & 온보딩

Feature Tour: 멀티 계정 Security & Compliance

-

ADR-011 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

+

멀티 계정 — STS AssumeRole read-only fan-out (ExternalId: 1st-party 옵션 · 3rd-party 필수) · 계정별 보안/컴플라이언스 스코핑 · CVE Severity Distribution donut(ECR 스캔 집계).

Security Findings Pipeline

@@ -1472,8 +1472,8 @@

AWSops가 제공하는 것

핵심 차별점

  • in-account Bedrock (외부 AI SaaS API 없음)
  • private edge (공개 ALB 없음, CloudFront VPC Origin)
  • OOM-safe 비동기 워커 티어
-

Read-Only 자세 (ADR-005/007)

-
  • AWS-리소스 변경 + 자율 = 동결 (ADR-005, do-not-enable)
  • 외부 관측성 READ 허용
  • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용 +

    Read-Only 자세

    +
    • AWS-리소스 변경 + 자율 = 동결 (do-not-enable)
    • 외부 관측성 READ 허용
    • 외부 기록 / 티켓 / 메시지 WRITE 는 거버넌스 하 허용
      • SSRF · Secrets · DLP · human-gate · flag-OFF
    • 변경되는 것은 DATA, AWS 리소스가 아님

    시작하기

    1. make configure → Terraform apply
    2. make deploy
    3. Cognito 사용자 추가 · /login
    4. 어시스턴트에서 질문 시작
    @@ -1506,12 +1506,12 @@