
一つのコマンドであなたのクラウドアカウント全体を評価——設定ミス、可観測性の欠如、セキュリティ態勢まで。
1つのコマンドでクラウドアカウント全体を評価 — 設定ミス、監視の欠如、セキュリティ態勢を、最初に修正すべき5つの項目にランク付けします。
AWS、Cloudflare、Vercel、Supabase、Render、Fly.io、Railwayを指定すると、スコア、問題点、各問題の修正方法が返されます — エージェントにそのまま渡せるほど完結しています。
npx cloud-doctor
https://github.com/user-attachments/assets/60b610ab-7aee-4c3a-8d9e-83f045c8cc56
これによりプロバイダが選択され、あなたのID(AWSプロファイル、APIトークンなど)が解決され、対話的にスキャンが実行されます。プロバイダを直接指定するには:
npx cloud-doctor aws --profile prod
npx cloud-doctor cloudflare --yes
npx cloud-doctor vercel --yes
もし ~/.npmrc に min-release-age が設定されていて(サプライチェーンの強化)、新しいリリースをブロックしている場合:
# =<number>, 0 chosen as example
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 # pick provider (default AWS) → pick identity → scan
npx cloud-doctor aws # AWS fast path
npx cloud-doctor aws --profile prod # non-interactive when unambiguous
npx cloud-doctor aws --yes --json # CI, machine-readable output
npx cloud-doctor aws --yes --json --fail-under 75 # CI gate on the score
npx cloud-doctor cloudflare --yes # needs CLOUDFLARE_API_TOKEN
npx cloud-doctor vercel --yes # needs VERCEL_TOKEN (+ VERCEL_TEAM_ID)
npx cloud-doctor supabase --yes # needs SUPABASE_ACCESS_TOKEN
npx cloud-doctor render --yes # needs RENDER_API_KEY
npx cloud-doctor fly --yes # needs FLY_API_TOKEN (+ FLY_ORG)
npx cloud-doctor railway --yes # needs RAILWAY_API_TOKEN
npx cloud-doctor aws profiles # list ~/.aws/config profiles
npx cloud-doctor aws whoami # show resolved AWS identity
--yes はプロンプトをスキップします(CIセーフ)。--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() — フラグ/環境/設定 → identity にマッピング、ネットワーク呼び出しなしvalidateIdentity() — 認証情報が機能することを証明(sts:GetCallerIdentity または同等のもの)scan() — ゲートされたルールを実行し、診断結果とスコアを返す新しいプロバイダは packages/plugins/src/index.ts に登録します。
gcloud、k8s、db が近日公開予定です。
pnpm install
pnpm build
pnpm typecheck
pnpm test
実際のクラウドアカウントにアクセスせずにルールを実際に検証するために、リポジトリには http-mock と Moto/fab フィクスチャハーネス が含まれています: (ps: fab CLI を実行して対象環境を生成します。現在はプライベートですが、依存プロジェクトもオープンソース化される予定です)
pnpm mock:up <scenario> # boot a persistent mock instance
eval "$(pnpm -s mock:env <scenario>)" # point env vars at it
pnpm mock:run <scenario> # run the CLI against it
謝辞:react-doctor
| プロバイダ | コマンド | 認証 |
|---|
| AWS | cloud-doctor aws | AWS SDK credential chain — --profile, AWS_PROFILE, env vars, SSO, web identity |
| Cloudflare | cloud-doctor cloudflare | CLOUDFLARE_API_TOKEN |
| Vercel | cloud-doctor vercel | VERCEL_TOKEN (+ optional 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 (+ optional FLY_ORG) |
| Railway | cloud-doctor railway | RAILWAY_API_TOKEN (workspace/account token) |
| パッケージ | 役割 |
|---|
packages/cloud-doctor | CLI(commander、prompts、ora) + プログラムによる diagnose() API |
packages/core | プラグインレジストリ、スコアリング、設定読み込み、共有型 |
packages/plugin-* | プロバイダごとに1パッケージ — アイデンティティ検出 + ルール |
packages/plugins | すべてのプロバイダを結びつけるデフォルトレジストリ |