Cognito ユーザープール + ALB の認証にソーシャルサインイン(Google)を追加してみた
ちゃだいん(@chazuke4649)です。
Amazon Cognito と Application Load Balancer を使用すると、AWSサービスだけで簡単に認証機能を実装できます。
過去に以下エントリにてこれらの構成は紹介されていました。
今回は、この構成にさらにソーシャルサインインを追加して、Cognitoユーザープールの認証でも ソーシャルサインインとしてのGoogle認証でも選べる状態を目指します。つまり、ALB + Cognito ユーザープール + ソーシャルサインイン(Google) という状態です。下図のような構成となります。
ちなみに、似ているようで違うパターンとして、「ALB + OIDC(Google)」の構成があります。詳細は以下エントリです。
こちらは、Cognito を経由せずに、直接 ALBの組み込み認証機能とOIDCとしてのGoogle認証を連携させる構成ですので、混同にご注意ください。
作業手順
作業手順の概要としては、以下の5つを順番に行っていきます。
- Amazon Cognito ユーザープールを作成する
- Amazon Cognito ユーザープールを設定する
- ALBとCognitoを組み合わせた認証を設定する
- ソーシャルサインインのGoogle認証を作成する
- Amazon Cognito ユーザープールにソーシャルサインインを追加する
1.2.3.については、先述の以下エントリにて紹介されていますので、今回は割愛し 4.5.からやってみたいと思います。
インフラエンジニアが一切コードを書かずにWebサーバーに認証機能を実装した話 | Developers.IO
ALB + Cognito認証で付与されるユーザー情報をEC2サイドから眺めてみる | Developers.IO
前提
よって、以下内容がすでに準備されている状態となります。
- Nginx on EC2 を構築済み
- ALBを構築済み
- Route 53、ACMを設定し、
https://www.chadain-test.com
にて、ALB 経由で nginx の管理者画面が表示される状態
やってみた
基本的には、以下公式ドキュメントを参考に進めていきます。
ステップ 3.ユーザープールにソーシャルサインインを追加する (オプション) - Amazon Cognito
Amazon Cognito ユーザープールで Google をソーシャルアイデンティティプロバイダーとして設定する
4.ソーシャルサインインの(Google認証)を作成する
まずは、GCP にサインインします。
初めての場合は、開発者アカウントを作成し、新しいプロジェクトを作成します。
左側ナビゲーションから、「APIとサービス」の「OAuth同意画面」を開きます。
まず、OAuth同意画面ではユーザータイプを選びます。
社内ユーザーのみなどの場合は内部ですが、今回は一般ユーザーを想定しているので、外部を選びます。
次に詳細を入力していきます。アプリケーション名は任意なのでchadain-dev
と入力します。サポートメールにはすでにGoogleアカウントでサインインした際のメールアドレスが入力されています。
認証済みドメインの項目にamazoncognito.com
を登録します。それ以外は特に何もせず、保存します。
次に、左側ナビゲーションから「認証情報」を選び、「認証情報を作成」で、「OAuth クライアント ID」を選択します。
- アプリケーションの種類は「ウェブアプリケーション」を選びます
- 名前は
chadain-dev
にします - 承認済みの JavaScript生成元には、AWS側の Cognitoコンソールの「ドメイン」にて設定済みのAmazon Cognito ドメインを入力します。今回の場合、予め
https://chadain-dev.auth.ap-northeast-1.amazoncognito.com
と設定していたので、これを入力します - 承認済みのリダイレクト URIには、上記URIの末尾に
/oauth2/idpresponse
を足したものを入力します
OAuth2.0クライアントIDを作成すると、クライアントID と クライアントシークレットが発行されるので、これをメモしておきます。
Google側は以上で完了です。
5.Cognitoユーザープールにソーシャルサインインを追加する
次はAWS側で Cognitoコンソールを開きます。
使用するユーザープールの「IDプロバイダー」から「Google」を選び、先ほど発行されたクライアントID と クライアントシークレットを入力します。
承認スコープは記入例として表示されているprofile email openid
とそのまま入力し、「Googleの有効化」を実行します。
次に「アプリクライアントの設定」を開き、既存設定を更新します。
「有効なIDプロバイダ」には「Google」が表示されるようになっているので、追加します。「許可されている OAuthフロー」では新たにImpplicit grant
を追加します。「許可されている OAuthスコープ」では、少なくともemail openid profile
を追加して、保存します。
Cognitoの既存設定の更新は以上です。
テスト
冒頭に記載の通り、本構成はすでに独自ドメインからCognito認証画面が開ける状態でした。
同じ独自ドメインから、今回の更新結果をみてみます。
URLをブラウザに入力すると、以下のような画面が表示されました。
変更前は、右側のCognito認証のみでしたが、左側にGoogle認証が追加されてますね!
左側の「Continue with Google」を選択します。
するとお馴染みの「アカウントの選択」が表示されたので、任意のGoogleアカウントを選択します。
そうすると無事、以下 Nginx の初期画面が表示されました!
ちなみに、Cognito認証の方からサインインし直しても成功したので、CognitoでもGoogleでもどちらでもサインインできる状態になりました。
終わりに
簡単にGoogle認証を追加することができました。この流れで他の認証パターンにも挑戦してみようと思います。
それではこの辺で。ちゃだいん(@chazuke4649)でした。