Amazon API GatewayでAPIキー認証を設定する
ども、大瀧です。
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
では、このエンドポイントにAPIキー認証を追加してみます。
APIキーの生成
API GatewayではAPIキーを生成して管理する機能があります。API Gatewayの管理画面のメニューから[APIs] - [API Keys]をクリックします。
[Create API Key]をクリックし、任意のキー名(今回は「My api key」)を入力、[Enabled]のチェックをオンにして[Save]ボタンをクリックします。
これでAPIキーが生成され、[API key]で確認できます。まだこの状態では、ステージ(API Gatewayのエンドポイントに紐付く単位)に関連付けされていないため、[API Stage Association]でAPI(今回は「HelloApiGateway」)とStage(今回は「MyTestStage」)を選択し、[Add]ボタンをクリックします。
以下のようになっていればOKです。
APIキー認証の有効化
では、APIキー認証を有効化しましょう。APIキー認証は、メソッド毎の実行設定(Method Execution)のMethod Requestのオプションで設定します。メニューの[APIs]からAPI「HelloApiGateway」を選択、画面左のResourcesから/
-/greet
-GET
をクリックし、[Method Request]リンクをクリックします。
[API Key Required]は既定でfalse
なので、右にある鉛筆アイコンをクリックしてtrue
に変更、チェックのアイコンをクリックして決定します。
Method Executionの設定は、ステージを更新(Deploy)してエンドポイントに反映します。左上の[Deploy API]ボタンをクリックし、ステージを選択、[Deploy]ボタンで実行します。
これで反映されました。
動作確認
では、実際にエンドポイントにアクセスして動作を確認してみましょう。今回はコマンドラインツールの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-key
でkey:<キー文字列>
の形式で指定します。
$ 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サービスに後付けでセキュア認証を取り入れる、有効な利用方法だと思います。