🔐

API GatewayのAPIキー設定方法

2024/03/14に公開

はじめに

APIキーを使用することで、APIキーを持っているユーザーのみがAPIへのアクセス権を持つことになります。
つまり、APIにアクセスできるクライアントを限定することができ、不正なアクセスや悪意のある利用を防ぐことができます。

APIキーの作成

APIキーの作成を選択、

名前を入力し、APIキーは自動生成を選択されていることを確認したら保存を押してください。

作成されたAPIキーはここからコピーすることができます。

APIの設定を変更

APIの設定を変更し、リクエストにAPIキーを必須にしてください。
メソッドリクエストを選択、

編集を選択してください。
ちなみに現在はAPI キーは必須ですの箇所がFalseになっていると思います。

API キーは必須ですを選択し、保存を押してください。
この後に再度APIをデプロイしてください。

使用量プランの作成

使用量プランに対してAPIキーを関連付けることで、APIキーを使用したアクセスが可能になります。
使用量プランでは呼び出し回数に制限をかけすことができます。

使用量プランを作成を選択、

内容を入力したら、使用量プランの作成を押してください。

使用量プランを追加

使用量プランに追加を選択、

先ほど作成したプランを選択し、保存を押してください。

APIキーと使用量プランを関連付ける

APIキーの追加を選択

APIキーは今回作成したものを追加したらAPIキーの追加を押してください。

ステージと使用量プランを関連付ける

API ステージを追加を選択、

APIステージを選択したら、使用量プランに追加を押してください。

APIキーをリクエストヘッダに付ける

APIキーを有効にした場合、リクエストを送信する際に、APIキーをリクエストヘッダーまたはクエリパラメータとして適切に含める必要があります。

    const response = await fetch(endPoint, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'x-api-key': apiKey, //追加
        },
        body: requestBody,
      });

リクエストボディがないというエラーが出た場合

いろんな解決法を試したがそれでもエラーが解決しないという場合、下記のように一行空いているだけでエラーになりますので確認してみてください。

    const response = await fetch(endPoint, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'x-api-key': apiKey, //追加
        },

        body: requestBody,
      });

参考にさせていただきました

https://qiita.com/baikichiz/items/ed787c5c79059213401e
https://dev.classmethod.jp/articles/try-api-gateway-usage-plan/

終わりに

何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉

Discussion