API GatewayでAPIキー認証付きのHTTP APIを作る

やりたいこと

  • 以下の記事で作成したAPIは誰でも呼び出せる状態なので、ある特定のクライアントからしか呼び出せないように認証をかける

hkou.hatenablog.com

serverless.ymlを編集する

providerの項目にAPIキーと使用量プランの記述を追加する。

  • APIキー
    • とりあえず名前だけ指定
  • 使用量プラン
    • レート
    • バースト
    • クォーター
      • 1 日あたり 5,000 リクエスト数
provider:
  name: aws
  runtime: nodejs6.10
  region: ap-northeast-1
  apiKeys:
    - myFirstKey
  usagePlan:
    quota:
      limit: 5000
      offset: 0
      period: DAY
    throttle:
      burstLimit: 200
      rateLimit: 100

上記で設定したAPIキーを利用するAPIに対してprivate: trueを指定する。

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: api/hello
          method: get
          private: true
  add:
    handler: handler.add
    events:
      - http:
          path: api/add
          method: post
          private: true

デプロイする

deployコマンドでデプロイする。
作成されたAPIキーの値が出力されるので控えておく

sls deploy -v

(省略)

service: test-service
stage: dev
region: ap-northeast-1
stack: test-service-dev
api keys:
  test-api-key: (APIキーの値)
endpoints:
  GET - https://(URL).ap-northeast-1.amazonaws.com/dev/api/hello
  POST - https://(URL).ap-northeast-1.amazonaws.com/dev/api/add

動作確認

APIキーなしで呼び出す

403 ForbiddenがレスポンスされAPIが呼び出せなくなった。

f:id:hkou:20180419215925p:plain

APIキーありで呼び出す

APIキーをヘッダーに付加するとちゃんと呼び出せる。

f:id:hkou:20180419220121p:plain