🚀
AWS FargateでPlaywrightを動かす
はじめに
Playwright/Puppeteer を AWS Fargate 上で動かしていると、
「--no-sandbox を外したらブラウザが即クラッシュして 500 を返す…」というエラーにぶつかりました。
この記事では 再現ログ → 原因の深掘り → リスク評価 → 現実的な対策 の順に解説し、
「--no-sandbox でも運用上は安全」思ったのでその内容を記事にしました。
この記事で得られること
- Fargate でブラウザサンドボックスが動かない技術的背景
- "タスク内だけ丸腰"状態で残るリスクの具体像
- IAM/IMDS/SG 設計で 外堀を固める実践テンプレート
- ビジネス層を 3 分で納得させる説明スクリプト
1. まず結論:覚えておく 4 行まとめ
| ポイント | 詳細 |
|---|---|
| ① Fargate タスクは microVM | Firecracker がホストと他タスクから完全隔離 詳しくはこちら |
| ② Chromium の set-uid サンドボックスが封じられる | unshare 等の特権 syscall が禁止 |
| ③ --no-sandbox は必須 | 付けないと起動前に SIGABRT |
| ④ リスクはタスク内に集中 | IAM・IMDS・通信経路で"外堀"を固めれば OK |
2. 実際のラッシュログ
[pid=82][err] Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
[pid=82][err] FATAL: content/browser/zygote_host/zygote_host_impl_linux.cc:211] Check failed
<process did exit: exitCode=null, signal=SIGABRT>
ポイントは Failed to move to new namespace。
Chromium が user namespace + seccomp をセットアップできず、中断 (SIGABRT) している典型パターンです
(詳しい原因解析は Travis CI の Chrome ドキュメント が秀逸)。
3. 仕組みを分解して腑に落とす
3-1. Fargate のセキュリティ層
| レイヤ | 何が起きているか | Playwright への影響 |
|---|---|---|
| microVM (Firecracker) | 1 タスク = 1 VM。ホストカーネルを共有しない | ホスト侵害リスクは激減 |
| seccomp プロファイル | unshare, mount, ptrace など数十 syscall をデフォルト deny | set-uid サンドボックス初期化に失敗 |
| 不可変カーネルポリシー | cap_add: SYS_ADMIN 等の昇格は一切不可 | サンドボックス無効化しか道がない |
だから --no-sandbox が「仕様」になる
Firecracker の隔離 = "より強い外壁" が既にあるので、ブラウザ側のロックを外しても安全と思われます。
3-2. 残るリスクはどこに?
では、これだとどのようなリスクがあるか OpenAI O3 に聞いてみました:
- タスク内の 環境変数・Secrets Manager トークン・/tmp ファイル にアクセス可能
- IMDSv2 経由で 一時クレデンシャル を盗まれる可能性
- 任意 URL 巡回系サービスでは ゼロデイ攻撃の踏み台 になり得る
4. 実運用で取るべき"外堀"対策
| カテゴリ | 推奨設定例 |
|---|---|
| IAM | タスクロールは最小権限。S3 なら PutObject のみ等 |
| IMDS | IMDSv2 + hop-limit=1 でコンテナ外から取得不能に |
| ネットワーク | SG/NACL でアウトバウンドを 80/443 + 必要 CIDR のみに |
| シークレット | 環境変数埋め込み禁止。必要なら起動時に暗号化取得しメモリだけに保持 |
どうしてもサンドボックス必須?
-
EC2 + ECS で
capAdd: SYS_ADMIN&seccomp=unconfined - VM/VNC でレンダリングレイヤを完全分離
- Browser-as-a-Service(AWS Lambda@Edge, Browserless など)を採用
6. まとめ
- Fargate では技術的に --no-sandbox を外せない
- Firecracker microVM がホストとの隔離を保証するため ホスト侵害リスクは低い
- タスク内部の情報漏えいだけにリスクが収束 → IAM & IMDS 制限が最重要
- 真にサンドボックスが必要なら Fargate 以外の基盤 を選ぶ
Discussion