メールAPIキーのセキュリティ:権限の絞り込み、ローテーション、正しい保管場所

メールAPIキーが漏えいすると、誰でも自社の名前でメールを送れてしまいます。Inbixioのキーの権限設定、安全な保管、停止なしのローテーション、漏えい時の対応を解説します。

メールAPIキーは短い文字列ですが、大きな力を持っています。キーを手にした人は誰でも、あなたのドメインから、誰に対しても、あなたの名前でメールを送れます。漏えいしたキーは、正規の企業のインフラからフィッシングメールが送られてしまう最も一般的な原因のひとつです。

幸い、いくつかの習慣を身につけるだけで漏えいは起こりにくくなり、万一起きても被害を抑えられます。このガイドでは、Inbixioがすべてのキーに用意している設定を使って、その方法を解説します。

Inbixioのキーでできること

API Keys → Create Api Key(APIキー → APIキーを作成)で作成するキーには、3つの設定があります。

  • Name(名前):自分で管理するための名前。例:prod-auth-service。
  • Server Access(サーバーアクセス):All Server(すべてのサーバー。最初に接続したSMTPサーバー経由で送信)またはSelected Server(選択したサーバー。指定した1台だけを使用)。
  • Permissions(権限):Send(送信)、Read(読み取り)、Manage(管理)。現在APIのエンドポイントはメール送信の1つだけなので、サービスに必要な権限はSendです。

キーはibx_の後に16進数32文字が続く形式です。このプレフィックスによって見分けやすく、シークレットスキャナーでも検出しやすくなっています。

ルール1:サービスと環境ごとにキーを1つずつ

1つのキーを会社全体で共有してはいけません。サービスごと、環境ごとに別々のキーを作成しましょう。

キー名 Server Access 権限
prod-auth Selected: security@yourco.com Send
prod-billing Selected: billing@yourco.com Send
staging-all Selected: テスト用メールボックス Send

キーを分けることには、次のメリットがあります。

  • 漏えいの影響を限定できる:prod-billingを失効させても、サインインのメールは止まりません。
  • 各サービスが正しいアドレスから送信できる:billing@のサーバーに固定したキーは、最初に接続したサーバーではなくbilling@から送信します。固定先のサーバーを削除すると、キーは最初のサーバーにフォールバックするので、サーバーを削除したらキーを固定し直しましょう。
  • ローテーションが簡単になる:他のサービスに影響を与えずに、1つのサービスのキーだけを更新できます。

ルール2:必要最小限の権限だけを付与する

メールを送信するバックエンドに必要なのはSendだけです。ReadとManageはチェックを外したままにしておきましょう。キーにできることが少ないほど、漏えいしたときの被害も小さくなります。

ルール3:キーはサーバーに置き、クライアントには置かない

ブラウザやモバイルアプリに配布したものは、圧縮(minify)されていても抜き取られる可能性があります。たとえば次のようなものです。

  • JavaScriptバンドル(React、Vue、Next.jsのクライアントコンポーネント)
  • NEXT_PUBLIC_、VITE_、REACT_APP_などブラウザ向けのプレフィックスが付いた環境変数
  • iOSやAndroidのアプリバイナリ

フロントエンドでのユーザー操作をきっかけにメールを送る場合は、自社のバックエンドのエンドポイントを呼び出しましょう。バックエンドがそのユーザーに操作が許可されているかを確認し、レート制限をかけたうえで、環境変数に保管しているキーを使ってInbixioを呼び出します。

// ✅ Browser → your API → Inbixio
await fetch('/api/invite', { method: 'POST', body: JSON.stringify({ email }) });

// ❌ Never do this in frontend code
fetch('https://backend.inbixio.com/api/send-email/', {
  headers: { 'X-API-Key': 'ibx_…' }, // visible to every visitor
});

ルール4:キーはパスワードと同じように保管する

  • キーはシークレットマネージャー(AWS Secrets Manager、Google Secret Manager、Doppler、1Password、Vault)か、プラットフォームの暗号化された環境変数に保管します。
  • キーは絶対にコミットしないでください。.gitignoreに.envを追加し、リポジトリのシークレットスキャンを有効にしましょう。GitHubのプッシュ保護を使えば、多くの漏えいを未然に防げます。
  • キーをログに残さないでください。送信リクエストをログに記録する場合は、先にX-API-Keyヘッダーを取り除きます。
  • キーをチケット、チャット、スクリーンショットに貼り付けないでください。共有するのはシークレットへのアクセス権であり、値そのものではありません。

ルール5:定期的に、そして疑わしいときはすぐにローテーションする

Inbixioではキーを更新できます。API Keysページでキーの横にある更新アイコンをクリックします。更新すると、名前、サーバーアクセス、権限はそのままで新しい値が発行され、古い値はただちに使えなくなります。本番環境のキーを送信失敗なしでローテーションするには、次の手順に従います。

  1. 同じ設定で2つ目のキーを作成します(例:prod-auth-2)。
  2. 新しいキーをサービスにデプロイし、自社のアプリケーションログなどで、そのリクエストが200を返すことを確認します。
  3. 古いキーを削除します。

漏えい直後など、スムーズな切り替えよりスピードが重要な場合は更新アイコンを使いましょう。通常のキーは数か月ごとに、またアクセス権を持つメンバーがチームを離れるたびにローテーションします。

キーが漏えいした場合

インシデントとして扱いましょう。ただし、対処可能なインシデントです。

  1. すぐにキーを更新(更新アイコン)または削除します。これで古い値は一切使えなくなります。
  2. ダッシュボードのログを確認し、不審な時間帯の呼び出しや送信量の急増など、異常なアクティビティがないか調べます。ログには呼び出しの日時は記録されますが、どのキーによる呼び出しかは記録されないため、自社サービスのログと照らし合わせてください。
  3. メールプロバイダーを確認し、自分が送っていないメッセージによるバウンスや迷惑メールの報告がないか調べます。
  4. コミット、ログの1行、フロントエンドのバンドルなど、漏えいの経路を特定し、その経路をふさぎます。
  5. あなたの名前でメッセージが送られていた場合は、影響を受けたユーザーに知らせ、それらを無視するよう伝えます。

簡単なチェックリスト

  • サービスと環境ごとにキーを1つずつ用意し、わかりやすい名前を付けている
  • 各サービスが使うべきサーバー(送信元アドレス)にキーを固定している
  • 送信用のサービスにはSend権限だけを付与している
  • フロントエンドのコード、モバイルアプリ、リポジトリにキーがない
  • キーをシークレットマネージャーに保管し、ログから取り除いている
  • ローテーションの日程をカレンダーに入れ、漏えい時の対応計画がある

セキュリティは、迷惑メールフォルダー行きを防ぐことにもつながります。不正利用されたキーから送られたメッセージは、ドメインの評価を損なうからです。全体像をつかむには、このチェックリストとSPF、DKIM、DMARCを組み合わせてください。

Inbixioで送信しよう

お使いのSMTPサーバーを接続し、権限を絞ったAPIキーを作成すれば、HTTPSリクエスト1回であらゆる言語から送信できます。

アカウントを作成 料金を見る