Akamai Diversity

Akamai Japan ブログ

Akamai API Gateway のご紹介

はじめに

Akamai Intelligent Platformは全世界中の15-30%のインターネットトラフィックを配信する中で、非常に多くのAPIを利用したトラフィックを観測しています。2018年現在、1日あたりのヒット数は445 Billion、データ量にして2.4 PetabyteものAPIトラフィックが配信されており、前年と比較した増加率(YoY)はそれぞれ+35%、+45%におよびます。

これまでAkamaiはAPIトラフィックに対し、高速化機能(SureRoute、GZIPデータ圧縮、HTTP2等)や、CacheによるAPIオリジンのオフロード、API Protectionによるセキュリティ機能を提供してきました。

2018年にリリースされたAkamai API Gateway(以降、AAG)の拡充により、従来機能に加えて、API認証/認可機能、リクエスト数制限、高度なCache機能を提供することが可能になり、世界最大規模且つ高信頼なAkamai Intelligent Platform上で包括的なAPIトラフィックのマネジメントの実現が可能になりました。

msuzuki_aag_01_update2.png

本ブログではAAGにフォーカスを当てたいと思います。

 

API Gatewayを世界中に分散化することのメリット

まず一般に、API Gatewayとは外部からのAPIトラフィックに対し統一された一つの入り口を設け、認証/認可やCache等の機能を再利用可能な共通サービスとして適用する仕組みを指します。API Gatewayが存在しない場合(下図の左側)、複数のAPIサーバに個別に機能群を適用する形になりますが、共通機能の重複により開発工数およびソフトウェア維持管理工数が増加してしまいます。一方、API Gatewayが存在する場合(下図の右側)、一元的に共通サービスを様々な種類のAPIトラフィックに適用出来るため、機能開発やメンテナンスによる工数を最小限に抑えることが可能です。

msuzuki_aag_02.png

このようなAPI Gatewayの仕組みを、世界中に分散配置されたAkamaiエッジサーバに展開したものが "Akamai" API Gateway であり、各地域のAPI利用者に最も近い全てのエッジサーバがAPI Gateway機能として機能します。このアーキテクチャにより得られるメリットの一例として、認証/認可処理の高速化によるユーザ体感速度の向上やAPIオリジンサーバのオフロード、リクエスト数制限によるSLA向上の仕組みの導入が可能である事などがあげられます。また、接続されるAPI端末が増えたりトラフィック増が発生する場合においても、スケーラビリティについては世界最大規模のAkamai Intelligent Platformが担保できる点も大きなメリットの一つと言えます。

msuzuki_aag_03.png

次に、AAGの具体的な設定方法について触れていきたいと思います。

 

API Definition

まず、AAGを利用するためにはAPI Definition (APIの定義)を行う必要があります。Luna Control Centerから「Manage API Definition」を選択し、API Definitionの設定画面で設定を行います。イチから手動でAPIを定義することも可能ですが、SwaggerまたはRAMLからインポートすることも可能です。

また、この画面でAPIとAkamai Delivery Productの配信設定との紐付けや、API Keyの場所の指定などを行います。

msuzuki_aag_04.png

定義したAPIエンドポイントに対して、以下の設定を順に行います。

(1) API Privacy Setting

(2) JSON Web Token (JWT)

(3) Cross-origin resource sharing (CORS)

(4) Caching

(5) GZIP compression

 

(1) API Privacy Setting

APIのKey認証の必要有無を設定します。デフォルトでPublic設定(Key認証無し)ですが、今回は "/pet/{petId}" のAPIリソースに対してPrivate設定(Key認証有り)を適用します。

msuzuki_aag_05.png

(2) JSON Web Token (JWT)

JWTについては後ほど触れます。今回は無効とします。

(3) Cross-origin resource sharing (CORS)

CORSの必要有無を設定します。今回は無効とします。

(4) Caching

APIリソースに対して個別にCache設定が可能です。今回は "/pet/{petId}" のAPIリソースに対して30秒のCacheを設定します。

msuzuki_aag_06.png

(5) GZIP compression

APIレスポンスのGZIP圧縮の設定をします。今回は有効化します。

msuzuki_aag_07.png

設定を保存した後、API DefinitionのActivationを行います。

 

Key And Quotas

次に、Key And Quotas設定を行います。Luna Control Centerから「Manage Key And Quotas」を選択し、Key and Quota Managementの設定画面で設定を行います。API Keyに関してはGUIからランダムに自動生成が可能であり、またXML, JSON, CSVファイルからインポートすることも可能です。

Quotas設定では、リクエストと関連付けされたAPI Key毎に時間あたりのリクエスト数制限を設けることが可能です。今回は1時間当たりのリクエスト数の上限を100までとして設定を行います。また、Debugヘッダの有効化によりQuotas関連の情報(Key単位のリソースリクエスト可能数の残数等)の取得が可能です。

msuzuki_aag_08.png

 

自動生成またはインポートしたAPI Keyを、APIリソースに紐づけます。今回は"/pet/{petId}"のAPIリソースに対してAPI Keyを適用します。

図9.png

ここまでで一通りの基本設定が完了しましたので、次に動作確認をしていきたいと思います。

 

API Keyが有効化されたAPIリソースアクセスの動作確認

APIリソース"/pet/{petId}"に対してリソースリクエストを試みます。API認証Key無しでリクエストを実行すると、HTTP 403でリソースの取得に失敗します。

msuzuki_aag_10.png

ここで、"/pet/{petId}"に関連付けされたAPI Keyを付与してリクエストを実行すると、HTTP 200でリソース取得に成功することが分かります。

msuzuki_aag_11.png

ここでは明記しませんが、適切なAkamai Pragma Headerを付与することでCacheが効いていることや、GZIP圧縮処理がなされている様子、Quotas関連の情報を取得可能です。

 

JSON Web Token (JWT)

AAGはJSON Web Token (JWT)の検証機能を備えており、APIトラフィックの認証/認可の処理をAkamaiエッジサーバで実行することが可能です。API利用者に最も近いエッジサーバでJWT検証を実行することで、高速化によるユーザ体感速度の向上やAPIオリジンサーバのオフロードが見込めます。ここでは具体的にどのように動作するのか見ていきたいと思います。

まず、 https://jwt.io/ で動作確認用のJWTの生成を行います。現状AAGではRS256による署名アルゴリズムに対応しているため、JWTヘッダでRS256の指定をします。公開鍵、秘密鍵はWebサイトより自動的に提供されますが、公開鍵については後ほどAAG設定で利用するため"public.pem"ファイルとしてローカルに保存しておきます。また、動作確認用に適当なClaimsの値を入力します。

msuzuki_aag_12.png

 

次に、Luna Control Centerから「Manage API Definition」を選択し、先に定義したAPIの設定画面に移ります。Clone Versionから新たしいVersionのAPIを作成してからJWTの設定画面に移り、JWT関連の設定(JWTの場所指定、公開鍵のアップロード等)を行います。今回はAPIリソース"/user/{username}"に対してJWTを有効化してから、本API VersionのActivationを行います。

msuzuki_aag_13.pngのサムネイル画像のサムネイル画像

 

JWTが有効化されたAPIリソースアクセスの動作確認

APIリソース" /user/{username}"に対してリソースリクエストを試みます。JWT無しでリクエストを実行すると、HTTP 403でリソースの取得に失敗します。

msuzuki_aag_14.png

ここで、先に生成済みのJWTを付与してリクエストを実行すると、HTTP 200でリソース取得に成功することが分かります。

msuzuki_aag_15.png

 

さいごに

本ブログではAkamaiの持つ分散型Platformを活用したAkamai API Gatewayについてご紹介をさせていただきました。

認証/認可機能をエッジに切り出すことによるユーザ体感速度の向上や、APIオリジンサーバのオフロードを見込める機能となっており、さらにAPI Protectionと組み合わせることでよりセキュアなAPIトラフィックの処理が可能となります。

AAGは今年リリースされたばかりの製品となりますが、今後も機能が拡充される予定となっていますので、今後の展開にご期待いただけると幸いです。

Leave a comment