Article

APIキーの安全な管理方法|環境変数・Git・Secrets Managerまで実務で解説

外部サービスと連携するWebシステムを開発すると、APIキーを扱う機会が増えてきます。

例えば、

  • 生成AI API
  • Google Maps
  • メール配信サービス
  • SMS送信サービス
  • 決済サービス
  • クラウドストレージ
  • OCR
  • CRM
  • 会計システム

などとの連携です。

APIキーはシステム同士がAPIを利用するための認証情報として使われることがあります。

そのため、APIキーが漏洩すると、第三者にAPIを利用されたり、データへアクセスされたり、従量課金型サービスで想定外の料金が発生したりする可能性があります。

APIキーの管理で重要なのは、単純に「ソースコードに書かなければ安全」と考えないことです。

実際には、

  • どこに保存するか
  • 誰が閲覧できるか
  • どのシステムから利用できるか
  • Gitへ登録されないか
  • 本番・開発環境を分離しているか
  • 定期的に変更できるか
  • 退職者が閲覧できなくなるか
  • 漏洩時にすぐ無効化できるか

まで含めて設計する必要があります。

この記事では、APIキーの安全な管理方法を、社内システムやWebシステム開発を想定して具体的に解説します。

APIキーとは

APIキーとは、APIを利用するときにサービス側から発行される識別・認証情報の一種です。

例えば自社の予約管理システムから外部のメールサービスを呼び出す場合、

予約登録
↓
Webシステム
↓
メール配信API
↓
予約確認メール送信

という処理が考えられます。

このとき、メール配信サービス側は、

「どの利用者からのAPIリクエストなのか」

を確認する必要があります。

そこでAPIキーなどの認証情報を使います。

イメージとしては、

APIリクエスト
+
APIキー
↓
外部サービス
↓
認証・権限確認
↓
処理実行

という流れです。

ただし、APIごとに認証方法は異なります。

APIキーだけでなく、

  • OAuth
  • アクセストークン
  • クライアントシークレット
  • JWT
  • サービスアカウント

などを利用する場合もあります。

これらの機密情報をまとめて「シークレット」と呼ぶこともあります。

APIキーを安全に管理するための基本

APIキー管理では、次の考え方を押さえておくことが重要です。

  1. ソースコードへ直接書かない
  2. Gitへ登録しない
  3. フロントエンドへ秘密のAPIキーを渡さない
  4. 開発・検証・本番環境でAPIキーを分ける
  5. 必要最小限の権限だけを付ける
  6. APIキーを一元管理する
  7. 利用状況を確認できるようにする
  8. ローテーションできる仕組みにする
  9. 退職・異動時のアクセス権を整理する
  10. 漏洩時の対応手順を決めておく

順番に解説します。

1.APIキーをソースコードへ直接書かない

最初に避けたいのが、APIキーのハードコーディングです。

例えば次のように、プログラムへAPIキーを直接記述する状態です。

API_KEY = “xxxxxxxxxxxxxxxx”

この状態では、ソースコードを閲覧できる人がAPIキーも確認できます。

さらにGitなどのバージョン管理システムを使用している場合、APIキーがコミット履歴に残る可能性があります。

そのため、

ソースコード
→ APIキーそのものを書かない

設定・シークレット管理
→ APIキーを保存

アプリケーション
→ 実行時に取得

という構成にします。

シークレットをコードから分離して管理することは、APIキー管理の基本です。

2.環境変数を利用する

小規模なWebシステムでよく利用されるのが環境変数です。

例えばアプリケーション側では、

API_KEY

という変数名だけを参照し、実際の値は実行環境から取得します。

イメージとしては、

アプリケーション
↓
環境変数を参照
↓
APIキー取得
↓
外部APIを呼び出す

という構成です。

.envファイルを利用する場合

ローカル開発では、.envファイルなどへ環境変数を保存することがあります。

例えば、

API_KEY=xxxxxxxx

のような形式です。

ただし重要なのは、

.envを使えば安全

ということではありません。

.envファイルをGitへコミットしてしまえば、APIキーがソースコード管理環境へ流出する可能性があります。

そのため、

  • .gitignoreへ追加する
  • 本物のAPIキーをサンプルファイルに入れない
  • 開発者間で安易にチャット送信しない

といった運用も必要です。

3.GitHubなどへAPIキーをコミットしない

APIキーの漏洩経路として注意したいのがGitです。

例えば、

APIキーをソースコードへ記述
↓
Gitへコミット
↓
GitHubへPush
↓
後からAPIキーを削除

というケースがあります。

ここで注意したいのは、

「最新のコードから削除したから問題ない」

とは限らないことです。

過去のGit履歴にAPIキーが残っている可能性があります。

そのためAPIキーを誤ってコミットした場合は、単純にファイルから削除するだけではなく、

APIキーを無効化
↓
新しいAPIキーを発行
↓
アプリケーション設定を変更

という対応を優先します。

GitHubなどには、リポジトリに含まれるシークレットを検出する仕組みもあります。

こうした機能も活用しながら、「漏洩しない」だけでなく「漏洩を検知する」仕組みを作ることが重要です。

4.フロントエンドに秘密のAPIキーを置かない

ReactやNext.jsなどでWebシステムを開発するときに特に注意したいのが、フロントエンドです。

ブラウザ上で実行されるJavaScriptに秘密のAPIキーを含めると、利用者側から確認できる可能性があります。

例えば、

ブラウザ
↓
直接外部APIを呼び出す
↓
APIキーを送信

という構成で、秘密にすべきAPIキーをブラウザ側へ渡す設計は避けます。

代わりに、

ブラウザ
↓
自社バックエンドAPI
↓
APIキーを利用
↓
外部API

という構成を検討します。

つまり、秘密にする必要があるAPIキーはサーバー側だけで扱います。

ブラウザで使うキーがすべて危険というわけではない

APIによっては、ブラウザから利用することを前提とした公開可能なキーを提供している場合もあります。

その場合でも、

  • 利用可能なドメイン
  • API
  • IPアドレス
  • 利用量

などを制限できるのであれば、必要な範囲に限定します。

重要なのは、

「APIキーという名前だから全部秘密」

でも、

「フロントエンドで使えるから安全」

でもありません。

利用しているAPIの仕様を確認し、その認証情報が公開を前提としているかを判断する必要があります。

5.開発・検証・本番でAPIキーを分ける

次に重要なのが環境分離です。

例えば次の3環境があるとします。

  • 開発環境
  • ステージング環境
  • 本番環境

すべてで同じAPIキーを利用すると、開発者が利用しているキーから本番環境まで影響を受ける可能性があります。

そのため可能であれば、

開発環境
→ 開発用APIキー

ステージング環境
→ 検証用APIキー

本番環境
→ 本番用APIキー

と分けます。

これによって、開発用キーが漏洩しても、本番環境への影響を限定しやすくなります。

6.APIキーには必要最小限の権限だけを与える

APIキーを発行するときは、

「使える機能をすべて許可する」

のではなく、必要な機能だけを許可することが重要です。

これは最小権限の原則と呼ばれる考え方です。

例えばメール送信用のシステムなら、

メール送信
→ 許可

ユーザー管理
→ 不要

請求設定変更
→ 不要

APIキー管理
→ 不要

という形です。

仮にAPIキーが漏洩しても、利用できる権限が限定されていれば被害範囲を抑えやすくなります。

7.可能ならAPIキーの利用元も制限する

外部サービスによっては、APIキーの利用元を制限できる場合があります。

例えば、

  • 特定IPアドレスのみ
  • 特定ドメインのみ
  • 特定APIのみ
  • 特定アプリケーションのみ

といった制限です。

例えば社内サーバーからしか利用しないAPIキーであれば、

会社のシステム
↓
許可

その他
↓
拒否

という構成にできる場合があります。

APIキーそのものだけで防御するのではなく、利用場所も制限する考え方です。

8.本番環境ではシークレット管理サービスも検討する

システム規模が大きくなると、環境変数だけでAPIキーを管理することが難しくなることがあります。

例えば、

  • APIキーが数十個ある
  • 複数システムから利用する
  • 開発者が増えた
  • 誰が閲覧したか管理したい
  • 定期的にローテーションしたい
  • 本番キーを開発者へ見せたくない

といったケースです。

この場合は、クラウドなどが提供するシークレット管理サービスを利用する方法があります。

例えばAWS環境であればAWS Secrets Managerなどが候補になります。

一般的には、

アプリケーション
↓
実行権限でシークレット管理サービスへアクセス
↓
APIキー取得
↓
外部API利用

という構成です。

これにより、開発者がAPIキーそのものを直接コピーして運用する必要を減らせます。

環境変数とSecrets Managerはどちらを使う?

「APIキーは環境変数とSecrets Managerのどちらで管理すればよいか」

と迷うケースがあります。

一律にどちらが正解というものではありません。

大まかには次のように考えられます。

項目環境変数シークレット管理サービス
導入の簡単さ◎○
小規模開発◎○
シークレットの一元管理△◎
アクセス制御○◎
監査△◎
ローテーション△◎
大規模システム○◎
運用コスト低いやや増える

例えば、

個人開発
小規模な社内システム
APIキー数個

であれば、適切に設定された環境変数でも運用できる場合があります。

一方、

複数システム
複数開発者
本番環境
重要データ
多数のシークレット

を扱うのであれば、シークレット管理サービスを検討する価値が高くなります。

9.APIキーを個人のアカウントに依存させない

社内システムで注意したいのが、

「担当者個人が発行したAPIキーで本番システムが動いている」

状態です。

例えば、

担当エンジニアA
↓
個人アカウントで外部サービスへ登録
↓
APIキー発行
↓
本番システムに設定

という構成です。

その後エンジニアAが退職すると、

  • APIキーを削除してよいか分からない
  • 管理画面へログインできない
  • 契約情報が個人に紐づいている
  • 誰がAPIキーを管理するのか分からない

という問題が発生します。

本番システムで利用する外部サービスは、可能な範囲で会社管理のアカウントや組織アカウントに紐づけます。

10.APIキーを定期的にローテーションする

同じAPIキーを何年も使い続けると、過去にどこかでコピーされたキーが残っている可能性があります。

そこで検討したいのがAPIキーのローテーションです。

ローテーションとは、古いキーを新しいキーへ入れ替えることです。

例えば、

現在のAPIキー:Key-A
↓
新しいAPIキー:Key-Bを発行
↓
システムをKey-Bへ変更
↓
動作確認
↓
Key-Aを無効化

という流れです。

いきなり古いキーを無効化するとシステムが停止する可能性があるため、新旧キーを一時的に併用できるサービスでは段階的に切り替える方法があります。

APIキーのローテーション頻度はどう決める?

「何か月ごとに変更すれば安全か」

という疑問もありますが、すべてのAPIキーに共通する固定期間があるわけではありません。

例えば、

  • APIキーの重要度
  • 利用サービスの仕様
  • アクセス可能なデータ
  • 権限
  • 漏洩時の影響
  • 自動ローテーションの可否

などによって判断します。

また、定期ローテーションだけでなく、

  • 担当者退職
  • 権限変更
  • 漏洩の疑い
  • 誤ってGitへコミット
  • 不審なアクセス検知

などがあった場合は、必要に応じて即時無効化・再発行します。

11.APIキーへのアクセス権を管理する

社内でAPIキーを共有するときに、

「開発チームのチャットに貼っておきました」

という運用は避けたいところです。

一度チャットへ貼ると、

  • 誰が保存したか
  • 誰がコピーしたか
  • 退職者が持っていないか
  • どこへ転送されたか

を管理することが難しくなります。

APIキーは、

「開発チーム全員が知るもの」

ではなく、

「必要なシステム・必要な担当者だけがアクセスできるもの」

として設計します。

12.退職・異動時にAPIキーへのアクセス権も見直す

退職者アカウント管理では、Google Workspaceや社内システムだけでなく、APIキーも確認する必要があります。

例えば退職するエンジニアが、

  • AWS Secrets Manager
  • クラウド管理画面
  • 外部APIサービス
  • CI/CD
  • GitHub Secrets

などへアクセスできた場合、その権限を削除します。

ただし、

「退職するたびにすべてのAPIキーを交換する」

必要があるとは限りません。

重要なのは、

退職者がAPIキーそのものを知っているのか
↓
知っているなら変更を検討

シークレット管理システム経由でのみ利用していたのか
↓
アクセス権を剥奪

というように管理方法に応じて判断することです。

APIキーを人に見せない仕組みにすると管理しやすい

理想的には、

開発者
↓
APIキーを見る
↓
コピーして設定

という運用を減らします。

例えばCI/CD環境では、

GitHubなど
↓
シークレットとして登録
↓
デプロイ時に利用
↓
アプリケーションへ設定

という構成にできます。

さらにクラウド環境では、

アプリケーション
↓
IAMなどの権限
↓
Secrets Manager
↓
APIキー取得

という構成も可能です。

「安全な場所に保存する」だけでなく、

「そもそも人間がAPIキーを直接扱う回数を減らす」

という考え方が重要です。

13.APIキーをログへ出力しない

意外と見落とされやすいのがログです。

例えばデバッグ時に、

リクエストヘッダー
リクエストURL
環境変数
エラー情報

などをそのままログへ出力すると、APIキーまで保存される可能性があります。

例えば、

Authorization: Bearer xxxxxxxxx

のような情報がログへ残ると、ログ閲覧権限を持つ人がAPIキーを取得できてしまいます。

ログを設計するときは、

API_KEY=

のようにマスキングするなど、秘密情報を記録しないようにします。

14.URLにAPIキーを含める場合は特に注意する

APIによっては、

https://example.com/api?key=xxxxxxxx

のようにURLへAPIキーを含める仕様になっている場合があります。

URLは、

  • Webサーバーログ
  • アクセスログ
  • ブラウザ履歴
  • プロキシログ
  • 監視ツール

などへ記録される可能性があります。

利用しているAPIが複数の認証方法を提供している場合は、推奨される方法を確認したうえで実装します。

15.APIキーの利用状況を監視する

APIキーは、

「漏れないようにする」

だけではなく、

「漏れたときに気付けるようにする」

ことも重要です。

例えば、

  • APIリクエスト数
  • 利用料金
  • エラー数
  • アクセス元
  • 利用時間帯

などを確認します。

例えば通常は1日100回しか利用しないAPIが、突然10万回呼び出されていた場合、不正利用やシステム障害を疑うことができます。

外部サービスに、

  • 利用上限
  • 予算アラート
  • レート制限

などが用意されている場合は、それらも活用します。

APIキーの管理台帳を作る

複数の外部サービスを利用する会社では、

「何のAPIキーが存在するか分からない」

という状態になることがあります。

そこでAPIキーそのものではなく、管理情報を台帳化します。

例えば次のような項目です。

項目内容
API名メール送信API
用途予約確認メール
利用システム予約管理システム
環境本番
管理責任者システム管理者
保存場所Secrets Manager
権限メール送信のみ
発行日2026/04/01
最終更新日2026/07/01

重要なのは、この台帳にAPIキーそのものを記載しないことです。

台帳には、

「何が存在し、どこで管理されているか」

を記録します。

【コピペ用】APIキー管理チェックリスト

社内システムで外部APIを利用するときは、次の項目を確認してみてください。

API基本情報

  • APIサービス名:
  • 利用目的:
  • 利用システム:
  • 管理担当者:
  • 契約アカウント:
  • APIキー発行日:

保存方法

  • ソースコードに直書きしていない:
  • Gitへコミットしていない:
  • .envがGit管理対象外になっている:
  • 本番環境の保存場所:
  • シークレット管理サービス利用有無:

環境

  • 開発用APIキー:
  • ステージング用APIキー:
  • 本番用APIキー:
  • 環境ごとに分離されている:

権限

  • 必要最小限のAPIのみ許可:
  • IP制限:
  • ドメイン制限:
  • 利用量制限:
  • 閲覧可能な担当者:

運用

  • ローテーション方法:
  • 最終ローテーション日:
  • 次回確認日:
  • 退職者発生時の対応:
  • 漏洩時の無効化方法:

監視

  • API利用ログ:
  • 利用料金アラート:
  • 異常アクセス検知:
  • APIキー変更履歴:

APIキーが漏洩したらどうする?

APIキーが漏洩した可能性がある場合は、

「本当に使われたか調査してから考える」

よりも、まず影響を止めることが重要です。

基本的には、

漏洩を確認
↓
対象APIキーを無効化
↓
新しいAPIキーを発行
↓
システムを切り替える
↓
利用ログを確認
↓
影響範囲を調査
↓
漏洩経路を特定
↓
再発防止

という流れを検討します。

例えばGitHubへ誤ってAPIキーを公開した場合、リポジトリから文字列を削除するだけではなく、漏洩したAPIキーそのものを失効させます。

APIキー管理でよくある失敗

ソースコードへ直接書く

最も避けたい管理方法です。

Gitや開発者間でAPIキーが共有される原因になります。

.envなら絶対安全だと思う

.envも通常のファイルです。

Gitへの誤登録やファイル共有によって漏洩する可能性があります。

本番と開発で同じAPIキーを使う

開発者PCから本番用APIキーが漏洩すると、本番環境まで影響を受けます。

可能であれば環境ごとに分離します。

APIキーをSlackやメールで送る

後から誰が持っているか把握できなくなります。

シークレット共有の方法を決めておく必要があります。

APIキーに管理者権限を付ける

システムがメール送信しか必要としないのに、すべてのAPI操作を許可する必要はありません。

必要最小限の権限にします。

一度発行したAPIキーを何年も使う

誰がコピーしたか分からないキーが長期間残り続ける可能性があります。

ローテーションできる運用を設計します。

退職したエンジニアがAPIキーを知ったままになる

退職時にはアカウントだけでなく、シークレットへのアクセス権や本人が直接把握していた認証情報も確認します。

APIキーをログへ出してしまう

アプリケーションログや監視サービスが新しい漏洩経路になります。

機密情報はマスキングするなどの対策が必要です。

APIキー管理に関するよくある質問

APIキーは環境変数で管理すれば安全ですか?

環境変数はソースコードからAPIキーを分離する方法として利用できますが、それだけで安全になるわけではありません。

誰が実行環境を閲覧できるのか、デプロイ環境でどのように設定しているのか、ログへ出力されないかなども確認する必要があります。

システム規模やセキュリティ要件によっては、専用のシークレット管理サービスを検討します。

.envファイルをGitHubへアップロードしても非公開リポジトリなら大丈夫ですか?

APIキーなどの秘密情報は、リポジトリの公開・非公開にかかわらず、原則としてGit管理から分離する方が安全です。

閲覧できるユーザーや設定ミス、将来的な公開範囲変更なども考慮する必要があります。

APIキーをGitHubにPushしてしまいました。削除すれば大丈夫ですか?

ファイルから削除するだけでは不十分な場合があります。

Git履歴などに残っている可能性があるため、漏洩したAPIキーを無効化して新しいキーへ交換することを検討します。

APIキーは定期的に変更した方がよいですか?

重要度や利用サービスの仕様に応じて、ローテーションできる運用を作ることが重要です。

特に漏洩の疑いがある場合、担当者変更時、誤公開時などは速やかな無効化・再発行を検討します。

ReactやNext.jsのフロントエンドにAPIキーを書いてもよいですか?

秘密にする必要があるAPIキーを、ブラウザへ配信されるJavaScriptに含めるべきではありません。

自社のバックエンドAPIを経由して外部APIを呼び出す構成などを検討します。

ただし、サービスによってはブラウザ利用を前提とした公開可能なキーもあるため、API提供元の仕様を確認してください。

APIキーとパスワードは同じように管理すればよいですか?

どちらも秘密情報として適切に管理する必要がありますが、利用方法は異なります。

例えばユーザーのログインパスワードは通常、適切にハッシュ化して保存します。

一方、外部APIを呼び出すためのAPIキーは、アプリケーションが利用時に取得できる必要があるため、シークレット管理サービスなどで保護して保存します。

APIキーを管理する専用システムは必要ですか?

APIキーが数個程度で、小規模なシステムであれば必ずしも大規模な管理基盤が必要とは限りません。

一方、

  • APIキーが多数ある
  • 複数システムで利用している
  • 開発者が多い
  • 本番環境を厳格に管理したい
  • 監査ログが必要
  • ローテーションを自動化したい

という場合は、シークレット管理サービスの導入を検討する価値があります。

APIキー管理は「開発時」ではなく「運用まで」設計する

APIキー管理でありがちなのが、

開発担当者
↓
APIキーを発行
↓
環境変数へ設定
↓
システム完成

で終わってしまうことです。

しかし、そのシステムを数年間運用するのであれば、

  • 誰が管理するのか
  • 担当者が退職したらどうするか
  • APIキーをどう更新するか
  • 外部サービスを解約するときどうするか
  • 漏洩したら誰が止めるのか

まで必要になります。

そのため、理想的には、

API利用開始
↓
発行
↓
保管
↓
利用
↓
監視
↓
ローテーション
↓
無効化・削除

というライフサイクル全体で考えます。

hiro-dev-labでは外部API連携を含むWebシステム設計から相談できます

外部APIを利用するWebシステムでは、

「APIが動くように接続する」

だけでは十分ではありません。

例えば生成AI APIを業務システムへ組み込む場合でも、

Webブラウザ
↓
自社Webシステム
↓
バックエンド
↓
外部AI API

という構成を整理したうえで、

  • APIキーをどこへ保存するか
  • フロントエンドへ露出しないか
  • 誰が本番キーを管理するか
  • 開発環境と本番環境をどう分けるか
  • APIエラー時にどうするか
  • 利用量をどう監視するか
  • 個人情報を外部APIへ送信してよいか
  • APIキーを交換できる構成になっているか

まで考える必要があります。

hiro-dev-labでは、

  • 業務ヒアリング
  • 要求整理
  • 要件定義
  • Webシステム設計
  • API連携設計
  • 認証・権限設計
  • 外部サービス連携
  • AI API連携
  • 業務自動化
  • Webシステム開発

などから相談できます。

「外部APIを利用したいが、APIキーをどう管理すればよいか分からない」

「現在ソースコードやサーバーへ直接設定しているAPIキーを整理したい」

「複数の外部サービスと連携する業務システムを設計したい」

という段階でも、まず現在のAPIとシステム構成を整理するところから始められます。

まとめ

APIキーの安全な管理方法では、保存場所だけを見るのではなく、APIキーのライフサイクル全体を考えることが重要です。

基本的には、

  1. APIキーをソースコードへ直接書かない
  2. Gitへ登録しない
  3. 秘密のAPIキーをフロントエンドへ公開しない
  4. 開発・検証・本番環境を分離する
  5. 必要最小限の権限にする
  6. 必要に応じてシークレット管理サービスを使う
  7. APIキーへのアクセス権を制限する
  8. ローテーションできるようにする
  9. API利用状況を監視する
  10. 漏洩時にすぐ無効化できるようにする

という考え方が基本になります。

小規模なWebシステムであれば、環境変数を適切に管理するところから始めることもできます。

一方、システム数や開発者数、APIキー数が増えてきた場合は、

環境変数
↓
個別管理

から、

シークレット管理サービス
↓
アクセス権管理
↓
監視
↓
ローテーション

へ段階的に移行することを検討するとよいでしょう。

APIキーを「開発者だけが知っている文字列」にするのではなく、会社として管理できるシークレットとして扱うことが、安全で運用しやすいWebシステムにつながります。

Contact

お問い合わせ

システム導入、Webアプリ開発、AI導入、業務委託での開発支援などのご相談を受け付けています。

要件が固まっていなくても大丈夫です。使う方・運用する方の視点で整理し、分かりやすく進めます。

まずはお気軽にお問い合わせください。