アクセス制御
API Gatewayおよびアップストリームへのアクセス制御には以下4つの方法がある
1. リソースポリシー
JSON形式のリソースポリシーを定義することで、API Gatewayにアクセスを許可/拒否するリソース・アクセスソース・アクションを指定可能
指定出来るアクセスソースは以下の3種類
・ 任意のAWSアカウントのIAMユーザー
・ アクセス元のIPアドレス
・ 任意のアカウントのVirtual Private Cloud(VPC)またはVPCエンドポイント
(例)"aws:SourceIP"で指定したCIDRブロックからのAPIを拒否するリソースポリシー
{
"Version": "2020-11-30",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": ["192.0.3.0/24", "198/51/100.0/24"]
}
}
}
]
}
2. IAM認証
APIの各要素へのアクセス権限を設定したIAMポリシーを作成し、IAMユーザーやIAMロールに付与することで、APIへのアクセスの制御が可能になる
(※ 対象のAPIメソッドでIAM認証を有効化する必要あり)
3. Lambdaオーソライザー
LambdaオーソライザーというLambda関数を作成することで、認証プロバイダーでの認証結果をもとにAPIへのアクセス制御をメソッド単位で行うことが可能
以下、Lambdaオーソライザーを用いてAPIアクセスを行うフロー
1. 認証プロバイダーで認証を行い、トークンを取得する
2. トークンを含めてAPIリクエストを行う
3. API Gatewayがトークンの値をもとにLambdaオーソライザーで認可を行う
4. 認可の結果をもとにAPI Gatewayがリクエストを許可・拒否する
4. Cognitoオーソライザー
認証プロバイダーとしてCognitoユーザープールを用いることで、認証プロバイダーでの認証結果をもとにAPIへのアクセス制御をメソッド単位で行うことが可能
以下、Cognitoオーソライザーを用いてAPIアクセスを行うフロー
1. Cognitoユーザープールで認証を行い、トークンを取得する
2. トークンを含めてAPIリクエストを行う
3. API Gatewayがトークンの値をもとにCognitoユーザープールで認可を行う
4. 認可の結果をもとにAPI Gatewayがリクエストを許可・拒否する
スロットリング
スロットリング設定を行いリクエスト数を制限することで、アップストリームで処理するリクエスト数を制御することが出来る
- AWSアカウント単位・メソッド単位・APIキー単位で設定が可能
- レート(1秒あたりのリクエスト数)と バースト(リクエストの同時実行数)を設定する
使用量プランとAPIキー
APIキー:API Gatewayの使用量を制限するために発行するアクセスキー
(各APIメソッドでAPIキーを使用する設定にすると、APIメソッドを実行するリクエストにはAPIキーが必須となる)
- APIキーの使用量制限は、使用量プラン という設定項目でスロットリング設定を行い、APIキーを使用量プランに紐付けることで設定可能
- 使用量プランのスロットリング設定では、レート・バーストの他に クォータ(日・週・月あたりのリクエスト数)を設定する
モニタリング
CloudWatch, CloudTrail, X-Rayと連携して監視を行うことが可能
マネージメントコンソール上に標準で用意されている API Gateway ダッシュボードで、各APIの利用状況をステージごとに可視化して確認出来る
標準で以下項目の確認が可能
- API呼び出し
- キャッシュヒット(APIキャッシュが有効の場合のみ)
- キャッシュミス(APIキャッシュが有効の場合のみ)
- レイテンシー
- 統合のレイテンシー
- 4XXエラー・5XXエラーの数