ALBにCognitoで認証をつけることができます。今回はそれを試しました。コードの全体は https://github.com/BlueSugar620/poc-alb_cognito_authenticate/ にあります。
仕組み
認証がどのような仕組みで行われているかを確認します。今回は、アクセス先のURLをhttps://example.comとして話を進めます。
- https://example.com にアクセスする
- DNSサーバーにhttps://example.com に該当するIPアドレスがどこであるかを尋ねる
- 該当するIPアドレス(ロードバランサ)にアクセスする
- ロードバランサの設定で https://auth.example.com にリダイレクトされる
- DNSサーバーにhttps://auth.example.comに該当するIPアドレスがどこであるかを尋ねる
- 該当するIPアドレス(Cognitoユーザードメイン)にアクセスする
- Cognitoの仕組みで認証情報を得る
- Cognitoの仕組みで認証情報を持って、https://example.com にアクセスする
- 繋がる
という工程を得て、認証が行われます。
ポイント
アクセス先のドメインは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サンプルです。
内容を編集するか削除してください。