You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Amazon Cognito到Quicksight的无服务器SSO/MFA免二次认证需求

解决Amazon Cognito MFA认证后直接SSO到AWS Quicksight的问题

问题背景

项目基于无服务器架构,通过Amazon Cognito用户池实现用户名/密码+MFA(认证应用/SMS)的用户认证,目标是完成Cognito到AWS Quicksight的SSO,要求用户通过Cognito Hosted UI完成MFA认证后,无需二次输入Quicksight凭证,直接跳转至指定仪表盘。当前已完成部分配置,但用户仍需在Quicksight重新认证,无法实现无缝跳转。

现有已实施配置

  • 用S3静态网页作为Hosted UI,跳转至Quicksight做凭证校验
  • 创建Lambda函数辅助凭证传输,通过Elastic Beanstalk管理
  • 配置IAM策略限制未授权用户访问Quicksight
  • 在Quicksight中配置SSO SAML认证并添加Beanstalk/S3静态URL
  • 创建身份池并设置Implicit Allow策略
  • 用API Gateway处理与Quicksight的Get/Post请求
  • 无法使用CloudFront

解决方案步骤

1. 配置Cognito用户池作为SAML身份提供商(IdP)

  • 进入Cognito用户池控制台,在联邦身份 > SAML身份提供商中,选择创建SAML身份提供商
  • 导出Cognito的SAML元数据(在用户池的应用集成 > 域名页面,找到SAML元数据URL,下载XML文件)
  • 确保用户池的MFA设置为强制或可选(匹配项目需求),且已启用对应的MFA类型(TOTP/SMS)

2. 调整Quicksight的SAML SSO配置

  • 进入Quicksight控制台,在管理 > 单点登录(SSO)中,选择设置SAML
  • 上传之前下载的Cognito SAML元数据XML文件,或手动输入元数据中的实体ID和SSO服务URL
  • 设置回调URL为Cognito Hosted UI的回调地址(格式:https://<your-cognito-domain>/oauth2/idpresponse)
  • 勾选启用自动登录选项,避免二次认证提示

3. 优化Cognito Hosted UI的跳转逻辑

  • 移除S3静态网页的跳转逻辑,直接使用Cognito原生Hosted UI(用户池应用集成中配置的域名)作为用户访问端点
  • 在Cognito用户池的应用客户端配置中,设置允许的OAuth流为授权码流(Authorization Code Flow),隐式流不适用于SAML SSO场景
  • 确保Cognito应用客户端的允许的OAuth范围包含Quicksight所需的用户属性,或在Lambda生成SAML断言时指定正确受众

4. 用Lambda生成并传递SAML断言(替代Beanstalk管理)

  • 创建Lambda函数,在用户通过Cognito MFA认证后,接收Cognito授权码,调用GetIdToken接口获取ID Token
  • 基于ID Token中的用户信息,生成符合Quicksight要求的SAML断言(需包含NameID、email等必填属性)
  • 将生成的SAML断言通过POST请求发送到Quicksight的SAML ACS URL(可在Quicksight SSO配置中获取),实现自动跳转

5. 调整IAM策略与身份池配置

  • 移除身份池的Implicit Allow策略,改为基于Cognito用户池的身份验证授权:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "quicksight:DescribeDashboard",
          "Resource": "arn:aws:quicksight:<region>:<account-id>:dashboard/<dashboard-id>",
          "Condition": {
            "StringEquals": {
              "cognito-identity.amazonaws.com:aud": "<your-identity-pool-id>"
            }
          }
        }
      ]
    }
    
  • 确保Quicksight关联的IAM角色拥有访问指定仪表盘的权限,且该角色已与Cognito身份池绑定

6. 移除不必要的Elastic Beanstalk组件

  • 项目要求无服务器架构,可直接通过API Gateway触发Lambda函数,替代Elastic Beanstalk的管理,降低架构复杂度

验证流程

  1. 用户访问Cognito Hosted UI域名
  2. 输入用户名、密码,完成MFA认证
  3. Cognito返回授权码,触发Lambda生成SAML断言
  4. Lambda自动将SAML断言POST到Quicksight ACS URL
  5. 用户直接跳转至指定Quicksight仪表盘,无需二次认证

内容的提问来源于stack exchange,提问作者Anthony Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:43:37