BinanceのAPIキーはどう管理する?最小権限の設定と定期チェック
BinanceのAPIキーはデフォルトで読み取り権限のみで、現物取引・先物取引・出金を有効にするにはそれぞれチェックを入れる必要があります。ベストプラクティスは用途ごとに複数のキーを分ける+IPホワイトリストの紐付け+90日ごとのローテーションです。本記事では今回5個のAPIキーを設定した実測の過程とつまずいたポイントを記録します。
BinanceのAPIキーは、プログラムによる自動取引、相場データの取得、第三者の戦略プラットフォームなどに使うアクセストークンです。Binance公式サイトにログインし→[API管理]でキーを1つ作成すると、デフォルトでは[読み取り権限]のみで、[現物取引][先物取引][出金]はそれぞれ個別にチェックを入れないと有効になりません。今回は用途ごとに5個の独立したキーを設定し、それぞれ最小権限+IPを紐付けることで、万が一1つが漏洩しても最大損失をそのキーの権限範囲内に抑えられるようにしました。
最も重要な鉄則は、プログラムが本当に自動出金を必要としない限り、APIキーに絶対に出金権限を付けないことです。99%のプログラムは出金機能を使いません。しかし出金権限を有効にしてしまうと、キーが漏洩した瞬間にコインがそのまま抜き取られてしまいます。仮に有効にする場合でも、必ずホワイトリストと組み合わせる必要があります(Binanceの出金ホワイトリストはどう設定する?追加とクールダウン期間の詳細を参照)。
5つの権限項目はそれぞれ何をするのか
以下はBinance APIキーのすべての権限オプションと推奨するチェック方針です。
| 権限 | 機能 | リスク | 推奨 |
|---|---|---|---|
| Enable Reading(読み取り権限) | 相場・残高・注文の確認 | 極めて低い | 必ずチェック |
| Enable Spot & Margin Trading(現物+証拠金取引) | 発注、注文取消 | 中(最悪でも不当な取引で損する程度) | 必要に応じて |
| Enable Futures(先物取引) | 先物の発注、レバレッジ調整 | 中〜高(レバレッジで損失が拡大) | 必要に応じて |
| Enable Withdrawals(出金) | 指定アドレスへのチェーン上出金 | 極めて高い(直接持ち出される) | ほぼチェックしない |
| Permits Universal Transfer(口座間振替) | 現物/先物/資金口座間の振替 | 低い | 必要に応じて |
読み取り権限はデフォルトで付いているのでチェック不要です。現物・先物の権限はプログラムの用途に応じてチェックしてください。出金権限はどうしても必要な場合のみチェックし、チェックしたら必ず出金アドレスを紐付ける必要があります(これはホワイトリストの設定で行い、APIキーの設定画面では行いません)。
ステップ1:APIキーを作成する
[API管理]の入口は[アカウントセンター]→[API管理]にあり、アプリでも同じパスです。[API作成]をクリックし、[System generated]または[Self-generated]のどちらかを選びます。
| タイプ | 違い | 推奨シーン |
|---|---|---|
| System generated(システム生成) | Binanceがsecretを生成し、あなたは1回しか見られない | 99%のシーン |
| Self-generated(自己署名) | Ed25519/RSAの公開鍵を使い、secretはサーバーに一切アップロードされない | 高セキュリティが求められるシーン |
一般ユーザーは[System generated]を選べば十分です。キーに名前を付け(30文字以内、例:bot-spot-grid-arb)、[作成]をクリックします。システムは2FAコード+メール認証+SMS認証(紐付けている場合)を求め、3つすべて通過すると生成されます。
生成が完了するとAPIキー(公開鍵、64桁)とSecretキー(秘密鍵、64桁)が表示されます。Secretキーはこの1回しか表示されません。画面を閉じると二度と確認できなくなります。すぐにSecretをコピーしてパスワード管理アプリや暗号化されたメモに保存してください。失くしたらキーを削除して作り直すしかありません。
ステップ2:権限にチェックを入れる
新しく作成したキーはデフォルトで読み取り権限のみです。取引権限を有効にするには[Edit restrictions]をクリック→該当する権限にチェック→2FAコードで確認します。権限を変更するたびに2FA+メール認証がトリガーされます。
今回私たちが設定した5個のキーの構成は以下の通りです。
| キー名 | 用途 | 権限 | IP制限 |
|---|---|---|---|
bot-spot-grid |
現物グリッドボット | 読み取り+現物取引 | 1つのIPに限定 |
bot-futures-trend |
先物トレンド戦略 | 読み取り+先物取引 | 1つのIPに限定 |
tax-export |
確定申告用エクスポートツール | 読み取り専用 | 2つのIPに限定 |
dashboard-only |
自分用の監視ダッシュボード | 読み取り専用 | 制限なし(自宅Wi-Fiのみで使用) |
manual-transfer |
手動口座振替ツール | 読み取り+口座間振替 | 1つのIPに限定 |
5個すべてで出金権限は付けていません。もしどれか1つが漏洩しても、最大の損失は相手に不当な取引をされる程度(それもそのキーの現物/先物権限の範囲内)で、コイン自体は持ち出せません。
ステップ3:IPホワイトリストを紐付ける — 重要なステップ
[Edit restrictions]画面の下部に[Restrict access to trusted IPs only]があります。クリックしてIPアドレスを入力します(複数はカンマ区切り、最大30個)。
なぜIPの紐付けが必須なのか:
- APIキー+Secretが漏洩しても、不正利用者のサーバーのIPはホワイトリストに含まれていません
- Binanceのサーバー側はホワイトリスト外のIPからのすべてのリクエストを拒否し、-2015エラーを返します
- 「地理的な位置」という認証レイヤーがもう1つ追加されるのと同じです
IPを紐付けない場合の代償:
- IP制限のないキーは、Binanceが強制的に90日後に自動失効させます(これはBinanceが2024年から施行している固定ルールです)
- IPを紐付けたキーは自動失効せず、長期的に使用できます
自分のサーバーのIPの調べ方:
- 自前でボットを運用している場合:そのマシンで
curl ifconfig.meを実行して出口IPを確認 - クラウドファンクションやPaaS:サービス提供元が案内する固定出口IP(多くのPaaSは出口IPが固定されていないため、別途NATの設定が必要)
- 自宅で運用する場合:自宅回線の公開IP(動的IPは毎日変わるため面倒で、家庭用回線での紐付けはお勧めしません)
もしプログラムが動的IP環境(自宅回線、モバイル作業など)にデプロイされている場合、IPを紐付けなければ強制的に90日で失効し、紐付けてもIPが変動すると失敗します。この場合は固定IPのVPSを使うか、内網貫通の方式に切り替えるべきです。
今回は5個のキーのうち4個にIPを紐付けました。残りの[dashboard-only]は読み取り専用の用途で権限自体が低いため、IPを紐付けなくても安全です。
ステップ4:キーが機能しているかテストする
作成後、curlでテストします。
curl -H "X-MBX-APIKEY: あなたのAPIキー" \
https://api.binance.com/api/v3/account?timestamp=1234567890&signature=xxx
アカウント情報が返ってくればキーは正常に機能しています。もし以下が返ってきた場合は:
| エラーコード | 意味 | 対処法 |
|---|---|---|
| -2014 | APIキーが無効 | キーが完全にコピーされているか、余分なスペースがないか確認する |
| -2015 | IPがホワイトリストにない | 現在の出口IPを確認し、ホワイトリストに追加する |
| -1022 | 署名エラー | Secretキーと署名アルゴリズムを確認する |
| -1021 | タイムスタンプが範囲外 | サーバー時刻が同期していない、時刻合わせをする |
| -2010 | この権限がない | そのキーに対応する権限がチェックされていない、[Edit]で追加する |
| -4007 | 出金アドレスがホワイトリストにない | 出金APIでのみ発生、ホワイトリストに追加する |
一番よくあるのは-2015のIPがホワイトリストにないというエラーで、多くの人が自分の本当の出口IPを把握していないためです(例えばVPNを使っている、Cloudflareを経由している、特定の企業ネットワークを使っているなど)。Binance公式アプリの[API管理]でも[最終アクセスIP]を確認でき、自分が思っているIPと一致するか比較できます。
ステップ5:定期チェック+ローテーション
90日ごとにAPIキーの点検をしましょう。
1. すべてのキーを一覧表示する: [API管理]のトップページですべてのキー一覧が確認でき、それぞれの作成日時、最終アクセス日時、権限、IP制限が一目で分かります。
2. 怪しいキーを見つける:
- もうどのプログラム用か分からなくなったもの → 削除
- 30日間[最終アクセス]の記録がないもの → 削除
- IPを紐付けていないもの → IPを追加するか削除
- 実際に必要な範囲を超えた権限があるもの → 権限を最小限に変更
3. 積極的にローテーションする: 大きな資産に触れる重要なキーは90日ごとに主体的に作り直すことをお勧めします。旧キーを削除→新キーを作成→プログラムに反映→動作確認→完了、という流れです。このプロセスではプログラムが1〜5分ほど短時間停止することになるため、アクティビティの少ない時間帯を選んで行いましょう。
4. 削除前のチェック: APIキーの削除は即座に反映され、元に戻せません。削除前に以下を確認してください。
- そのキーが現在稼働中のどのプログラムにも参照されていないこと
- そのキーがどのcronジョブや定期タスクにも使われていないこと
- Gitリポジトリの
.envや設定ファイルに残っていないこと(すでに.gitignoreに入っているはずですが再確認する)
APIキー漏洩時の緊急対応
もしキーが漏洩した可能性に気づいたら(例えば誤って公開Gitリポジトリにpushしてしまった場合)、すぐに以下を実行します。
- 1秒目:[API管理]でそのキーを削除する
- 2秒目:そのキーの過去24時間の全取引記録を確認し、不審な注文がないか確認する
- 3秒目:もし出金権限を有効にしていた場合、不審な出金がないか確認する(ホワイトリストで阻止されているはずですが念のため確認する)
- 4秒目:アカウントのパスワードを変更+2FAをリセットする(他の認証情報が漏洩している証拠がなくても、一括で洗い流す)
- 後続対応:もしすでにGitリポジトリにpush済みであれば、キーを削除するだけでは不十分で、Gitの履歴からも
git filter-branchやBFGツールを使ってsecretを消す必要があります。そうしないとコミット履歴から後で掘り出される可能性があります
GitHubやGitLabにはsecretを自動でスキャンするサービスがあり、BinanceのAPI Secretが公開リポジトリにpushされると、Binanceが数時間以内にプラットフォームからの通知を受け取り、このキーを自動的に無効化してくれることがあります。しかしこれはあくまで最後の砦であり、これに頼ってはいけません。
第三者プラットフォームでAPIキーを使うときの落とし穴
多くの第三者の戦略プラットフォーム、確定申告ツール、ポートフォリオ管理ツールがAPIキーの入力を求めてきます。原則は以下の通りです。
| 第三者の種類 | 与えるべき権限 | 危険信号 |
|---|---|---|
| 確定申告用エクスポートツール | 読み取り専用 | 出金権限を求めてきたら → すぐ離れる |
| ポートフォリオ監視ダッシュボード | 読み取り専用 | 取引権限を求めてきたら → よく考える |
| コピートレード/シグナル/戦略プラットフォーム | 読み取り+現物/先物取引 | 出金権限を求めてきたら → 絶対に離れる |
| レバレッジ立替/レンディングツール | この種のものには関わらない、避ける | 出金を求めてくるものはすべて離れる |
レッドライン:もし第三者ツールが堂々と出金権限を要求してきたら、99%は持ち逃げが目的です。確定申告、監視、コピートレードいずれも出金権限は必要なく、読み取り、多くても取引権限があれば十分です。
今回、あるコピートレードの先物プラットフォームには[読み取り+先物取引]だけを与え、彼らが求めてきた[出金]権限は拒否しましたが、それでも受け入れてもらえました。つまりこの権限はもともとオプションであり、彼らが本当に必須だと言うなら離れるべきだということです。
よくある質問
Q:APIキーとSecretキー、どちらがより機微な情報ですか? A:Secretキーのほうがより機微です。APIキーはユーザー識別子のようなもので他人に伝えてもある程度は問題ありませんが、Secretキーは署名用の秘密鍵で、漏洩するとすべての権限が悪用されることを意味します。Secretは決してメール、チャット、Issueなどに書き込まないでください。
Q:APIキーとSecretはどう安全に保存すればいいですか?
A:ローカルでは1Password/Bitwarden/KeePassといったパスワード管理アプリを使い、サーバーでは環境変数+Docker secretsやKubernetesのSecretを使い、コードにハードコーディングしないでください。Gitリポジトリには必ず.gitignoreに.envを入れてください。
Q:Binanceで取得したAPIキーは後から名前を変更できますか? A:変更できます。[API管理]→該当のキーを探す→[Edit restrictions]で名前を変更できます。名前の変更はキー/Secret自体には影響せず、あくまで自分用のラベルです。
Q:APIキーの上限個数はいくつですか? A:1アカウントあたり最大30個です。一般的には5〜10個あれば用途を十分に細分化できます。30個は大量のサブアカウントやクオンツチームのために設計された上限です。
Q:サブアカウントのAPIとメインアカウントのAPIに違いはありますか? A:違いがあります。サブアカウントのAPIはそのサブアカウント内の資産しか操作できず、メインアカウントを動かすことはできません。サブアカウント同士も互いに隔離されています。サブアカウントは戦略の隔離+リスクの隔離に特に適しており、クオンツチームがよく利用します。
Q:APIキーにアクセス頻度の制限はありますか? A:あります。Binanceのすべてのエンドポイントにはweight(重み)による制限があり、シンプルなエンドポイントはweight=1、複雑なエンドポイントはweight=20です。IPごとに毎分1200 weightの総枠があり、超えると-1003のレート制限エラーが返ります。残高照会や注文照会は軽く、発注も軽いですが、全ローソク足の取得や全通貨ペアの取得はすぐに枠を使い切ってしまいます。
Q:APIキーを削除すると過去の取引記録は失われますか? A:失われません。取引記録や注文履歴はアカウントレベルに属するもので、どのキーで発注したかとは無関係です。キーを削除するのはそのアクセス認証情報を停止するだけで、アカウント内のデータはすべて保持されます。
Q:ホワイトリストIPはIPv6に対応していますか? A:対応しています。BinanceのAPIホワイトリストはIPv4とIPv6の両方に対応しており、入力形式も通常通りです。サーバーがv4とv6の両方の出口を持っている場合は、両方とも追加しておくことをお勧めします。
Q:APIが90日で自動失効するとはどういう意味ですか? A:IPホワイトリストを紐付けていないAPIキーは、Binanceが作成日から90日で自動的に失効させ、作り直す必要があります。IPを紐付けたものは自動失効しません。Binanceの公式発表にこのルールがあり、2024年から施行されており、主に長期間メンテナンスされていないキーを整理する目的です。