3
1

API gateway (Cognito Authorizer) を使ったM2M認証

Last updated at Posted at 2024-02-21

実現したいこと

  • API gatewayでユーザーログイン認証ではなく、マシン間 (machine to machine:M2M) 認証を行いたい。
  • 接続元クライアントごとに利用できるAPIを制御したい

APIキーと使用量プランは認証には使えない

API Gatewayには、APIキーと使用量プランという機能があり、APIキーをもつクライアントのみがアクセス可能なAPIを作成でき、APIリクエストのスロットリングができます。
しかし、公式docにもある通り認証認可には別の方法を考える必要があります。

API キーを、API へのアクセスを制御するための認証または承認に使用しないでください。

Amazon Cognito の Client Credentials Grant を利用する方法

公式doc上にて、API gatewayでのアクセス制御方法として、IAMロールとポリシー、Lambda オーソライザー、Amazon Cognito ユーザープールなどが記載されています。

Amazon Cognito ユーザープールというとユーザーログイン認証に利用するイメージが強いですが、Cognitoを認可サーバとして利用して、M2M認証を行う(OAuth2.0のClient Credentials Grantを利用)方法があります。

仕組み

Amazon Cognito ユーザープール (OAuth 2.0 Client credentials grant) と Amazon API Gateway (Cognito Authorizer) を利用して実装するサンプルコードが aws-samples で公開されています。

image.png

  1. クライアントID、クライアントシークレットのペアを用いて、トークンを発行
  2. APIアクセス with トークン
  3. Cognito Authorizer でトークンを検証
  4. Lambda funcrion へのリクエストを許可

図中に記載の Custom Scopes を利用して、Cognito に登録したアプリケーションクライアント(接続元のシステムごと)にAPIのリソース・パスごとに認可の制御ができます。

実現イメージ

image.png

  • Amazon Cognitoのリソースサーバにてカスタムスコープを発行し、アプリケーションクライアントに紐づけることができる
  • アプリケーションクライアントは紐づけられたカスタムスコープにのみアクセスが許可される
  • Amazon API gateway の Cognito オーソライザーでリソース/パスごとに許可するスコープを指定できる

参考

Client Credentials Grant を利用したやってみた記事がありましたので、参考として貼っておきます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1