Cognito ユーザープール + ALB の認証に Okta で OpenID Connect (OIDC) 連携を追加してみた

前回に引き続き、ALB + Cognito ユーザープール + OpenID Connect連携(Okta) を追加して、Cognito,Google,Okta でログインできる状態にしてみました。
2020.06.20

ちゃだいん(@chazuke4649)です。

Amazon Cognito と Application Load Balancer を使用すると、AWSサービスだけで簡単に認証機能を実装できます。
前回、Cognito + ALB + Google認証を試したので、今回は、別のパターンを試します。 前回のエントリはこちらです。

今回は、前回のGoogle認証部分をOIDC認証で Okta に置き換えたバージョンとなります。下図が構成図となります。

こちらもやはり、Cognitoを経由せずに、直接 ALBの組み込み認証機能とOIDCとしてのGoogle認証するパターンと似ているので、混同にご注意ください。

作業手順

作業手順の概要としては、以下の5つを順番に行っていきます。

  1. Amazon Cognito ユーザープールを作成する
  2. Amazon Cognito ユーザープールを設定する
  3. ALBとCognitoを組み合わせた認証を設定する
  4. Okta(OIDC)を設定する
  5. Amazon Cognito ユーザープールにOIDC連携を追加する

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 の管理者画面が表示される状態

やってみた

基本的には、以下公式ドキュメントを参考に進めていきます。

ユーザープールへの OIDC ID プロバイダーの追加 - Amazon Cognito

Amazon Cognito ユーザープールで、Okta を OIDC ID プロバイダーとして設定する

4.Okta(OIDC)を設定する

Okta のアカウントがない場合は、Okta Developer Editionのアカウントを次の URL から作成してください。(クレジットカードを登録せずに、無料でアカウント開設が可能)

https://developer.okta.com/quickstart/

Okta にサインインして、Developer Consoleの中から、[Classic UI]を選択します。

[Applications]を開きます。

[Add Application]を選択します。

[Create New App]を選択します。

Platformでは[Web]、Sign on methodでは[OpenID Connect]を選択し、作成します。

作成したAppの[General Settings]で以下の通り設定していきます。

  • Application name: chadain-dev
  • Login redirect URIs: https:chadain-test.com/oauth2/idpresponse ※値はダミーです。oauth2/idpresponse以外の部分は、Cognitoユーザープールの[Domain Name]で確認できます。

作成されたAppにて設定内容を見ていきます。
[Allowed Grant types]にて[Authrization Code]が選ばれていることを確認します。

[Client ID]と[Client secret]が発行されているので、これをメモしておきます。

  

次に[Sign On]のタブを開き、[Issuer]にあるURLもメモします。
  

[Assignments]にて、[Assign]を選択し、今回認証でログインしたいユーザーを登録します。(Oktaアカウント作成時に、ユーザーとして登録されているはずです)

これで、Okta側の設定は終了となります。

5.Amazon Cognito ユーザープールにOIDC連携を追加する

ここからはAWS側の作業となります。
Cognitoコンソールを開き、対象のユーザープールにて「IDプロバイダー」を開きます。
OpenID Connectを選択し、以下設定を追加します。

  • プロバイダ名: Okta(任意の名称でOK)
  • クライアントID: ※Oktaコンソールでメモした値を入力
  • クライアントシークレット: ※Oktaコンソールでメモした値を入力
  • 認証スコープ: email openid
  • 発行者: ※Oktaコンソールでメモした値を入力

作成が完了すると、アクティブなOIDCプロバイダに追加されます。

「アプリクライアントの設定」を開き、以下項目を確認します。

  • 有効なIDプロバイダ: Okta
  • 許可されている OAuth フロー: Authorization Code Grant
  • 許可されている認証スコープ: email openid

[属性マッピング]にて、以下項目を確認します。

  • sub: Usernameを確認
  • email: Emailを追加

以上で、Cognio の設定は完了です。

テストする

https://www.chadain-test.comにアクセスすると、Cognito認証画面は以下のようになりました。
Oktaのボタンが追加されてますね!

Oktaボタンを押して、Okta認証画面にて、ユーザー名とパスワードを入力します。

そうすると無事、以下 Nginx の初期画面が表示されました!

終わりに

今回は前回のGoogle認証(ソーシャルサインイン)に引き続き、Okta認証(OIDC)を追加しました。
どちらも基本的にほとんど同じ部分を設定すれば連携できたので、とてもスムーズに実装することができました。

それではこの辺で。ちゃだいん(@chazuke4649)でした。