AWS API Gateway 設定を調べる

#目的
API Gatewayの設定を把握し、必要に応じて使用できるようになること
#画面キャプチャ（一部）
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/64e424ff-086a-aa6f-9466-ec1e44b2e3cc.jpeg)
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/d9cab56c-4b87-b6c1-5c5d-a727d9fac50f.jpeg)
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/680b0ed6-c041-d959-feb1-35f7461f8ab1.jpeg)

#各種設定について
##リソース
#####＜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】/*"
        }
    ]
}
```