18
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API Gatewayでオーソライザーに複数のCognitoユーザープールを設定する

Last updated at Posted at 2021-05-25

システム構成のイメージはそれほど珍しいものではないとは思ったのですが、
構築するのにひと工夫必要だったため備忘録的にまとめました。

システム構成

システムの利用者をAmazon Cognitoで管理しており、
API Gatewayはリクエストヘッダーに付与されたトークン(Cognitoの認証で得られたもの)を
検証するように設定しています。
これによってシステムの利用者でない者からのリクエストを制限しています。

資料作成用_before.png

API Gateway上での本番/開発環境の切り分けは同一ステージ機能で行なっています。
(別APIにするとリソースの管理がバラバラになるため)
スクリーンショット 2021-05-25 8.59.48.png

やろうとした事

Cognitoにトリガーを設定してログイン認証後の処理を実装することになったのですが、
本番/開発で同一のユーザープールであると動作検証がやりづらいという事をきっかけに、
開発用のユーザープールを新たに作成し、分けてユーザーを管理することにしました。
(最初からやっとけって話ですが:innocent:

資料作成用_after.png

ぶつかった壁

AWSのマネジメントコンソール上からAPI Gatewayのオーソライザーに対して
リクエスト検証に使うCognioユーザープールを設定しようとしたところ、
なんと!1つしか設定できないようです。。
スクリーンショット 2021-05-19 9.09.38.png

解決方法

このままではAPIを分けるしかないのですが、それはまた面倒なので諦めずに何か方法がないか調べていると、
AWS CLIのオーソライザー作成コマンド create-authorizer のオプションでは複数のユーザープールを指定できる事が判明しました。

--provider-arns (list)

コマンド実行例

aws apigateway create-authorizer \
--rest-api-id {API GatewayのAPI ID} \
--name {オーソライザーの名前} \
--type COGNITO_USER_POOLS \
--provider-arns {Cognito UserPoolのARN} {Cognito UserPoolのARN} \
--identity-source method.request.header.Authorization

provider-arnのフォーマットは以下のとおりで、空白区切りで入力します。
arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}

コマンドを実行しマネジメントコンソールを見ると指定したUserPoolが設定できていることが確認でき、
ユーザープールを分けることに成功しました。

スクリーンショット 2021-05-19 9.09.56_モザイク.png

マネジメントコンソール上からできないからと諦めるケースはありがちですが、
CLIだと実現できる可能性はあるのでリファレンスは一見の価値ありです!

18
5
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
18
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?