血と汗となみだを流す

クラウドエンジニアになるための修業の場

API Gatewayをはじめよう①(Blackbeltを見て、API Gatewayがどんなことができるか知る)

この記事は何?

  • API Gatewayの奥が深すぎて、全てを理解するには時間が掛かりそうだから少しずつ触って吸収していくためのoutputです。
  • 果たしてこの順番でやっていくのが正しいかわかりませんが、一通りやったらどの順番が良いか改めてまとめ直す予定です。

まず最初に

  • Blackbeltを見て、API Gatewayがどんなことができるかを知りました
  • しかし2016年の資料なので、現時点(2018年)の仕様とは異なるかも
    • SlideShare中はACM未対応となっているが、現在は対応しているなど

Blackbeltから学んだ「API Gateway」とは

  • API管理の課題を解決してくれる
    • APIのバージョン管理
    • モニタリング
    • 管理とマネタイズ
    • 認証とアクセス権限の管理
    • トラフィック管理
    • アタックからの保護
    • インフラの管理とメンテナンス
  • responseをキャッシュしてくれる(TTL3600s)
  • 内部的にはCloudFrontを使っている
  • 「Usage Plan」という、外部にAPIを提供するときの無料/有料プランみたいなのが作れる
    • APIキーの所有者が使用できるリソースを制限するなど
    • 秒間リクエスト/バーストの許容/リクエスト可能数など
  • 認証・認可(※後述)
  • request/responseを他のデータ形式に変換できる
    • レガシーなbackendからのレスポンスをフィルタしたり、プライベートな情報を削除したり
    • GETリクエストのクエリストリングを元にPOSTデータを作る
    • LambdaからJSONを受け取りXMLに変換
    • Mockを作って、固定レスポンスを返すなど
  • API Gatwayと通信するためのSDKを生成できる
  • API定義をimport/exportできる
    • Swagger V2.0定義ファイルをサポート
  • backendにLambdaやEC2などと通信できる

価格

  • $4.25/100万リクエス
  • キャッシュのプロビジョニング料金
    • 何GiBキャッシュするかをコミットしておく

認証・認可

  • AWS Signature Version 4
    • IAMポリシーをアタッチしたIAMユーザのcredentialを使ってリクエストに署名
    • CognitoとSTSのようなtemp credentialを利用するとIAMロールと紐づく形で認証・認可が行われる
    • API Gatewayが生成するクライアントとSDKを利用する場合は自動的に利用可能
  • Custom Authorizer
    • OAuthやSAMLなどのベアラートークンを用いてAPIへのアクセウsを管理
    • lambdaファンクションを用いてAuthirozationヘッダの値を検証する
    • backendの呼び出し前にトークンの検証を行うファンクションを呼び出す
  • Cognito User Pools
    • User Poolsで認証を行う
    • 取得したIDトークンを基にAPIコール
  • いずれもメソッド単位で指定可能

次は

  • API Gatewayを構成するリソース郡を見ていく