
하나의 명령으로 전체 클라우드 계정의 잘못된 구성, 부족한 관찰 가능성, 그리고 보안 태세를 평가합니다.
하나의 명령으로 전체 클라우드 계정을 평가합니다 — 잘못된 구성, 누락된 관측 가능성, 보안 태세를 점수화하고, 가장 먼저 수정해야 할 5가지를 순위로 보여줍니다.
AWS, Cloudflare, Vercel, Supabase, Render, Fly.io 또는 Railway를 지정하면 점수, 무엇이 잘못되었는지, 각각에 대한 수정 사항을 반환합니다 — 에이전트에 바로 전달할 수 있을 정도로 자체 포함되어 있습니다.
npx cloud-doctor
https://github.com/user-attachments/assets/60b610ab-7aee-4c3a-8d9e-83f045c8cc56
위 명령은 제공자를 선택하고, 사용자 신원(AWS 프로필, API 토큰 등)을 확인한 후 대화형으로 스캔을 실행합니다. 특정 제공자로 바로 이동하려면:
npx cloud-doctor aws --profile prod
npx cloud-doctor cloudflare --yes
npx cloud-doctor vercel --yes
~/.npmrc에 min-release-age가 설정되어(공급망 보안 강화) 최신 릴리스를 차단하는 경우:
# =<숫자>, 예시로 0 선택
npm x --min-release-age=0 cloud-doctor -- aws profiles
최신 기능을 원하시나요? 알파 빌드는 자체 태그로 게시됩니다: npx cloud-doctor@alpha.
인증 토큰은 환경 변수로 설정하거나 TUI가 요청할 때 직접 입력할 수 있습니다:
CLOUDFLARE_API_TOKEN=cfut_aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ== npx cloud-doctor cloudflare
(토큰을 base64 디코딩하지 마세요)
또는
$ npx cloud-doctor cloudflare
Cloudflare 자격 증명이 설정되지 않았습니다 — 아래에 입력하세요.
이번 실행 동안만 유지되며, 디스크에 기록되지 않습니다. 이 프롬프트를 건너뛰려면: export CLOUDFLARE_API_TOKEN
dashboard → My Profile → API Tokens
? Cloudflare 읽기 전용 API 토큰 › <input>
곧 제공 예정: Google Cloud, Kubernetes, 데이터베이스(Postgres, MySQL, Redis) — 다음 계획 참조.
npx cloud-doctor # 제공자 선택 (기본 AWS) → 신원 선택 → 스캔
npx cloud-doctor aws # AWS 빠른 경로
npx cloud-doctor aws --profile prod # 모호함이 없을 때 비대화형
npx cloud-doctor aws --yes --json # CI, 기계 판독 가능 출력
npx cloud-doctor aws --yes --json --fail-under 75 # 점수 기반 CI 게이트
npx cloud-doctor cloudflare --yes # CLOUDFLARE_API_TOKEN 필요
npx cloud-doctor vercel --yes # VERCEL_TOKEN 필요 (+ VERCEL_TEAM_ID)
npx cloud-doctor supabase --yes # SUPABASE_ACCESS_TOKEN 필요
npx cloud-doctor render --yes # RENDER_API_KEY 필요
npx cloud-doctor fly --yes # FLY_API_TOKEN 필요 (+ FLY_ORG)
npx cloud-doctor railway --yes # RAILWAY_API_TOKEN 필요
npx cloud-doctor aws profiles # ~/.aws/config 프로필 목록
npx cloud-doctor aws whoami # 확인된 AWS 신원 표시
--yes는 프롬프트를 건너뜁니다(CI-safe). --json은 터미널 보기 대신 안정적이고 스키마 버전이 지정된 보고서를 출력합니다. --verbose는 상위 위반 사항 대신 모든 발견 사항을 출력합니다. --no-color는 색상 출력을 비활성화합니다.
점수는 절대 조작되지 않습니다: 실행된 규칙이 하나도 없으면 점수는 null이고 "검사가 실행되지 않음" 레이블이 표시되며, 절대 빈 100점이 아닙니다.
doctor.config.ts (또는 doctor.config.json, 또는 package.json의 cloudDoctor)를 통해 제공자별 규칙을 조정하세요:
import { defineConfig } from "cloud-doctor/api";
export default defineConfig({
defaultProvider: "aws",
aws: {
profile: "prod",
regions: ["us-east-1", "eu-west-1"],
account: "123456789012",
},
rules: {
"aws/s3-unencrypted-bucket": "off",
"aws/iam-user-access-key": "error",
},
});
"off"는 규칙을 비활성화합니다. "error" / "warning"는 심각도를 재정의합니다. 비활성화된 규칙은 점수 산정에서 제외되며 음소거로 공개됩니다 — 절대 조용히 제거되지 않습니다.
플러그인 레지스트리 위의 얇은 CLI입니다 — 모든 제공자는 동일한 계약을 구현하므로 CLI가 특정 제공자를 특별 대우하지 않습니다.
각 제공자는 CloudDoctorPlugin을 구현합니다:
discoverIdentities() — 선택기를 위한 프로필/프로젝트/계정 목록resolveIdentity() — 플래그/환경 변수/설정을 신원으로 매핑, 네트워크 호출 없음validateIdentity() — 자격 증명이 작동함을 증명 (sts:GetCallerIdentity 또는 이에 상응)scan() — 게이트된 규칙 실행, 진단 + 점수 반환새로운 제공자는 packages/plugins/src/index.ts에 등록합니다.
gcloud, k8s, db가 곧 제공됩니다.
pnpm install
pnpm build
pnpm typecheck
pnpm test
실제 클라우드 계정을 사용하지 않고 규칙을 직접 검증하려면, 저장소에 http-mock 및 Moto/fab fixture harness가 포함되어 있습니다: (ps: fab는 실행할 환경을 생성하는 CLI이며, 현재 비공개 상태입니다. 의존성 프로젝트도 오픈소스로 전환될 예정입니다)
pnpm mock:up <scenario> # 지속적인 mock 인스턴스 부팅
eval "$(pnpm -s mock:env <scenario>)" # 환경 변수를 mock 인스턴스로 지정
pnpm mock:run <scenario> # mock 인스턴스에 대해 CLI 실행
react-doctor에 특별히 감사드립니다.
| 제공자 | 명령어 | 인증 |
|---|
| AWS | cloud-doctor aws | AWS SDK 인증 체인 — --profile, AWS_PROFILE, 환경 변수, SSO, 웹 자격 증명 |
| Cloudflare | cloud-doctor cloudflare | CLOUDFLARE_API_TOKEN |
| Vercel | cloud-doctor vercel | VERCEL_TOKEN (+ 선택 사항 VERCEL_TEAM_ID) |
| Supabase | cloud-doctor supabase | SUPABASE_ACCESS_TOKEN |
| Render | cloud-doctor render | RENDER_API_KEY |
| Fly.io | cloud-doctor fly | FLY_API_TOKEN (+ 선택 사항 FLY_ORG) |
| Railway | cloud-doctor railway | RAILWAY_API_TOKEN (작업공간/계정 토큰) |
| 패키지 | 역할 |
|---|
packages/cloud-doctor | CLI (commander, prompts, ora) + 프로그래밍 방식의 diagnose() API |
packages/core | 플러그인 레지스트리, 점수 산정, 설정 로딩, 공유 타입 |
packages/plugin-* | 제공자별 패키지 — 신원 탐색 + 규칙 |
packages/plugins | 모든 제공자를 연결하는 기본 레지스트리 |