クラウド基盤を扱ったりサービスやスマホアプリを開発する方にとって「APIキー」はなじみの深いものでしょう。 近年ではAI連携のためにAPIキーを扱う機会がより一般化しているように見えます。 一方で、APIキーの扱いに起因するインシデントも多数報告されており、一層の注意が必要な状況です。
ここでは失敗事例などを交えながら、APIキーの扱いについて説明したいと思います。
APIキーは簡単に言えば「Webサービス連携機能であるAPI」を利用するための「秘密の文字列」です。
通常、スケジュール管理サービス等を利用する際には「IDとパスワード」を入力することで、正しい利用者であることを認証します。 このサービスが「スケジュール管理API」(スケジュールの登録 や 空き時間の参照 等の機能)を提供していれば、 個人のWebサイトに「面会の予約」をする機能を組み込めるかもしれません。 この「スケジュール管理API」を利用する際に必要な認証情報が「APIキー」です。
APIキーは様々なサービスが提供しています。 例えば、クラウド基盤(AWS等)でAPIキーを発行することで、仮想サーバの起動・停止やストレージへのアクセス等を様々なツールと連携できます。
情報漏洩や連携先の機能に不具合があった場合のリスクを管理するため、パスワードではなく、APIキーが必要です。 特に以下のような理由からWebサービス連携には API と APIキー を利用します。
パスワードがアカウントに対して1対1であるのに対して、多くの場合、APIキーはアカウントに対して複数発行できます。 このため、連携する外部サービス毎にAPIキーを発行し「使い捨て」することでパスワードに比べて漏洩リスクや管理コストを低減できます。
また、多くの場合、APIキーを発行する際には「利用可能な機能」や「利用条件(利用期限やアクセス元など)」を設定できます。 スケジュール管理サービスの例であれば、「スケジュールの登録」と「空き時間の参照」だけを許可すれば、APIキーを盗まれても「スケジュールの盗み見」を回避できます。
ここまで、APIキーの必要性を説明してきましたが、APIキーは利用方法を誤ると大きなインシデントにつながります。
APIキーの必要性を説明しながら「できるなら使わない」という注意に驚かれる方もいるかもしれません。 しかし、APIキーは「知っていれば機能を利用できる」という非常にシンプルな仕組みのため、便利な一方で漏洩時のリスクが存在します。 このため、よりセキュアな方法が提供されているのであれば、それを検討すべきです。
例として AWS の IAMロール が挙げられます。 AWSではAPIキー (アクセスキー と シークレットキー)を発行することでAWS上に構築したWebサーバからストレージやデータベースなどのサービスを利用できます。 一方で、APIキーが漏洩し、ストレージやデータベースが被害に遭う···という事例も多くみられます。
このような問題を回避する方法の一つとして「IAMロール」があります。 IAMロールはクラウド基盤上のEC2インスタンス(Webサーバ等)にリソース(ストレージやデータベース等)への権限を設定する機能です。 これにより、そもそもAPIキーを発行しないことで「APIキーの漏洩」を回避できます。
同様の機能は様々な基盤で提供されているため、ぜひ、確認してください。
APIキーはパスワード同様、秘密の情報です。
近年は設定ファイルやソースコードに記載したAPIキーがGitHubなどのリポジトリを通して公開された事例があります。 APIキーをサーバに配布する際にはファイルに直接記載せず、クラウド基盤等が提供する安全な方法(例: AWS Secrets Manager等)の利用を検討してください。
また、秘匿すべきAPIキーをクライアントアプリ(スマホアプリ等)に格納して配布してはいけません。 この問題は「JSSEC モバイルアプリケーション開発 10大チェックポイント 2023」や「OWASP Mobile Top 10 2024」でも特に注目されています。 クライアントアプリで「権限を持ったAPIキー」を保持せず、サーバーサイドに認証・認可の機能を作り、クラウド上でAPIキーを管理してください。
APIキーに特権管理者等の権限を与えると、漏洩などの問題が生じた際の影響が非常に大きくなります。 このため、APIキーには「必要最小限の機能」のみを許可することが重要です。
「利用可能なリソース」や「リソースに対して可能な操作(参照、更新、削除など)」が設定できる場合は積極的に制限をしましょう。
また、AWSでは「ログイン可能なユーザアカウント」でAPIキーを発行すると、そのユーザで行使可能な権限が与えられます。 このような場合には「人間がログインしないAPI用アカウント」と「ログインして利用するユーザ用アカウント」を切り分け、それぞれの権限を管理することが望ましい対応となります。
万が一、APIキーが漏洩した場合のリスクを軽減するため、「有効期限」を定めて運用したり、「アクセス元IP制限」などの制限をすることを検討してください。
「パスワードの定期更新は不要では?」と疑問を持つ方もいるかもしれませんが、それは「個人で管理するパスワード」に限定されます。 共同管理される認証情報は複数人が触れる機会があり、また、人員の入れ替わりなどもあるため、「定期的な更新」が求められます。 同様に複数の開発者で共同管理されるAPIキーも有効期限を定め、定期的に古いAPIキーを無効化することが求められます。
また、万が一、漏洩した場合にも所定の利用元からしかAPIキーを利用できないよう、「アクセス元IP制限」を設定することも有効です。
APIキーに関連した事件・事故は多数報告されており、記事で説明したように十分な注意が必要です。 さらに近年は生成AI関連のサービス間連携などAPIキーを扱う場面がより多く見られます。
弊社が提供する各種診断(Web脆弱性診断、スマホアプリ診断、ソースコード診断、クラウド診断など)でもAPIキーは重要な観点の一つです。 この記事や弊社のサービスが皆さんの安全な開発・サービス利用の一助になれば幸いです。
お見積り・ご相談など、お気軽にご相談ください
サイトTOPへ