Apigeeを使用してAPIのアクセス制御を実装しよう

Author
iwasawa
Lv:7 Exp:24947

最近GCP始めたエンジニアです。
主に機械学習系APIを使用してアプリを作ってます。
趣味はボードゲームです。

API開発していて面倒な物の一つにアクセス制御があります、バックエンド側にアクセス制御のコードをあまり書きたく無いというのもありますが、Apigeeを使って任せてしまえる部分は任せてしまいましょう。

Apikeyによるアクセス制御

まずApigeeでApikeyを使ったアクセス制御の方法を解説します。
以下のような構成のものを作成していきます。

構成図

ApikeyというのはそのままですがAPIの鍵です。
この鍵が無いリクエストは弾き、鍵を持っているリクエストのみ受け付けるように実装していきます。

APIProxyの作成

まずApigeeEdgeでAPIProxyを作成しましょう
左側のDEVELOPタブからAPI Proxiesに移動し、右上の[+Proxy]で新しいAPIProxyが作成できます。

APIProxy作成1

通常のReverseProxyで作成します。
APIProxy作成2

プロキシーの名前やパス、バックエンドAPIを指定します。
バックエンドAPIとして、ExistingAPIはGO言語で作成されたHTTPサーバを動かしていますのでそちらを指定しています。
ただ「Hello World」を返すだけのHTTPサーバです。
APIProxy作成3

セキュリティ設定画面です。
一旦通常APIが疎通するか確認したいため、Pass throughを選択(ApiKeyを選択するとApikey用の設定がほぼ完了します)
APIProxy作成4

次に、VirtualHostsの設定です。defaultのみにチェックを入れます。

APIProxy作成5

最後に、デプロイ先にtestを指定します。

APIProxy作成6

以上で、APIProxyの作成が終了です。

Apikeyでのアクセス制御の実装

Apikeyポリシーの追加

APIの疎通を確認したいためTRACEタブへ移動し、URLをコピーしサーバまでリクエストが届いているか確認します。
リクエスト確認

きちんとレスポンスが帰ってきています。
ではDEVELOPタブへ移動しProxyEndpointsのPreFlow内にVerify Apikeyポリシーを作成していきます。

ポリシー追加1

Request側の[+Step]を押し、[Verify API Key]を選択して[Add]してください
Apikeyの検証自体は、このポリシーを追加するだけで完了します。
追加した段階でAPIにリクエストを投げて見るとApikeyが無いというエラーが帰ってくる事が確認できると思います。

ポリシー追加2

続いて[Assign Message]も[Add]します

ポリシー追加3

VerifyAPIKeyを確認するとデフォルトではAPIKeyはリクエストのQueryParam内の[apikey]を参照する設定になっています。

ポリシー追加4

バックエンドとしてはQueryParamのapikeyを処理するロジックは持っていないため、存在していてもしょうがないためAssignMessageでQueryParamを削除してしまいましょう。
デフォルトでは様々な物が記述されていますが、[QueryParam]を削除したいだけなので[Remove]タグの[QueryParam]部分を残して他の部分を削除しましょう。
そして削除するパラメータ名を[apikey]に変更します。

ポリシー追加5

以上でApiKeyアクセス制御の設定は終了です

ApiKeyの発行

アクセス制御自体は作成出来ましたが、Apikeyが無ければ永遠にアクセス出来ないままです
Apigee上からApikeyを発行しましょう

まずAPI Products の作成です
左側のタブから[PUBLISH]を選択し、[API Products]に移動しましょう
右上の[+API Product]でAPIProductsを作成しましょう

プロダクト作成1

[Name]と[Display name]を設定し、[Access]にはPrivateを指定し、[API proxies]に先ほど作ったAPIProxyを追加します。とくにPathの指定はしなくて良いです

プロダクト作成2

続いてDevelopersの登録です。
各項目を埋めて作成してください。

Developers登録

最後にAppsの登録です。
[Developer]の選択に先ほど登録したDeveloperを使用
[Credentials]には[Duration 30 min]を指定
[Product]に先ほど登録したAPI Productsを追加し、Appを作成します。

Apps登録

作成したAppの[Credentials]配下に[Key]が作成されているのでコピーしてください
こちらがApiKeyになります。

ApiKeyを使ったAPI認証のテスト

作成したApiProxyに移動してTRACEタブへ移動してください
緑色の[Start Trace Session]を押して赤色になったらテストを開始できます。

Trace

まずApikeyをつけずにリクエスト

Apikey無しリクエスト
Apikey無しTrace

きちんと動作しているようですね
ApigeeがApikeyが無いためリクエストを弾いてバックエンドまで届いていない事がわかります

続いて先ほどコピーしたApikeyをつけてリクエストしてみます。
URLの最後に[?apikey={自分のApikey}]を追記してリクエストを送ります。

Apikey付きリクエスト
Apikey付きTrace

レスポンスに[hello world]が帰ってきました。

TRACEを確認しても、Apikeyのポリシーを超えてきちんとバックエンドまでリクエストが届いているのが分かります。

以上でApikeyでのアクセス制御の実装が完了しました。

最後に

いかがだったでしょうか?

自分で作成したAPIに簡単にアクセス制御の機能をつける事が出来ました。
他にも、
・JWTサーバを簡単に作成
・バックエンドに送るリクエストの内容の変更
・APIの呼び出しに関するアナリティクス

といったような、API開発に関する様々な機能が充実しています。

皆さんもApigeeを使ってAPI開発を捗らせましょう!

次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます