管理画面ログイン実装での大失敗。サーバー用秘密鍵をうっかり公開した話と対応
この記事では、管理画面のログイン機能を作った際、絶対に見せてはいけない「サーバー用の秘密鍵」を誤って表に出してしまった失敗談をお話しします。この一件から、ブラウザ側の設定には絶対に秘密鍵を含めないという重要な教訓を得ました。
ログイン機能での思わぬミス
ASMRを音で数値化するこのサイトでは、裏側でデータを管理するための画面を作っています。先日、その管理画面にログインする機能を開発していた時のことです。
ブラウザを動かすための設定に、誤って「サーバー用の秘密鍵」を入れてしまうというミスをしてしまいました。秘密鍵とは、例えるなら「すべての扉を開けられるマスターキー」のような非常に重要なものです。ブラウザ向けの設定にこれを入れてしまうと、公開されたファイルの中にその鍵が載ってしまい、誰でも見られる状態になってしまいます。これは、システムを運用する上で本来あってはならないことです。
エラーが教えてくれた危機
この危険な状態に気づけたのは、使っていた「Supabase」というデータ管理などの機能を提供する仕組みのおかげでした。
Supabaseのプログラムが、「ブラウザで秘密鍵を使うのは禁止されています」というエラーを出してくれたのです。このエラー画面を見た瞬間は血の気が引きましたが、同時にシステムが未然に警告してくれたことに深く感謝しました。
もしこの警告がなければ、もっと長い間、重要な鍵が誰でも見られる状態になっていたかもしれません。
慌てずに行った対処
エラーに気づいたあと、すぐに対応を行いました。
まず、設定を公開用の正しいキー(権限の低い安全な鍵)に差し替え、プログラムをサーバーに置き直す「再デプロイ」を行いました。これにより、マスターキーが表に出る状態をすぐに停止させました。
さらに、一度でも外に漏れてしまった鍵は悪用を防ぐために無効化し、新しい秘密鍵を発行して切り替える「ローテーション」という作業を行いました。これでようやく安全な状態に戻すことができました。
失敗を隠さない理由
この失敗から、ブラウザに出る公開用の設定には、絶対に秘密鍵を入れてはいけないという基本を痛感しました。ユーザーが触れるフロント画面側は権限の低いキーを使い、データの内容を守るための細かいルールはデータベース側でしっかり設定して守る。これが鉄則です。
今回、あえてこのような失敗を正直に書いたのは、同じようにサイトやアプリを作っている人が、同じ落とし穴にはまるのを少しでも減らせればと思ったからです。今後も安全なサイト運営を心がけつつ、メディア一覧などで紹介できるASMRデータを少しずつ充実させていきます。
この日の学び
- ブラウザに露出する設定(公開用)には絶対に秘密鍵を入れないこと。
- フロント画面は権限の低いキーを使い、データの保護はデータベースのルールで守る。
- 誤って漏れた鍵は、無効化してすぐに新しいものに切り替える(ローテーションする)ことが必須である。