[API Gateway] APIキーと使用量プランを使用してアクセス制限を掛ける

はじめに

API Gatewayにアクセス制限を掛ける方法として、APIキーを使う方法があります。ですが単純にAPIとAPIキーを紐付けるのではなく、「使用プラン」を介してAPIとキーは結びつける形となります。今回はその方法について書いてみたいと思います。

手順

1. API GatewayでAPIを作成する

今回、アクセス制限を掛ける対象のAPIを作成します。

api-gateway-api-key-1

API GatewayのAPI作成画面にてAPI名を入力し「APIの作成」ボタンを押下します。

api-gateway-api-key-2

「アクション」より「リソースの作成」を押下し、リソース名を入力して「リソースの作成」ボタンを押下します。

api-gateway-api-key-3

「id」リソースも追加した後、GETメソッドを追加します。

api-gateway-api-key-3-1

統合レスポンスの本文マッピングテンプレートに返却したいjsonを定義します。

api-gateway-api-key-4
api-gateway-api-key-5

作成したAPIをデプロイします。

$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100
{
id: 100,
name: "xxxx"
}

curlでAPIを呼び出し、レスポンスが返ってくることを確認します。

2. APIキーを作成する

api-gateway-api-key-6
api-gateway-api-key-7

画面左の「APIキー」より、APIキーを作成します。

api-gateway-api-key-8

「APIキー」横の「表示」リンクをクリックすると表示される値をコピーしておきます。(後ほどcurlによる動作確認時にヘッダーで渡すAPIキーの値となります。)

3. 使用プランを作成する

api-gateway-api-key-9
api-gateway-api-key-10

画面左の「使用プラン」より、使用プランを作成します。

api-gateway-api-key-11
api-gateway-api-key-12

「APIステージの追加」ボタンを押下し、APIをステージを選択してチェックボタンを押下します。

4. APIキーを使用プランに追加する

api-gateway-api-key-13
api-gateway-api-key-14

使用プランの「APIキー」タブを選択し、先に作成したAPIキーを入力してチェックボタンを押下します。

5. アクセス制限を掛ける

api-gateway-api-key-15

API Gatewayで作成したAPIのGETメソッドを選択し、「APIキーの必要性」を「true」に変更します。変更後、再度APIをデプロイします。

動作確認

curlでAPIを呼び出してみます。

$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100
{"message":"Forbidden"}

アクセスが拒否されました。

先に取っておいたAPIキーを付けて、呼び出してみます。APIキーはヘッダーに「x-api-key」で渡します。

curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100 --header "x-api-key:xxxxxxxxxxxxxxxxxxxxxxxx"
{
id: 100,
name: "xxxx"
}

今度は無事、取得したいレスポンスを確認することができました。

まとめ

APIキーを用いてのAPI Gatewayのアクセス制限の方法についてでした。何かの役に立てば幸いです。