Amazon API GatewayでAPIキー認証を設定する

2015.07.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
AWS Summit NewYorkで発表&リリースされたAmazon API Gatewayをいろいろ触っています。API Gatewayの機能の一つとして、認証機構の追加があります。今回はAPI Gatewayがサポートする認証の一つとして、APIキー認証を紹介してみます。

APIキー認証とは

API GatewayのAPIキー認証は非常にシンプルで、所定のキー(文字列)を所定HTTPヘッダ(x-api-keyヘッダ)に含めたリクエストであればアクセス許可、無ければアクセス拒否とする機能です。

APIキーは、API Gatewayで生成・管理されるようになっており、セキュアな運用が可能です。

前提の構成

以下の記事のセットアップが完了している状態です。

greetリソースのGETメソッドにLambdaバックエンドで{"message":"Hello from AWS Lambda!"}レスポンスが返ってくる、シンプルな構成です。MyTestStageステージでデプロイしているので、以下のエンドポイントにアクセスします。

https://XXXXXXXXX.execute-api.us-east-1.amazonaws.com/MyTestStage/greet

apigw-auth01

では、このエンドポイントにAPIキー認証を追加してみます。

APIキーの生成

API GatewayではAPIキーを生成して管理する機能があります。API Gatewayの管理画面のメニューから[APIs] - [API Keys]をクリックします。

apigw-auth02

[Create API Key]をクリックし、任意のキー名(今回は「My api key」)を入力、[Enabled]のチェックをオンにして[Save]ボタンをクリックします。

apigw-auth03

これでAPIキーが生成され、[API key]で確認できます。まだこの状態では、ステージ(API Gatewayのエンドポイントに紐付く単位)に関連付けされていないため、[API Stage Association]でAPI(今回は「HelloApiGateway」)とStage(今回は「MyTestStage」)を選択し、[Add]ボタンをクリックします。

apigw-auth04

以下のようになっていればOKです。

apigw-auth05

APIキー認証の有効化

では、APIキー認証を有効化しましょう。APIキー認証は、メソッド毎の実行設定(Method Execution)のMethod Requestのオプションで設定します。メニューの[APIs]からAPI「HelloApiGateway」を選択、画面左のResourcesから/-/greet-GETをクリックし、[Method Request]リンクをクリックします。

apigw-auth06

[API Key Required]は既定でfalseなので、右にある鉛筆アイコンをクリックしてtrueに変更、チェックのアイコンをクリックして決定します。

apigw-auth07

Method Executionの設定は、ステージを更新(Deploy)してエンドポイントに反映します。左上の[Deploy API]ボタンをクリックし、ステージを選択、[Deploy]ボタンで実行します。

apigw-auth08

これで反映されました。

動作確認

では、実際にエンドポイントにアクセスして動作を確認してみましょう。今回はコマンドラインツールのcurlコマンドを利用します。まずは、APIキーなしでアクセスしてみます。

$ curl https://XXXXXXXXX.execute-api.us-east-1.amazonaws.com/MyTestStage/greet
{"message": "Not able to access resource."}
$

エラーメッセージが返ってきていますね。では、APIキーを付与したリクエストで再度アクセスしてみましょう。API GatewayのAPIキーは、リクエストヘッダx-api-keykey:<キー文字列>の形式で指定します。

$ curl https://XXXXXXXXX.execute-api.us-east-1.amazonaws.com/MyTestStage/greet \
  --header 'x-api-key:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
{"message":"Hello from AWS Lambda!"}
$

レスポンスが返ってきました!

まとめ

API GatewayでのAPIキー認証を試してみました。認証機構のないAPIサービスに後付けでセキュア認証を取り入れる、有効な利用方法だと思います。

参考URL