ユーザ認証機能を提供するAmazon CognitoのAPIでアクセスした時にタイムアウトになり詰まった体験談

本記事は、Amazon Cognitoを使用した際に詰まったことを自分自身の備忘録、またはこれからAmazon Cognitoで使用する方向けに参考になればと思い記載しています。


Amazon Cognitoとは

APIベースで実装されるモバイルアプリやWebアプリにユーザ認証機能を提供するサービス。

  1. ユーザプール
    独自のユーザディレクトリに加え、外部IDプロバイダでのログインに基づき、アプリへのアクセスに利用できるトークン(JWT)を提供する。
    外部IDプロバイダとして、Facebook, Google, Amazon, Apple, SAML, OpenID Connectが可能である。

    Amazon Cognito ユーザプールについて
    https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-identity-pools.html

  2. IDプール
    Cognitoユーザプールに加え、外部IDプロバイダでのログインに基づき、AWSのサービスにアクセスできるクレデンシャルを提供する。

    Amazon Cognito IDプールについて
    https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-identity.html

Amazon Cognito APIで詰まった事象&原因

詰まった事象については、VPC内に配置しているAmazon Cognito APIをコールするLambda関数からCognitoのユーザプールにアクセスできず、Lambdaのタイムアウトが発生しました。
本事象の原因については、Cognitoのエンドポイントにはインターネットを経由した通信が必要であり、当Lambda関数はインターネットに接続ができないことが原因でした。

事象の解決方法

VPC内のLambda関数からCognitoへアクセスする方法は、NATゲートウェイを作成し、NATを経由してLambda関数がインターネットに接続できる状態にすることです。

具体的なLambda関数にインターネットアクセスを許可する設定方法については下記の記事を参考にしてください。
https://repost.aws/ja/knowledge-center/internet-access-lambda-function

最後に

今まではVPCのLambda関数からVPC外のAWSサービスにアクセスする場合、VPCエンドポイントを設定すれば、アクセスできていたものの、Cognito自体にVPCエンドポイントが対応していないため、かなり詰まってしまいました。

AWS PrivateLink と統合できる AWS のサービス
https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/integrated-services-vpce-list.html

この記事が気に入ったらサポートをしてみませんか?