sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

API Gateway の API キーを理解した(気になった

気づけば 1 ヶ月もブログ書いてませんでした、那須です。

前回は完全に思いつきで AWS API オープンなるものを作ってみました。

nasrinjp1.hatenablog.com

で、せっかく作ったのでちょっと Facebook に投稿して感触どーかなーと思ってたら、河村先生からありがたいお言葉をいただきました!

f:id:nasrinjp1:20191008204407p:plain

API キー…とは?
と思いましたが、いい機会なので API Gateway をもっとよく知るために勉強しようと思いまして、実際に実装してみました。

河村先生と「飲みに行こう!」と話したので11月末までには行こうと思います。もし一緒に行きたい人いたら行きましょう。

 

そもそも API キーとは?

正しい API キーをつけてアクセスしてきたものだけを許可する仕組みがあって、それに使うキーが API キーです。なんか日本語変ですがイメージは伝わったんじゃないでしょうか?

ま、いつもの通り、クラスメソッドさんのブログに頼りましょうw

dev.classmethod.jp

 

こないだ作った APIAPI キー認証をつけてみる

まずは API キーを作成します。
f:id:nasrinjp1:20191008205333p:plain

API キーの名前を決めて、キーを自動生成するか自分で指定するか選びましょう。私は自動生成にしました。
f:id:nasrinjp1:20191008205343p:plain

次に使用量プランを作成します。使用量プランは、この API キーを使うにあたって無制限に使えるのかある程度制限をつけるのかを決めるものです。このプランに API キーを紐付けていきます。ここでは無制限にしましたが、必要に応じてスロットリングとクオータを有効にして値を指定しましょう。
f:id:nasrinjp1:20191008205353p:plain

作成した使用量プランに API キーを追加します。API キータブで API キーを使用量プランに追加を押し、先程作成した API キーを指定しましょう。
f:id:nasrinjp1:20191008205419p:plain

詳細タブでは、関連付ける API とステージを指定します。これで API と使用量プランと API キーが関連付けられました。
f:id:nasrinjp1:20191008205443p:plain

対象の API で、API キーの必要性を true に変更します。これでこの API にアクセスするには API キーが必要になりますよ。
f:id:nasrinjp1:20191008205322p:plain

最後に API をデプロイして設定を反映させましょう。これで設定は完了です。簡単ですね。
f:id:nasrinjp1:20191008205432p:plain

 

確認してみましょう

まず WSL でアクセスしてみます。API キーをつけずにアクセスすると {"message":"Forbidden"} と出てアクセスできないことが確認できました。API キーをつけてアクセスすると、想定通りのレスポンスが返ってきました。

$ curl https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/rdp_control/open
{"message":"Forbidden"}
$ curl https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/rdp_control/open --header 'x-api-key:tekitounaapikeydayo'
"OK"

Linuxmac で確認しているブログが多いので、参考までに PowerShell での確認方法も書いておきます。普通に Invoke-RestMethod でアクセスするだけですけどね。API キーをつけない場合は、{"message":"Forbidden"} が返ってきてエラーになりました。API キーをつけると、想定通りのレスポンスが返ってきましたね。

PS C:\> Invoke-RestMethod https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/rdp_control/open

Invoke-RestMethod : {"message":"Forbidden"}
発生場所 行:1 文字:1
+ Invoke-RestMethod https://hogehoge.execute-api.ap-northeast-1.amazo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod]、WebExce
    ption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
PS C:\> Invoke-RestMethod https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/rdp_control/open -Headers @{'x-api-key'='tekitounaapikeydayo'}
OK

 

使用状況も確認できますよ

使用量プランの API キータブで、各 API ごとに使用状況の確認ができます。
f:id:nasrinjp1:20191008210712p:plain

さきほど WSL と PowerShell でそれぞれ 1 回ずつアクセスしたので、計 2 回のリクエストが記録されていますね。
f:id:nasrinjp1:20191008210721p:plain

 

最後に

今思えばしがないネットワークエンジニアから始まって SAP もかじり、AWS のインフラエンジニアになって、未熟ながらもなぜか今 API を作っている自分にちょっと不思議な感覚が出てきました。AWS に限らずクラウドを使うと本当にインフラとかアプリとかの垣根って低くなりますね。だからこそ面白いのかもしれません。

というわけで、これからも知らないことをガンガン知ろうとするように生きていこうと思いました。