API開発していて面倒な物の一つにアクセス制御があります、バックエンド側にアクセス制御のコードをあまり書きたく無いというのもありますが、Apigeeを使って任せてしまえる部分は任せてしまいましょう。
Apikeyによるアクセス制御
まずApigeeでApikeyを使ったアクセス制御の方法を解説します。
以下のような構成のものを作成していきます。
ApikeyというのはそのままですがAPIの鍵です。
この鍵が無いリクエストは弾き、鍵を持っているリクエストのみ受け付けるように実装していきます。
APIProxyの作成
まずApigeeEdgeでAPIProxyを作成しましょう
左側のDEVELOPタブからAPI Proxiesに移動し、右上の[+Proxy]で新しいAPIProxyが作成できます。
通常のReverseProxyで作成します。
プロキシーの名前やパス、バックエンドAPIを指定します。
バックエンドAPIとして、ExistingAPIはGO言語で作成されたHTTPサーバを動かしていますのでそちらを指定しています。
ただ「Hello World」を返すだけのHTTPサーバです。
セキュリティ設定画面です。
一旦通常APIが疎通するか確認したいため、Pass throughを選択(ApiKeyを選択するとApikey用の設定がほぼ完了します)
次に、VirtualHostsの設定です。defaultのみにチェックを入れます。
最後に、デプロイ先にtestを指定します。
以上で、APIProxyの作成が終了です。
Apikeyでのアクセス制御の実装
Apikeyポリシーの追加
APIの疎通を確認したいためTRACEタブへ移動し、URLをコピーしサーバまでリクエストが届いているか確認します。
きちんとレスポンスが帰ってきています。
ではDEVELOPタブへ移動しProxyEndpointsのPreFlow内にVerify Apikeyポリシーを作成していきます。
Request側の[+Step]を押し、[Verify API Key]を選択して[Add]してください
Apikeyの検証自体は、このポリシーを追加するだけで完了します。
追加した段階でAPIにリクエストを投げて見るとApikeyが無いというエラーが帰ってくる事が確認できると思います。
続いて[Assign Message]も[Add]します
VerifyAPIKeyを確認するとデフォルトではAPIKeyはリクエストのQueryParam内の[apikey]を参照する設定になっています。
バックエンドとしてはQueryParamのapikeyを処理するロジックは持っていないため、存在していてもしょうがないためAssignMessageでQueryParamを削除してしまいましょう。
デフォルトでは様々な物が記述されていますが、[QueryParam]を削除したいだけなので[Remove]タグの[QueryParam]部分を残して他の部分を削除しましょう。
そして削除するパラメータ名を[apikey]に変更します。
以上でApiKeyアクセス制御の設定は終了です
ApiKeyの発行
アクセス制御自体は作成出来ましたが、Apikeyが無ければ永遠にアクセス出来ないままです
Apigee上からApikeyを発行しましょう
まずAPI Products の作成です
左側のタブから[PUBLISH]を選択し、[API Products]に移動しましょう
右上の[+API Product]でAPIProductsを作成しましょう
続いてDevelopersの登録です。
各項目を埋めて作成してください。
最後にAppsの登録です。
[Developer]の選択に先ほど登録したDeveloperを使用
[Credentials]には[Duration 30 min]を指定
[Product]に先ほど登録したAPI Productsを追加し、Appを作成します。
作成したAppの[Credentials]配下に[Key]が作成されているのでコピーしてください
こちらがApiKeyになります。
ApiKeyを使ったAPI認証のテスト
作成したApiProxyに移動してTRACEタブへ移動してください
緑色の[Start Trace Session]を押して赤色になったらテストを開始できます。
まずApikeyをつけずにリクエスト
きちんと動作しているようですね
ApigeeがApikeyが無いためリクエストを弾いてバックエンドまで届いていない事がわかります
続いて先ほどコピーしたApikeyをつけてリクエストしてみます。
URLの最後に[?apikey={自分のApikey}]を追記してリクエストを送ります。
レスポンスに[hello world]が帰ってきました。
TRACEを確認しても、Apikeyのポリシーを超えてきちんとバックエンドまでリクエストが届いているのが分かります。
以上でApikeyでのアクセス制御の実装が完了しました。
最後に
いかがだったでしょうか?
自分で作成したAPIに簡単にアクセス制御の機能をつける事が出来ました。
他にも、
・JWTサーバを簡単に作成
・バックエンドに送るリクエストの内容の変更
・APIの呼び出しに関するアナリティクス
といったような、API開発に関する様々な機能が充実しています。
皆さんもApigeeを使ってAPI開発を捗らせましょう!