#目的
API Gatewayの設定を把握し、必要に応じて使用できるようになること
#画面キャプチャ(一部)
#各種設定について
##リソース
#####<APIのリソース設定>
リソース、メソッド(GET,POST,DELETE・・・)、メソッドのデプロイ(デプロイするとURLでアクセス可能となる)
#####<メソッドリクエスト>
リクエストに認証が必要か、どのクエリパラメータを受け付けるか、APIキーが必要か
※パラメータを必須し、そのパラメータがないと、バックエンドに行く前にエラーにする
※各パラメータごとにキャッシュURLに含むか設定できる。(ここで設定しても、最終的にステージの設定でキャッシュを有効にするかどうか設定する必要あり)
#####<統合リクエスト>
- 統合タイプ→Lambda関数・http・モック・AWSサービス・VPCリンク
- Lambdaプロキシ統合の使用→APIGatewayへアクセスが来た際のhttpヘッダー・ボディをそのまま、バックエンドのプログラムへ転送。
- デフォルトタイムアウト→デフォルトは29秒、バックエンドのタイムアウトがこの設定より長いと意味なし。
- マッピングテンプレートなど→ヘッダ、ボディ、パラメータなどをバックエンドに渡す際に変換して渡す。
#####<統合レスポンス>
レスポンスの文字列の正規表現による、httpステータス(※4メソッドレスポンス)とのマッピング、レスポンス内容の変換
#####<メソッドレスポンス>
httpステータス・レスポンスヘッダー・content-type・モデルの設定 ※content-type未指定の場合はデフォルトのapplication/json
##ステージ
ステージング設定(開発環境、本番環境で分けるなど)、また各ステージごとの詳細設定
(キャッシュ、スロットリング、WAF、クライアント証明書、ログ出力、X-RAY、ステージ変数[環境変数]、SDKの作成、エクスポート、デプロイ[バージョン管理]、Canary[A/Bテスト用、新バージョン・旧で振り分ける])
##オーソライザー
アクセス制限(lambdaを使用してのIP/UA制限など、またはCognito認証)
※Cognito認証→クライアントAPI実行時にログイン認証を行い、IAMロールを使用して権限を払い出す仕組み
クライアントにIAMユーザーのアクセスキーやシークレットキーを持たさなくていい。
##ゲートウェイのレスポンス
httpステータスごとの戻り値を設定
##モデル
リソースのメソッドリクエスト、メソッドレスポンスで使用。
設定しただけでは何も変わらない、ステージ>SDKの生成時に型変換として使われる。
https://qiita.com/toshihirock/items/9dfc982a90ab2141f048
##リソースポリシー
アクセス制限(AWSアカウント、IP、UA、VPCなど)
※オーソライザーより設定が容易(リソースポリシーで事足りる制限ならこちらがいい)
##ドキュメント
APIの各設定のドキュメント(説明)を記載できる。APIの設計書をエクスポートするときの説明用。
##ダッシュボード
解析(API呼び出し回数、レイテンシーなど)
##設定
API キーのソース(X-API-Key ヘッダーにのせるか、オーソライザーのlambdaの戻り値にのせるか)・コンテンツのエンコード・バイナリメディアタイプの設定
##使用量プラン
APIキーごとにスロットリングの設定を変える(レート、バースト)※通常会員とプレミア会員で差をつけるなどに使用可能
##APIキー
使用量プランに紐づける、APIキーの設定 ※設定したあとに、リソースのAPIキーが必要かの設定をしないと有効にならない
##カスタムドメイン名
ドメイン設定
##クライアント証明書
バックエンドのHTTPと通信する場合の証明書
##VPCリンク
VPC内 HTTP (S) リソースへのアクセスを、一般のインターネットを経由しないようにする。
##設定
CloudWatch ログのロールの設定する。この設定をしないと、ステージのログ出力の有効化はできない。
※必要なポリシーは、”AmazonAPIGatewayPushToCloudWatchLogs”
#その他
###ajaxからAPIへアクセスする場合
CORSの有効化が必要
※クロスドメインになるため
###アクセスを制限する方法
・WAF
・APIキー
・オーソライザー(lambda, cognito)
①lambda→IP、AUなど
②cognito→ログイン認証
・リソースポリシー
→IP、AU、IAM、VPCなど
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-resource-policies-aws-condition-keys.html
・リクエストの検証
①クエリパラメータ
※必須パラメータがないとはじくなど
②ヘッダー
③本文
※簡単にできるIP制御は、リソースポリシーかな。
※サンプル(リソースポリシーのIPブラックリスト)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:【アカウントID】:【リソースID】/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "【アクセスを拒否するIP】"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:【アカウントID】:【リソースID】/*"
}
]
}