Zeabur EmailAPIキー管理

API キー管理

API キーは Zeabur Email API リクエストの認証に使用されます。各キーには異なる権限レベルを設定できます。

権限タイプ

Zeabur Email は3つの権限レベルを提供します:

権限タイプ説明使用例
読み取り専用 (read_only)メールと統計情報のクエリのみ可能データ分析、監視ダッシュボード
送信専用 (send_only)メール送信とステータスクエリが可能本番環境アプリケーション(推奨)
全権限 (all)すべての操作権限を含む管理ツール、開発環境
⚠️

セキュリティ上の理由から、本番環境では「送信専用」権限を使用し、「全権限」の使用を避けることをお勧めします。

API キーの作成

コンソールにログイン

Zeabur コンソールの Zeabur Email 管理ページにアクセスします。

新しいキーを作成

  1. 「API キー管理」に移動
  2. 「API キーを作成」をクリック
  3. キー名を入力(識別用)
  4. 権限タイプを選択
  5. (オプション)特定のドメインに制限
  6. 「作成」をクリック

キーを保存

🚫

キーは作成時に一度だけ表示されます!すぐに安全な場所に保存してください。

作成後、システムは完全な API キーを表示します。コピーして安全に保存してください。再度表示することはできません。

ドメイン制限

セキュリティを強化するため、API キーを特定のドメインからのメール送信のみに制限できます:

// キー作成時に許可されたドメインを設定
{
  "name": "Production API Key",
  "permission": "send_only",
  "allowed_domains": ["yourdomain.com", "mail.yourdomain.com"]
}

これにより、キーが漏洩しても、攻撃者は未承認のドメインを使用してメールを送信できません。

API キーの使用

HTTP リクエストヘッダー

すべての API リクエストにキーを含めます:

POST /api/v1/zsend/emails
Host: api.zeabur.com
Content-Type: application/json
Authorization: Bearer zs_your_api_key_here
 
{
  "from": "[email protected]",
  ...
}

コード例

JavaScript

const apiKey = process.env.ZSEND_API_KEY;
 
const response = await fetch('https://api.zeabur.com/api/v1/zsend/emails', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + apiKey
  },
  body: JSON.stringify({
    from: '[email protected]',
    to: ['[email protected]'],
    subject: 'テストメール',
    html: '<p>テスト内容</p>'
  })
});

Python

import os
import requests
 
api_key = os.environ.get('ZSEND_API_KEY')
 
response = requests.post(
    'https://api.zeabur.com/api/v1/zsend/emails',
    headers={
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + api_key
    },
    json={
        'from': '[email protected]',
        'to': ['[email protected]'],
        'subject': 'テストメール',
        'html': '<p>テスト内容</p>'
    }
)

Go

package main
 
import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)
 
func sendEmail() error {
    apiKey := os.Getenv("ZSEND_API_KEY")
    
    payload := map[string]interface{}{
        "from":    "[email protected]",
        "to":      []string{"[email protected]"},
        "subject": "テストメール",
        "html":    "<p>テスト内容</p>",
    }
    
    jsonData, _ := json.Marshal(payload)
    req, _ := http.NewRequest("POST", "https://api.zeabur.com/api/v1/zsend/emails", bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer " + apiKey)
    
    client := &http.Client{}
    resp, err := client.Do(req)
    return err
}

キーのローテーション

定期的な API キーのローテーションは良いセキュリティ慣行です:

新しいキーを作成

古いキーをアクティブに保ちながら、新しい API キーを作成します。

アプリケーション設定を更新

アプリケーションの API キーを新しいキーに段階的に更新します。

古いキーを削除

すべてのアプリケーションが更新されたことを確認した後、古いキーを削除します。

90日ごとにキーをローテーションすることをお勧めします。

キーの取り消し

キーが漏洩した場合、または不要になった場合:

  1. 「API キー管理」に移動
  2. 削除するキーを見つける
  3. 「削除」ボタンをクリック
  4. 削除を確認
⚠️

キーを削除すると、そのキーを使用するすべての API リクエストは直ちに失敗します。

セキュリティのベストプラクティス

1. 環境変数を使用

コードに API キーをハードコーディングしないでください:

// ❌ 推奨されません:ハードコーディングしない
const apiKey = 'zs_xxxxxxxxxxxxxxxxxxxxxxxx';
 
// ✅ 推奨:環境変数を使用
const apiKey = process.env.ZSEND_API_KEY;

2. 最小権限の原則を使用

異なるアプリケーション用に適切な権限を持つ個別のキーを作成します:

  • 本番アプリケーション:送信専用権限 + ドメイン制限
  • データ分析:読み取り専用権限
  • 管理ツール:全権限(必要な場合のみ)

3. キーの使用状況を監視

Zeabur Email コンソールで各キーの使用統計を表示します:

  • リクエスト数
  • 送信メール数
  • エラー率

異常な使用が検出された場合は、直ちにキーを取り消します。

4. キーを共有しない

各アプリケーションと環境(開発/本番)用に個別のキーを作成し、追跡と管理を容易にします。

トラブルシューティング

401 Unauthorized

{
  "error": "unauthorized",
  "message": "Invalid or missing API key"
}

考えられる原因

  • API キーが正しくない、または削除されている
  • リクエストヘッダーの形式が間違っている(Authorization: Bearer <token> である必要があります)
  • キーに先頭/末尾のスペースがある、または Bearer プレフィックスがない

403 Forbidden

{
  "error": "permission denied",
  "message": "API key does not have permission to send from this domain"
}

考えられる原因

  • キーの権限が不十分(例:読み取り専用キーでメールを送信)
  • 送信者ドメインがキーの許可リストにない
  • ドメインが検証されていない

429 Too Many Requests

{
  "error": "too many requests",
  "message": "Rate limit exceeded"
}

解決策

  • リクエストのスロットリングとリトライメカニズムを実装
  • より高いレート制限のためにアカウントのアップグレードを検討
  • バッチ送信 API を使用してリクエスト数を削減