Amazon API Gatewayのアクセス制限・認証のまとめ

3 min read読了の目安(約3300字

2021年2月時点の情報です。今後アップデートされる可能性があります。
REST API と HTTP API におけるアクセス制限・認証方法をまとめました。WebSocket API は本記事の対象外です。


Amazon API Gateway(以下、API Gateway)はデフォルトではフルオープンで誰でもアクセスできてしまいます。エンドユーザやシステムからのアクセスに制限したい場合にいくつかの方法があるのでまとめてみました。

REST API と HTTP APIについて

その前に REST API と HTTP API の違いについて簡単に述べます。

REST API

  • API Gateway リリース当初からある API 方式
  • HTTP API よりアクセス制限・認証方法は多い
  • 多機能である反面、デプロイが面倒

HTTP API

  • 後発の API 方式
  • REST API よりできることが少ないが、高速でコストも安い(70%ぐらい安い)
  • 機能が少しずつ増えているので REST API しかできないことが減っていくかも
  • 作成時点でデフォルトステージがあってデプロイが楽、コンソールが見やすい
  • Internal ALB への統合ができる

リソースポリシー

JSON でポリシーを規定することでアクセスを制御する仕組みです。リソースポリシーを設定することで以下の制御ができます。

  • AWS アカウント、IAM ユーザ、IAM ロール
  • IP アドレス、CIDR
  • VPC、VPC エンドポイント

Pros

Cons

  • HTTP API は対応していない

AWS WAF との統合

AWS WAF と API Gateway を連携することでアクセス制御します。AWS WAF で行えるアクセス制限が可能です。

  • IP アドレス、CIDR
  • HTTP ヘッダ、メソッド、クエリストリング、URI、リクエストボディ

Pros

  • HTTP ヘッダやリクエストボディなどリソースポリシーでは対応できない制御が可能
  • XSS など脆弱性を突いた攻撃から守ることができる

Cons

  • HTTP API は対応していない

クライアント証明書(相互 TLS 認証)

API Gateway 呼び出し側に SSL 証明書を入れることで、端末単位でアクセス制限ができます。

Pros

  • クライアント側はクライアント証明書と秘密鍵を指定すればいいので認証としては簡単

Cons

  • クライアント証明書の発行、失効、更新などの管理が面倒

AWS Lambda オーソライザー

認証用の Lambda 関数によるアクセス制御を行う方法です。API Gateway からリクエストを受け取る度に Lambda 関数が呼ばれ、何かしらの認証処理を行います。

Pros

  • REST API、HTTP API ともに対応している
  • Lambda 関数で認証ロジックを実装するため自由度が高い

Cons

  • オーソライザー用の Lambda 関数を実装する必要がある
  • 認証の成功・失敗に関わらずリクエストされる度に Lambda 関数が呼ばれるため、AWS Lambda のコストが増える。キャッシュを有効化することで呼び出し回数を減らすことはできる

IAM 認証

API Gateway の呼び出しを IAM に限定することができます。設定やアクセス方法は以下の記事をご参照ください。

[サンプルコード付き]IAM認証をかけたAmazon API Gatewayにアクセスする

Pros

  • REST API、HTTP API ともに対応している
  • IAM 側で制御できるため管理しやすい

Cons

  • AWS 以外の環境では IAM ユーザを作成して AWS アクセスキーを発行する必要がある

Cognito

Amazon Cognito のユーザプールを利用して API Gateway にアクセスできるユーザを制御できます。

Pros

  • REST API、HTTP API ともに対応している(HTTP API の場合は JWT オーソライザーとしての使用)
  • Facebook、Google などによるアカウントログインや OpenID Connect による認証ができる。モバイルアプリに向いている

Cons

  • 上に書いてある認証で済むならそれにこしたことはない

参考 URL