AWS

ALBにCognitoで認証をつける

ALBにCognitoで認証をつけることができます。今回はそれを試しました。コードの全体は https://github.com/BlueSugar620/poc-alb_cognito_authenticate/ にあります。

仕組み

認証がどのような仕組みで行われているかを確認します。今回は、アクセス先のURLをhttps://example.comとして話を進めます。

  1. https://example.com にアクセスする
  2. DNSサーバーにhttps://example.com に該当するIPアドレスがどこであるかを尋ねる
  3. 該当するIPアドレス(ロードバランサ)にアクセスする
  4. ロードバランサの設定で https://auth.example.com にリダイレクトされる
  5. DNSサーバーにhttps://auth.example.comに該当するIPアドレスがどこであるかを尋ねる
  6. 該当するIPアドレス(Cognitoユーザードメイン)にアクセスする
  7. Cognitoの仕組みで認証情報を得る
  8. Cognitoの仕組みで認証情報を持って、https://example.com にアクセスする
  9. 繋がる

という工程を得て、認証が行われます。

ポイント

アクセス先のドメインはhttps化しないとならない

CognitoをALBに紐付ける際に、https化しておかないとエラーになります。

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/authorization-endpoint.html

ALBからCognito domainへアクセスするのでセキュリティグループのegressルールを変更する

egressルールをどのように設定するべきかは難易度が高かったので、全て許可にしました。

元のURLとauth.のURLにエイリアスレコードを設定する

Route53の証明書登録でうまくやってくれると思っていましたが、自分で登録しなければなりません。auth.のURLの設定に気付けず、1週間くらい悩んでいました。

元のURLとauth.のURLで別々のACM証明書を作成する、後者はus-east-1で作成する

同じ証明書を使い回すと、エラーが出ます。

ユーザー登録にはマネジメントコンソールからの作業が必要

ユーザーを作成するためにはマネジメントコンソールから作業が必要です。グループを作成して、付与する権限を設定することもできます(グループのユーザーとしてサインインすると設定したIAM Roleを引き受けてログインすることができます)。

まとめ

Route53に悩まされましたが、レコードのタイプとDNSの役割が体感できました。

CTAサンプル

これはCTAサンプルです。
内容を編集するか削除してください。