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/7] 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/7] 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 36de90e34a9ce0db4fd6a853f3c605f5e23138a5 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 23:49:16 +0000 Subject: [PATCH 3/7] 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 4/7] 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: Sat, 24 Oct 2026 06:59:26 +0000 Subject: [PATCH 5/7] docs-site: leave the combined deck to its own PR index.html is regenerated from the part sources in #195 after this section and the other parts merge, so this review covers the architecture source and its rendering together. 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 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:28 +0000 Subject: [PATCH 6/7] chore: request review after retargeting to dev Co-Authored-By: Claude Opus 5.5 From b9890532e3319810a0f043a88a17fe4c68833f76 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:44 +0000 Subject: [PATCH 7/7] docs-site: limit this part to architecture slides 1-9 and their combined-deck lines Slides 10-19 move to a sibling PR so each review stays under the input limit; the combined index.html lines for slides 1-9 change here with their source block and per-part rendering. Co-Authored-By: Claude Opus 5.5 --- .../awsops-intro/02-architecture.html | 26 +++++++-------- .../awsops-intro/02-architecture.md | 32 +++++++++---------- .../presentation/awsops-intro/index.html | 24 +++++++------- 3 files changed, 41 insertions(+), 41 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..7e85e04ed 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 게이트로 이미 배포됨; 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
    @@ -428,15 +428,15 @@

    🔒
    동결 (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 c9518e3c8..3dd4a4c0d 100644 --- a/docs-site/static/presentation/awsops-intro/index.html +++ b/docs-site/static/presentation/awsops-intro/index.html @@ -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

@@ -1515,13 +1515,13 @@