Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

AWS runtime 境界

このページは、AWS 章で前提にする公開仕様上の runtime 境界を定義します。 ここでいう runtime は、ブラウザから投票、集計、検証を実行するための target 構成です。 扱わない範囲は末尾の このページで扱わないもの にまとめます。

Semantic runtime profiles

server は RUNTIME_PROFILE、browser build は VITE_RUNTIME_PROFILE で実行意図を 一度だけ選びます。server resolver は adapter construction より前に profile を解決し、 store、proof evidence、finalization、artifact backend、rate limit、Turnstile posture の混在を拒否します。

ProfileStoreProof evidenceFinalizationArtifact主な用途
local-demomemorymocksynclocalVite browser mock API と高速 UI 開発
static-mock-e2efilemocksynclocalproduction-build static Hono / Playwright E2E
local-proof-developmentmemorydevelopmentsynclocalRust host 接続を使う fake receipt smoke
local-proof-productionmemoryproductionsynclocallocal production STARK proof
target-aws-asyncDynamoproductionasyncS3Lambda/SQS/Step Functions/ECS target runtime
target-aws-async-quiescedDynamoproductionasyncS3develop recovery 時の public admission 封鎖

target profile は production proof、DynamoDB、S3、async orchestration、Dynamo rate limit、bypass 不可を一体として選びます。quiesced profile は develop recovery 専用で browser public projection には公開しません。secret 値と外部 resource identifier は profile 名に埋め込まず、target runtime の参照入力として別に検証します。

公開仕様として扱う境界

Frontend

ブラウザアプリケーションは Vite / React Router で生成された静的 frontend です。 ビルド成果物は CloudFront から配信され、origin は private S3 bucket です。 S3 frontend origin は直接公開せず、CloudFront が静的 asset と browser route fallback の入口になります。

ブラウザからの API 呼び出しは、通常 same-origin の /api/* として CloudFront に送られます。 CloudFront は静的 asset を S3 origin へ、/api/* を API Gateway origin へ routing します。 これにより、frontend と API の公開入口は同じ origin 上に投影されます。

Develop target では、静的 frontend と API の両方を含む CloudFront behavior を operator / tester 向けの signed-cookie gate で保護します。 署名用の秘密鍵は KMS 内で管理し、対応する公開鍵だけを CloudFront trusted key group に登録します。 この gate は環境全体への入口を制限するもので、session-scoped な capability token の代わりにはなりません。

API

API Gateway は /api/* を受け取り、Lambda 上の Hono runtime adapter に渡します。 実際の wire-level API surface は packages/api-contract/src/routes/inventory.ts が正準です。 apps/api/src/server/api/routes/definitions.ts はその contract を runtime mode 別に投影し、Hono は contract で定義された route と handler を AWS runtime に接続します。

Target runtime では、CloudFront が API origin への転送時に origin-verification header を付与し、Hono はその値が欠落または不一致のリクエストを拒否します。 したがって、API Gateway の直接 URL は通常の browser / CLI contract ではなく、認可された CloudFront origin path が外側の admission boundary です。

その内側で、session-scoped な現行 route は path の sessionIdX-Session-Capability を照合します(対象 route と header の契約は API リファレンス > セッション capability)。

Data store

DynamoDB は session、vote、finalization state、verification run state、rate-limit state、prover semaphore state などの runtime state を保持します。 ブラウザが DynamoDB に直接アクセスする経路はありません。 API Lambda と worker Lambda が、それぞれの IAM role に基づく最小権限で DynamoDB を読み書きします。

Async prover

長時間かかる STARK 証明生成は、非同期 runtime に分離されます。 非同期モードの POST /api/sessions/:sessionId/finalizations は work item を SQS に登録します。 Step Functions は署名確認や concurrency semaphore などの gate を通過した場合だけ ECS Fargate task を起動し、zkVM host が証明と公開監査用 artifact を生成します。 生成結果は finalization-writer Lambda が finalization record に反映し、ブラウザは GET /api/sessions/:sessionId/finalizations/current を capability 付きでポーリングします。 パイプラインの詳細は 非同期プローバー を参照してください。

Verification worker

Target runtime の POST /api/sessions/:sessionId/finalizations/:finalizationId/verification は、 path と session capability、current succeeded finalization、finalization-scoped な bundle locator、 expected Image ID を確認したうえで verification work を durable queue に登録します。 verification-worker Lambda は private S3 bucket から bundle.zip を取得して verifier-service で STARK レシートを検証します。検証結果は sessionIdfinalizationId で scope された verification result record に、S3 の bundle/report locator は分離された AWS delivery metadata に保存されます。 ブラウザは通常の API flow から検証状態を取得し、worker や S3 に直接アクセスしません(検証内容は 検証サービス を参照)。

Proof artifacts

Proof artifact storage は private S3 bucket です。 保護対象 artifact を public bundle.zip に含めない分類と除外リストは、公開境界 に従います。 bundle.zip と report(verification.json)の通常配信は capability 保護 API 経由で、raw S3 URL や presigned URL は通常の browser / CLI contract ではありません(取得経路とアクセスポリシーは 公開境界 > bundle と report の取得経路)。

このページで扱わないもの

この runtime boundary は公開仕様としての責務分担に限定します。 次の情報は扱いません。

  • AWS account ID、具体的な ARN、bucket 名、secret 名
  • secret / config handoff の手順や証跡
  • post-merge Plan 02 / Plan 03 の完了条件や blocking status
  • production DNS cutover の進捗
  • CodePipeline / CodeBuild の詳細な承認証跡
  • legacy AWS account deletion の状態

関連する章