APIセキュリティ|その概念と通用の対策
WebアプリでAPIが幅広く利用されている今、APIのセキュリティを考えなければならないことになります。本文では、APIセキュリティという概念を解説した上、APIセキュリティに関する通用の対策を皆さんに紹介していきたいと思います。
WebアプリでAPIが幅広く利用されている今、APIのセキュリティを考えなければならないことになります。本文では、APIセキュリティという概念を解説した上、APIセキュリティに関する通用の対策を皆さんに紹介していきたいと思います。
APIセキュリティとは
APIセキュリティとは、APIの不正利用や攻撃を防ぎ、安全なサービスの提供するなど、API(Application Programming Interface)を安全に利用するためのセキュリティ対策のことです。
主なAPIセキュリティの対策としては以下のようなものがあります。
- APIのアクセス制御(認証、認可)を行うことで、許可されたユーザーだけがAPIを利用できるようにする。
- APIの通信を暗号化することで、通信内容を秘匿する。
- APIの利用頻度を制限することで、サービス妨害攻撃を防ぐ。
- APIの入力データをチェックすることで、不正なデータやコマンドの注入を防ぐ。
- その他
APIセキュリティ対策はなぜ必要?
APIはアプリケーション同士の通信を可能にするインターフェースですが、セキュリティを考慮しない場合、悪意ある第三者にAPIを悪用されるリスクがあります。たとえば、API経由で個人情報や機密データが不正取得されたり、DOS攻撃によってサービス提供が停止したりすることがありえます。
このため、アクセス制御や入力検証、通信の暗号化といったAPIのセキュリティ対策を考慮しなければなりません。
APIセキュリティを実現する通用対策
それでは、APIセキュリティを確保して、API及びアプリのセキュリティ水準を向上するために、どうしたらいいですか?次は、APIセキュリティの通用対策を皆さんに紹介します。
⒈SSL証明書でAPI通信の暗号化を確保
API通信の暗号化を実現するために、SSL証明書を使うのが一般的です。SSL証明書において、通常サーバー側とクライアント側のものがあります。
- サーバー側のSSL証明書は、自分の正当性を示しています。つまり、APIエンドポイントのURLはHTTPSプロトコルを使用しています。
- クライアント側のSSL証明書は、正当性を検証するという役割分担になります。つまり、クライアント経由でAPIリクエストを送信する時に、クライアント側のSSL証明書を利用して、サーバー側のSSL証明書に一致するかを検証します。検証できた場合は、レスポンスを返すが、検証できなかった場合は、レスポンスが返されません。
現在、サーバー側のSSL証明書を使用して、ドメインの正当性を示すのが一般的なことですが、SSL化されたAPIエンドポイントにリクエストを送信しても、クライアント側のSSL証明書が不要な場合が多くあります。つまり、Httpsプロトコルを利用しているサーバーからレスポンスを取得するには、クライアントSSL証明書を添付しない場合が多く見られます。
ただし、一部のAPIでは、APIのセキュリティをさらに確保するために、クライアント証明書が有効にされています。そうすると、当該APIにリクエストを送信する時に、SSLクライアント証明書を添付して送信する必要があります。ここでクライアントSSL証明書を簡単に追加できるApidogを使用してリクエストを送信することがおすすめです。
ステップ⒈Apidogを立ち上げ、SSLクライアント証明書が必要となるAPIを開きます。
ステップ⒉「設計」モードに切り替え、上部のメニューバーで「変更」タブを選択して、Requestパラメータで「設定」をクリックします。
ステップ⒊「証明書の管理」をクリックします。
①CA証明書をオンにして、PEMファイルをアップロードします。
②「クライアント証明書を追加」をクリックして、必要な設定を終えます。
⒉APIの認証と認可を行う
API認証は、APIを利用する際にクライアントが正当なユーザーであることを確認するためのセキュリティメカニズムです。API認証により、不正なアクセスや悪意のある操作を防ぐことができます。
API認証の方式には様々ありますが、APIキーによる認証とOAuthによる認証は最もよく利用される仕組みです。
- APIキーによる認証は、APIを利用するクライアントに固有のキー(トークン)を発行し、API利用時にそのキーをリクエスト内に含めることで、アクセス権限を確認するシンプルな方法です。ただしセキュリティは弱いというデメリットがあります。
- OAuthによる認証は、サードパーティのアプリケーションがAPIにアクセスする場合に用いられ、ユーザーの承認に基づいてアクセストークンが発行され、そのトークンでAPIにアクセスできるようになるという流れになります。複雑な仕組みですが、セキュリティ面は強固です。
API認証を実装して、APIセキュリティを確保するために、一番使いやすいAPI管理ツールのApidogを使って、API認証を実現することがおすすめです。
ステップ⒈ApidogでAPIを新規作成するか、既存のAPIにアクセスして、APIの「変更」ページで、「Requestパラメータ」で「Auth」タブに切り替えます。
ステップ⒉ここで必要に応じて適切な認証方法を選択すると、それぞれの認証方法の関連情報を入力して、「保存」ボタンをクリックします。
上記のように、簡単な2ステップだけで、API仕様の設計中に、API認証を簡単に課すことができます。
⒊APIサーバーの分散
また、APIサーバーを分散させることは、DDoS攻撃への対策や障害時の影響範囲の局所化、セキュリティ面での隔離がしやすいなどの点で、一定のセキュリティ対策としての効果が期待できます。攻撃や障害が分散サーバーに分散するため、個々のサーバーへの影響は抑えられます。また用途別にサーバーを分けることで、それぞれに適したセキュリティ要件を設定できるなどの利点があります。
一方で、分散にはコスト増や運用の複雑性といったデメリットも存在し、全体としてのセキュリティレベルが低いサーバーに依存するリスクもあります。