こちらのAWS Summit 講演内容をメモにまとめました。
AWSを活用したユーザー認証実装パターン解説 | AWS Summit Tokyo 2019
資料 https://pages.awscloud.com/rs/112-TZM-766/images/B2-06.pdf
動画 https://www.youtube.com/watch?v=wnB6Fq7-tHs
Amazon Cognito
- ユーザープール
- ユーザー認証する機能
- IDプール
- AWS Credentials(AWSサービスへアクセスするためのもの)を発行する
AWSを活用したユーザー認証活用パターン
従来型のWebアプリ
A-1認証サービスの活用
Application Load BalancerはCognitoとOIDCIDプロバイダの活用が可能
https://dev.classmethod.jp/articles/http-headers-added-by-alb-and-cognito-are-explained/
Amazon Cognitoの活用
ALBにアクセスするとCognitoにリダイレクトされる。
ID、パスワード認証がかかって、リダイレクト。
フロー
- ユーザーからALBにアクセス
- Cognito(ユーザープール)にリダイレクト ソーシャルやSAML2.0対応IDP連携可能
- 認証画面が表示される
- ユーザーはID/Passwordを連携
- Cognito Token+ ALBにリダイレクト
- ユーザー→ALB
- ALB→バックエンドのサービスに連携
A-2
ALBを使っていない。Coginitoが要件に合わない。
Open ID connectを使っていない。→自分で認証構築する。
モダンなAPIベースのWebアプリ
B-1 APIをAmazon API Gatewayで提供している場合
- ユーザープール
- ユーザー認証する機能
ユーザー→S3→ユーザー認証画面→ユーザープールが認証を実施してTokenを渡す→Amazon API GWがTokenを検証。
- ユーザー認証する機能
- AWS IAM
- AWS Lambda
- 独自ロジックで認証する場合
B-2 APIを独自実装で提供している場合
アプリケーションロジック内でのカスタム認証を実施
B-3 Amazon CognitoのIDプールを利用
ユーザー→S3→ユーザー認証画面→ユーザープールが認証を実施してTokenをIDプールに渡す→IDプールがユーザーにAWS Credentialsを渡す。
IDプールによるAWS Credentials発行
事前にIAMロールの割当ルールを設定
割り当てられたIAMロールを利用してAWS Credentialsを生成
AWS Security Token
クラウドベンダーが提供するアプリ
Azure AD相当の機能ですね。
100種類以上のアプリやSAML2.0対応のアプリを統合可能
引用「AWS SSO は追加料金なしで利用できます。」
https://aws.amazon.com/jp/single-sign-on/faqs/
C-1 シングルサインオンを提供したい場合
AWS SSO利用時のフロー
- ユーザーがAWS SSOにアクセス
- AWS SSOが認証画面を応答
- ユーザーがID/Passwordを入力
- AWS SSOがポータル画面を応答(ポータル画面はAzure ADのアクセスパネル相当ですね。)
- ユーザーがポータルでアプリを選択して利用
C-2 Active Directoryを活用したい場合
- AWS SSOでADFSを利用することなくSAML2.0対応アプリへ認証可能
- オンプレミスのADやAWS Microsoft ADとの連携も可能
- AWS SSOは2020年8/1時点では東京リージョン未対応
https://aws.amazon.com/jp/about-aws/global-infrastructure/regional-product-services/
(東京リージョンないなら使えないな・・・)