前提:環境変数はすべて漏洩したと考える
Zeabur は 8/28、一部プロジェクトの環境変数に不正アクセスがあったと告知しました。対象には「API キー、データベース接続文字列、クラウドサービスのキー」など一般的な認証情報が含まれていました(CodeCat による告知内容の引用)。Zeabur は 9/7 にセキュリティのアップグレードを実施しましたが、10/14 にさらに影響の大きいインシデントが発生し、その後サービス終了を発表しています。
あなたのデータが影響を受けたかどうかは分からないので、いちばん安全なのは Zeabur の環境変数に置いていたキーをすべて差し替えることです。
順番:お金に直結するものを先に、残りは移行時に
今日中に差し替える:漏洩すると直接金銭的な損害につながるキー。
| 種類 | 例 | 差し替え後に確認すること |
|---|---|---|
| 決済 | Stripe などのシークレットキー | 最近の取引と返金の履歴 |
| AI API | OpenAI、Anthropic、Gemini の API キー | 請求に不審な利用がないか。ついでに利用上限を設定する |
| クラウドアカウント | AWS のアクセスキー、GCP サービスアカウントの JSON、Cloudflare の API トークン | 見覚えのないリソースが作られていないか |
| メール送信サービス | SendGrid、Resend、Mailgun | 送信ログ(詐欺メールの送信に悪用されるおそれ) |
移行時に差し替える:新しいプラットフォームで新しいキーを設定し、新しいサービスが正常に動くことを確認してから古いキーを無効化します。差し替えは 1 回で済み、サービスも止まりません。
- データベースのパスワード(新しい DB はもともと新しいパスワードですが、次の節の落とし穴に注意)
- LINE のチャネルシークレットとチャネルアクセストークン、Discord・Telegram の Bot トークン
- Google・Facebook ログインの OAuth クライアントシークレット
- JWT/セッションの署名鍵:変更すると全ユーザーが一度ログアウトされますが、正常な動作です
- n8n に保存している各サービスの credentials(n8n 編を参照)
検証で見つかった落とし穴:バックアップを復元すると古いパスワードも戻る
Zeabur の PostgreSQL バックアップは、pg_dumpall で作成された data.sql です。同じ形式で検証したところ、ファイルの冒頭に次の 2 行がありました。
CREATE ROLE root;
ALTER ROLE root WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:...';
psql で新しいデータベースに復元すると、root のパスワードが Zeabur 上の古いパスワードに戻ります。そのパスワードがインシデントで漏洩していれば、新しいデータベースも安全ではありません。
対処法(どちらか一方):
- 復元前に、
data.sqlからCREATE ROLEとALTER ROLEの 2 行を削除する - 復元後すぐにパスワードを変更する:
ALTER ROLE root WITH PASSWORD '新しい長いパスワード';
より良いのは、pg_dump でデータベース本体だけをバックアップする方法です。ロールやパスワードは含まれません。詳しくはデータベース編を参照してください。
移行後の後片付け
- GitHub の Zeabur App を削除する:GitHub → Settings → Applications → Installed GitHub Apps → Zeabur → Uninstall。すべて移行し終えてから削除してください。先に削除すると Zeabur 上のサービスを再デプロイできなくなります
- 専用サーバーの SSH キー:Zeabur の専用サーバーに SSH 公開鍵を登録していた場合、新しいマシンでは新しい鍵ペアを使う
- Zeabur 上のデータを削除する:バックアップが手元にあることを確認したら、サービス、ボリューム、プロジェクトを削除する。返金申請の際にアカウントデータの削除もあわせて依頼し、書面で記録を残す
- 証拠を残す:不審な請求があった明細のスクリーンショットを保存しておく。Zeabur にインシデントの補償を申請するときに必要になります(移行ガイドの返金の節を参照)