Amazon Cognito 用於協助外部使用者(mobile/web app)取得AWS resource臨時用的credential。
現實生活中,拜訪客戶公司時,警衛可能透過打電話或從名片中先確認身份,確認無誤後再給予訪客證或門禁卡,訪客才得以進入大樓。
Amazon Cognito做類似的事情。外部app透過Cognito,先從Cognito User Pools (CUP)裡確認身份無誤後,再從Cognito Identity Pools (CIP)去取得AWS credentials。
Cognito User Pools: 主要作為 serverless 的 user database。提供以下功能特性:
- 簡易帳密登入 & 密碼重設
- Email & 電話認證
- 可啟用MFA認證
- 社群登入 (FB, Google, SAML...)
- 可與API Gateway整合。 app -(authenticate)-> Cognito User Pools -(return token)-> app -(rest api with token)-> API Gateway -(evaluate token)-> Cognito User Pools -(authenticated)-> API Gateway -(access with identity)-> backend
- 可與Application Load Balance整合。 app -> ALB -(authenticate)-> Cognito User Pools -(authenticated)-> ALB -> backend
Cognito Identity Pools (Federated Identities): 提供用戶暫時的AWS credentials。
- 用戶來源於Cognito User Pools, 社群登入, SAML provider, OpenID connect provider...等。
- 用戶於來源驗證後,再與Cognito Identity Pools換取暫時的credentials
- 這些credentials裡有我們在Cognito裡設定的IAM policies
- 也可以透過user_id去做細部的權限控管
- 提供guess機制。使用Default IAM roles。
-- 分隔線 --
AWS Amplify (BaaS) 提供完整的解決方方案,讓前端開發者能更快速的開發、建置跟發佈前端(web/mobile)應用程式。可想做它像是Elastic Beanstalk (PaaS) for mobile/web application。
透過 Amplify CLI 可以快速建立一個 Amplify backend,裡面包含許多AWS serverless的服務,像S3、Cognito、Lambda、DynamoDB等。
Reference
- https://godleon.github.io/blog/AWS/AWS-SOA-VPC/
- https://www.udemy.com/course/aws-certified-solutions-architect-associate-saa-c03
- https://www.tenlong.com.tw/products/9786263333123?list_name=lv