亚马逊AWS官方博客

使用开源身份提供商 Keycloak 实现 Amazon Quick 多端 SSO——从部署到SAML + OIDC 双协议集成与验证

摘要:在智能建筑和物业管理领域,IoT 设备的稳定运行对业务连续性至关重要。物业公司通常通过 IoT 平台管理大楼的设施设备,实时采集并记录设备报送的各类指标数据(如温度、湿度、压力等)。然而,设备离线、网络故障、平台问题等异常情况时有发生,传统的监控方式往往只能提供统计图表,关联分析比较困难,难以快速定位问题根源,影响了问题发现和处理的效率。本文以某客户智能建筑管理场景为例,介绍如何利用亚马逊云科技的无服务器(Serverless)来构建一套近实时(分钟级)的 IoT 设备异常检测系统,实现从数据采集、实时分析到告警的全流程自动化,面对大量 IoT 设备数据能够在数分钟内识别出设备的异常,为物业企业提供可靠的设备监控能力。


一、引言

Amazon Quick (包括 Amazon Quick WebAmazon Quick Mobile AppAmazon Quick Desktop)是一个综合性的、由生成式 AI 驱动的商业智能平台。Amazon Quick 在 Professional 和 Enterprise 版本中支持身份联合与 SSO,其支持两种 SSO 集成方式:IAM SAML Federation(直接联合)和 IAM Identity Center(原 AWS SSO)。

在我们服务的客户群体中,许多客户已经使用 IAM Identity Center 的用户名/密码方式管理用户身份(一个典型的场景是,企业已经通过 IAM Identity Center 来管理 Kiro 等亚马逊云科技服务的订阅)。在这种情况下,要为 Amazon Quick 提供 SSO 接入,如果将 IAM Identity Center 的身份源从内置目录切换为其他的身份提供商 (Identity Provider, 简称 IdP,用于集中控制和管理用户认证与授权并支持 SSO),会影响现有的密码用户登录。因此,本文采用保留现有 IAM Identity Center 配置和用户体系不变的情况下,使用 IAM 联邦配置 Amazon Quick 的 SSO。对于此前已经在订阅过 Amazon Quick Web 的企业,可以继续保留原有用户可以继续使用 Amazon Quick 的 web 和 Mobile 以及 Plugin 等不变,对于使用 Amazon Quick Desktop 的用户使用新的 SSO 方式登录和管理,在 Amazon Quick 的 Admin 用户管理中可以并存。

本文采用开源 IdP Keycloak 设计方案,如果企业已经有 Microsoft Entra 或 Okta 等 IdP,可参考文档进行配置,或者参考本文以 Keycloak 做桥接。Keycloak 是一个广泛使用的开源身份提供商(IdP),通过将 Keycloak 与 亚马逊云科技的服务集成,可以实现基于角色的访问控制,确保用户根据其在 Keycloak 中存储的属性获得适当的 Amazon Quick 角色权限。因此,我们将展示如何在一个 Keycloak Realm 下同时配置 SAML 2.0(用于 Amazon Quick Web / 浏览器扩展的 SSO)和 OpenID Connect(用于 Amazon Quick Desktop 企业订阅登录)两套协议,共享同一套用户体系,实现”一次部署,多端访问”。同时,Keycloak 也支持桥接,对接企业已有的 AD/LDAP/SAML/OI DC 身份源,无需修改原有 SSO 配置,同时支持灵活的 Role 映射和用户管理。因此本方案亦可以作为如下场景的参考:

注: SAML 2.0,即安全断言标记语言 Security Assertion Markup Language,是一种被许多 IdP 使用的开放标准;OpenID Connect,开放身份连接,简称 OIDC,是一种建立在 OAuth 2.0 协议之上的身份认证层,用于验证终端用户的身份,并获取用户的基本个人信息。

上述场景 B 的客户群体较高而且涵盖了最多的配置环节,因此在本文中,我们将以场景 B 为例,逐步探讨某客户的实际 PoC 过程中是如何进行配置和验证的:

  • 在Amazon EC2 上使用 Docker 部署 Keycloak 并配置 HTTPS
  • 配置 SAML 联合实现 Amazon Quick Web SSO
  • 配置 OIDC 集成实现Amazon Quick Desktop 企业登录
  • Amazon Quick Mobile登录和原有Amazon Quick Web用户的登录
  • 生产环境的部署和安全建议

二、整体架构

下图展示了本方案的整体架构。一个 Keycloak 实例通过两种不同的协议同时服务 Amazon Quick WebAmazon Quick Desktop 及其他 Amazon Quick 组件:

[图 1]

设计说明

  • Keycloak 中只需一个 Realm(如 aws-realm),下设两个 Client:
    • SAML Client(例如 amazon:webservices):用于 Amazon Quick Web/Mobile/浏览器扩展的 IAM SAML 联合登录
    • OIDC Client(例如 amazon-quick-desktop):用于 Amazon Quick Desktop 的 OIDC 集成(通过 Amazon Quick Admin 的 Extension Access 配置)
    • 两个 Client 共享同一套用户/组/角色体系
  • 本文主要示例开源 keycoak 与 Amazon Quick 的配置,采用 Keycloak 在 EC2 上通过 ACM 证书直接提供 HTTPS 服务,生产环境的部署参见后续章节的说明和建议。
  • Amazon Quick Desktop 的 OIDC 认证通过 Amazon Quick Admin 的 Extension Access 直接配置。不经过 IAM Identity Center,与现有的 IAM Identity Center 应用(例如 Kiro 和其他应用配置)可以并存。

三、前提条件

在开始配置之前,请确保您具备以下条件:

项目 要求
亚马逊云科技账户 已经开通 Amazon Quick 且有有效的 Amazon Quick 订阅(Professional 或 Enterprise Edition)
Amazon Quick Home Region 必须是 us-east-1
IAM 权限 IAM 管理员权限
EC2 实例 Amazon Linux 2023,建议 t3.small 及以上(注:如采用 Ubuntu 或其他 Linux 系统,请注意适当修改相应命令)
域名 域名(如 keycloak.example.com),DNS 可配置

关于域名: 本文假设您的企业已拥有可配置的域名(这是 亚马逊云科技企业客户的常见情况)。Keycloak 必须通过有效的 HTTPS 域名对外暴露,亚马逊云科技后端服务才能验证 Token 签名和获取用户信息。如果您尚未拥有域名,推荐您先在 Amazon Route 53 或其他域名供应商注册一个域名并在 DNS 提供商处完成配置(如果是试验验证而且没有域名,也可以使用 Amazon CloudFront 自带 HTTPS 地址或使用 Application Load Balancer 提供的默认 https 地址进行 keycloak 的安装和配置)。

四、方案概览

本方案的配置分为以下几个阶段:

阶段 内容 协议 目标
阶段 1 Keycloak 部署与 HTTPS 配置 基础设施就绪
阶段 2 SAML 联合配置 SAML 2.0 Amazon Quick Web SSO
阶段 3 OIDC 配置(Amazon Quick Admin 的 Extension Access) OIDC Amazon Quick Desktop 企业登录
阶段 3 扩展启用和 SSO 启用测试 端到端验证

五、阶段 1:Keycloak 部署与 HTTPS 配置

⚠️ 说明: 本文为便于快速验证方案,采用 EC2 单机 + Docker 内置 H2 数据库的方式部署 Keycloak。此方案适合开发测试和概念验证(PoC)。生产环境强烈建议将 Keycloak 的数据库替换为 Amazon RDS for PostgreSQLAmazon Aurora PostgreSQL,以获得数据持久化、自动备份、高可用和弹性扩展能力。Keycloak 容器重启时,H2 内嵌数据库中的 Realm、Client、用户等配置数据如未作适当配置可能全部丢失。关于生产环境的部署架构,请参考本文末尾的”生产部署和安全建议”章节。

5.1 【Amazon EC2】启动 Amazon EC2 实例

启动一台 Amazon EC2 实例(建议 t3.small 及以上)后安装 Docker(详细说明可以参见文档):

sudo yum install -y docker
sudo systemctl enable docker && sudo systemctl start docker

5.2 【ACM】获取 SSL 证书

Keycloak 必须通过有效的 HTTPS 证书对外提供服务。本文采用 AWS Certificate Manager(ACM)公有证书方式。

AWS Certificate Manager (ACM) 提供公有 SSL/TLS 证书,支持自动续期,是 亚马逊云科技环境下的首选方案。ACM 公有证书既可以绑定到 Application Load Balancer(ALB)/Amazon CloudFront 等亚马逊云科技托管服务,也可以导出证书和私钥用于 Amazon EC2 上的应用。

5.2.1 申请步骤

  • 打开控制台 → Certificate Manager → Request certificate
  • 类型:公有证书
  • 域名:keycloak.example.com(您的实际域名)
  • Allow Export 选择 Enable Export
  • 验证方式:DNS 验证(在域名提供商添加 CNAME 记录)
  • 等待状态变为 Issued

[图 2]

[图 3]

按照步骤在 DNS 验证后,可以导出证书。

[图 4]

5.2.2 导出证书文件(用于 Amazon EC2 直接部署)

[图 5]

[图 6]

ACM 导出时会生成三个文件(Certificate、CertificateChain、PrivateKey),需要将 Certificate 和 CertificateChain 合并为 fullchain.pem。

可以在 Console 中下载文件分别为 cert.pem、chain.pem 和 privkey.pem,然后手工将 cert.pem 和 chain.pem 进行合并为 fullchain.pem (例如使用 Notepad 将 cert.pem 的文本放在头部然后将 chain.pem 的文本端接续在下方),然后将文件传输到 EC2 上/home/ec2-user/cert/目录下。

也可以参考如下脚本在 EC2 上通过 aws cli 下载和合并 pem:

# 创建证书目录
mkdir -p /home/ec2-user/cert

# 将密码短语保存到文件(不含换行符)
echo -n 'your-passphrase' > /home/ec2-user/cert/passphrase.txt

# 通过 AWS CLI 导出 ACM 证书的三个部分
aws acm export-certificate \
  --certificate-arn arn:aws:acm:us-east-1:<account-id>:certificate/<cert-id> \
  --passphrase fileb:///home/ec2-user/cert/passphrase.txt \
  | jq -r '.Certificate' > /home/ec2-user/cert/cert.pem

aws acm export-certificate \
  --certificate-arn arn:aws:acm:us-east-1:<account-id>:certificate/<cert-id> \
  --passphrase fileb:///home/ec2-user/cert/passphrase.txt \
  | jq -r '.CertificateChain' > /home/ec2-user/cert/chain.pem

aws acm export-certificate \
  --certificate-arn arn:aws:acm:us-east-1:<account-id>:certificate/<cert-id> \
  --passphrase fileb:///home/ec2-user/cert/passphrase.txt \
  | jq -r '.PrivateKey' > /home/ec2-user/cert/privkey.pem

# 合并 Certificate + CertificateChain 为 fullchain.pem
cat /home/ec2-user/cert/cert.pem /home/ec2-user/cert/chain.pem > /home/ec2-user/cert/fullchain.pem

5.3 【Amazon EC2】将 PEM 格式转换为 PKCS12 Keystore

对获取的证书,需要将 PEM 格式转换为 Keycloak 所需的 PKCS12 Keystore 格式。在 Amazon EC2 中执行如下命令可以执行转换:

# 将 PEM 格式转换为 PKCS12 格式的 keystore
openssl pkcs12 -export \
  -in /home/ec2-user/cert/fullchain.pem \
  -inkey /home/ec2-user/cert/privkey.pem \
  -out /home/ec2-user/cert/server.keystore \
  -name server \
  -password pass:your_keystore_password

5.4 【Amazon EC2】部署 Keycloak 容器

使用以下命令启动 Keycloak(Amazon EC2 直接 HTTPS 模式),更多部署方式及参考说明参考 Keycloak 官方指南

docker run --name kevinkeycloak -d \
  -p 80:8080 \
  -p 443:8443 \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD=YOUR_REDACTED_PASSWORD \
  -e KC_HOSTNAME=keycloak.example.com \
 -v /home/ec2-user/cert/server.keystore:/opt/keycloak/conf/server.keystore:ro \
  quay.io/keycloak/keycloak:latest \
  start \
  --http-enabled=true \
  --hostname-strict=false \
  --db=dev-file \
  --https-key-store-file=/opt/keycloak/conf/server.keystore \
  --https-key-store-password= your_keystore_password 

注:这里跳过了 docker pull 等步骤,如果 Amazon EC2 在中国区域或其他拉取较慢,可使用国内镜像或镜像加速先 docker pull 拉取镜像然后再启动。

5.4.1 关键参数说明

变量 作用
KC_HOSTNAME Keycloak 对外暴露的域名根目录,此处按域名填写即可
https-key-store-password Keystore 密码
KC_BOOTSTRAP_ADMIN_PASSWORD Keycloak 管理控制台登录的密码,将 YOUR_REDACTED_PASSWORD 替换为您的 Keycloak 管理员密码
KC_BOOTSTRAP_ADMIN_USERNAME Keycloak 管理控制台登录的用户名

5.5 【Amazon EC2】安全组配置

Amazon EC2 的安全组配置参考如下

方向 协议 端口 来源/目标
入站 TCP 443 52.23.63.224/27(Amazon Quick 后端需访问)
入站 TCP 443 用户所在的公网 IP 或 IP 段
入站 TCP 22 管理 IP(SSH)
出站 ALL ALL 0.0.0.0/0

示例的安全组配置如下:

[图 7]

5.6 【DNS 供应商】DNS 配置

在域名提供商处添加 A 记录,指向 EC2 的公网 IP 地址:

keycloak.example.com → EC2 的 Elastic IP 地址

建议: 为 EC2 分配一个 Elastic IP,确保 IP 地址不会因实例状态而变化。

5.7 【浏览器】验证部署

在浏览器中打开 https://keycloak.example.com,出现控制台登录界面,使用上面的 KC_BOOTSTRAP_ADMIN_USERNAME 设置值作为用户名(示例脚本中为 admin)和 KC_BOOTSTRAP_ADMIN_PASSWORD 设置值作为密码(示例脚本中的 YOUR_REDACTED_PASSWORD),如果登录成功 即表示 Keycloak + HTTPS 部署成功。

[图 8]

[图 9]

六、阶段 2:配置 SAML 联合(Amazon Quick Web SSO

6.1 【Keycloak】在 Keycloak 中创建 Realm 和 SAML Client

  • 登录 Keycloak 管理控制台,选择 Manage realms 菜单,创建新 Realm,命名为 aws-realm

[图 10]

  • 进入 Clients → Import client

下载 AWS SAML metadata:https://signin.aws.amazon.com/static/saml-metadata.xml (参考链接)然后导入文件以创建 SAML client:

[图 11]

6.2 【Keycloak】配置 SAML Client 属性

导入完成后,在客户端应用程序设置页面上,选择最近添加的客户 urn:amazon:webservices Client,更新以下属性:

位置(Tab 或路径) 设置
Settings Home URL /realms/aws-realm/protocol/saml/clients/amazon-qs
Settings Valid redirect URIs https://signin.aws.amazon.com/saml
Settings IdP Initiated SSO URL amazon-qs
Settings IdP Initiated SSO Relay State https://quicksight.aws.amazon.com
Client scopes -> urn:amazon:webservices-dedicated -> Scope Full scope allowed OFF

[图 12]

[图 13]

[图 14]

6.3 【IAM】在 AWS IAM 中添加 Keycloak 为 SAML 提供商

或者通过 Keycloak 获取,如下图示中“SAML 2.0 Identity Provider Metadata”找到对应的链接:

[图 15]

  • 打开 IAM 控制台 → Identity providers → Add provider

[图 16]

  • 选择 SAML
  • Provider name 输入 keycloak
  • 上传 Keycloak 的 SAML metadata XML 文件
  • 记录生成的 Provider ARN

[图 17]

[图 18]

6.4 【IAM】创建 IAM 策略

在 IAM 服务下的 Access Management 菜单中 Policies 下,创建三个 IAM 策略对应不同的 Amazon Quick 角色,完成后的图示如下:

[图 19]

步骤以 QuickSight-Admin-Policy 示例如下,详细的权限和 policy 设置参考官方文档。

6.4.1 QuickSight-Admin-Policy

在 IAM 控制台,选择 Polices,点击”Create policy”:

[图 20]

在创建界面中选择 JSON,并在 JSON 中分别填入如下配置,然后点击 Next:

[图 21]

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "quicksight:CreateAdmin",
      "Resource": "*"
    }
  ]
}

填写 policy 名称 QuickSight-Admin-Policy,然后点击”Create policy”创建。

[图 22]

6.4.2 类似的方式,建立其他的 policy。

QuickSight-Author-Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "quicksight:CreateUser",
      "Resource": "*"
    }
  ]
}

QuickSight-Reader-Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "quicksight:CreateReader",
      "Resource": "*"
    }
  ]
}

6.5 【IAM】创建 IAM 角色

为每个 Amazon Quick 角色创建对应的 IAM Role,包括 QuickSight-Admin-Role,QuickSight-Author-Role 和 QuickSight-Reader-Role:

  • IAM 控制台 → Roles → Create role

[图 23]

  • 选择 SAML 2.0 federation
  • SAML provider 选择 keycloak

[图 24]

  • 附加对应的策略(如 QuickSight-Admin-Role 对应 QuickSight-Admin-Policy,QuickSight-Author-Role 对应 QuickSight-Author-Policy,QuickSight-Reader-Role 对应 QuickSight-Reader-Policy)

[图 25]

  • 命名角色(如 QuickSight-Admin-Role)

[图 26]

在 Step 1: Select trusted entities 信任策略部分点击 Edit,修改 Action 配置,增加“sts:TagSession”:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Federated": "arn:aws:iam::<account-id>:saml-provider/keycloak"
    },
    "Action": [
      "sts:AssumeRoleWithSAML",
      "sts:TagSession"
    ],
    "Condition": {
      "StringEquals": {
        "SAML:aud": "https://signin.aws.amazon.com/saml"
      }
    }
  }]
}

⚠️ 添加 sts:TagSession,将使得 SSO 用户可以同样登录亚马逊云科技 Console,关于 Action 的配置参考文档。

  • 然后点击“Create role”创建角色。

3 个角色完成后,在 Roles 界面中按“quicksight-”过滤将看到如下 3 个 role:

[图 27]

6.6 【Keycloak】在 Keycloak 中分配角色

  • 回到 Keycloak 管理控制台

[图 28]

  • 选择 Client urn:amazon:webservices 选中页签 Roles,点击 Create Role

[图 29]

  • 角色名使用 ARN 组合格式,将 IAM Role 与 IAM provider 的 ARN 以逗号连接起来(逗号前后无空格):
arn:aws:iam::<account-id>:role/QuickSight-Admin-Role,arn:aws:iam::<account-id>:saml-provider/keycloak

[图 30]

  • 重复以上步骤添加 Author 和 Reader 角色。创建完成后,如下示例:

[图 31]

6.7 【Keycloak】创建 SAML Mappers

在 Keycloak 的 Client“ urn:amazon:webservices”配置界面中,选中“Client scopes”页签,点击“amazon:webservices-dedicated”,如下:

[图 32]

点击“Add mapper”选中“By configuration”:

[图 33]

分别选择不同的 Mapping 配置 4 个 Mapper:

[图 34]

创建以下 4 个 Mapper,其中 Mapping 类型对应上图中的”Name”:

Mapper 名称 Mapping 类型 SAML Attribute Name 关键设置
Session Role Role list https://aws.amazon.com/SAML/Attributes/Role Single Role Attribute: ON
Session Duration Hardcoded attribute https://aws.amazon.com/SAML/Attributes/SessionDuration 值: 28800
Session Name User Property (email) https://aws.amazon.com/SAML/Attributes/RoleSessionName 属性选择 email
PrincipalTag Email User Property (email) https://aws.amazon.com/SAML/Attributes/PrincipalTag:Email 以 email 方式关联(必须配置)

如下是 Session Role 的填写示例:

[图 35]

如下为其他 3 个 Mapper 的配置结果:

[图 36]

[图 37]

[图 38]

6.8 【Keycloak】创建用户和组

在 Keycloak 中创建用户组和用户。

  • 创建用户组(如 awsquick-admin、awsquick-Authors、awsquick-Readers)

[图 39]

  • 为每个组分配对应的 Client 角色,选中创建的用户组,在“Role mapping”页签点击”Assign role”选中“Client roles”选中前面创建的 Keycloak 角色。依此创建其他用户组。

如下图示是 awsquick-admin 创建后的角色对应关系:

[图 40]

  • 创建用户并加入相应组

在 Users 界面点击“Add User”

[图 41]

在用户创建界面,填写用户名和邮件,点击“Join Group“选择用户对应的用户组,如下示例:

[图 42]

6.9 【Amazon Quick Admin】配置 Amazon Quick SSO 联通 Amazon Quick Web 与 Keycloak

Amazon Quick 的 Admin 界面,选择 SSO,填写“IdP URL”和“IdP 重定向 URL 参数”并保存后,再将“服务提供商启动的 SSO”从“关闭”改为“开启”,“联合身份用户的电子邮件同步”如果是关闭的请改为“开启”,如下是都修改保存后的界面。

其中“IdP URL“配置为“https://keycloak.example.com/realms/aws-realm/protocol/saml/clients/amazon-qs” (注意替换 keycloak.example.com 为您的域名),“IdP 重定向 URL 参数“设置为”RelayState“。

[图 43]

6.10 【浏览器】测试 SAML SSO

通过以下 URL 测试 SSO(注意替换 keycloak.example.com 为您的域名):

https://keycloak.example.com/realms/aws-realm/protocol/saml/clients/amazon-qs 

[图 44]

输入 Keycloak 用户凭证后,应自动跳转到 Amazon Quick Web 控制台。

[图 45]

七、阶段 3:配置 OIDC 集成(Amazon Quick Desktop 企业登录)和启用扩展

Amazon Quick Desktop 通过 OpenID Connect (OIDC) 协议实现企业登录。这就需要在同一个 Keycloak Realm 下创建第二个 Client。

7.1 【Keycloak】在 Keycloak 中创建 OIDC Client

登录 Keycloak Admin Console → 选择 Realm aws-realm → Clients → Create client

[图 46]

设置
Client type OpenID Connect
Client ID amazon-quick-desktop
Name Amazon Quick Desktop

在 Next 页面中,保持 Client authentication 为默认的 Off,配置 PKCE,如下图示和配置值参考:

[图 47]

设置
Client authentication OFF(Public client)
Standard flow ON
Direct access grants ON
Require PKCE ON
PKCE Method: S256

在 Next 界面中配置 Access Settings,然后“Save”保存,如下图:

[图 48]

配置值如下参考:

设置
Valid redirect URIs http://localhost:18080
localhost:18080
http://127.0.0.1:18080/*
Web origins +

保存后,client 界面示例如下:

[图 49]

7.2【Keycloak】配置 Scopes

在 Clients 界面中点击场景的 amazon-quick-desktop client,进入详情界面,选择“Client scopes”界面,修改“offline_access”为 Default,如下图:

[图 50]

确保 Client 的 Default Client Scopes 包含:

Scope 说明
email 包含 email claim,用于用户映射(必须)
profile 包含用户名等基本信息
offline_access 启用 Refresh Token(必须)

完成后,可以进入 Realm settings 菜单,点击“OpenID Endpoint Configuration”打开配置参数页面(以域名 keycloak.example.com 为例其 url 应为 https://keycloak.example.com/realms/aws-realm/.well-known/openid-configuration ):

[图 51]

7.3 【Amazon Quick Admin】在 Amazon Quick Admin 配置 Extension Access(OIDC 集成)

Amazon Quick Desktop 的 OIDC 认证通过 Amazon Quick Admin 的 Extension Access 直接配置,将 Keycloak 的 OIDC 端点信息注册到 Amazon Quick 后端。

[图 52]

  • 左侧导航 → Permissions → Extension access

[图 53]

  • 点击 Add extension access

[图 54]

  • 选择 Desktop application for Quick,点击 Next

[图 55]

  • 填写 OIDC 配置信息,对应填写在上一步中打开的.well-known 配置,以 keycloak.example.com 域名为例填写的 url 参考如下,其中 Client ID 需与创建 OIDC Client 的 ID 一致(amazon-quick-desktop)

[图 56]

字段
Name QuickDesktop-access
Issuer URL https://keycloak.example.com/realms/aws-realm
Authorization Endpoint https://keycloak.example.com/realms/aws-realm/protocol/openid-connect/auth
Token Endpoint https://keycloak.example.com/realms/aws-realm/protocol/openid-connect/token
JWKS URI https://keycloak.example.com/realms/aws-realm/protocol/openid-connect/certs
Client ID amazon-quick-desktop
  • 点击“Add”保存,确认这条扩展状态显示 是 “Active”。

ℹ️ 注意:

Extension Access 创建后不可编辑! 如果配置有误,必须删除后重建。请仔细核对所有 URL,确保 Keycloak 的 OIDC 端点通过公网 HTTPS 可访问。

7.4 【Amazon Quick Web 用户界面】用户账户下创建 Amazon Quick Desktop 的 Extension

  • 用户使用 SSO 登录 Amazon Quick Web 后,在左侧导航 的 Connect apps and data 下选择 Extensions

[图 57]

  • 点击 Add extension。选择刚创建的 Extension Access
  • 点击 Create,完成后如下图示中最后一条记录:

[图 58]

ℹ️ 注意:

每个用户需要在以下位置存在且 email 完全一致(邮箱大小写也必须匹配!建议统一使用小写。Quick Desktop 通过 OIDC Token 中的 email claim 与 Amazon Quick 中已存在的用户进行匹配。)

位置 操作
Keycloak 在 aws-realm 中创建用户,设置正确的 email(推荐设置 Email verified = ON)
Amazon Quick 在管理控制台 Manage users 中添加该用户(或在用户首次通过 SAML Web 登录自动注册添加)

7.5 【用户电脑】验证 Amazon Quick Desktop 登录

从官网 https://quick.aws.com/ 下载,或者如下图从上一步中配置 Externsions 界面的记录“Actions”中选择您操作系统对应的安装包下载后安装:

[图 59]

安装完成后,启动应用,在登录界面选择 “Contimue with SSO”

[图 60]

浏览器跳转到 Keycloak 登录页面

[图 61]

第一次登录,可能出现 Amazon Quick 的 Account name 输入,请输入 Amazon Quick 账户名(开通 Amazon Quick 时设置的 Account name,在 Amazon Quick Web 管理控制台“账户设置”中能看到),不是邮箱

[图 62]

输入用户名和密码,然后登录:

[图 63]

[图 64]

认证成功后自动跳转回 Amazon Quick Desktop

[图 65]

[图 66]

八、Amazon Quick Mobile 登录以及登录方式可选项

8.1 Amazon Quick Mobile 的 SSO 登录

配置完成后,SSO 同样可以登录 Amazon Quick Mobile App,如下图示过程:

[图 67]

[图 68]

[图 69]

[图 70]

8.2 其他登录可选项

发起方 用户登录入口
IdP 入口 URL https://keycloak.example.com/realms/aws-realm/protocol/saml/clients/amazon-qs
Amazon Quick Amazon Quick 官网
Amazon Quick 服务或 https://us-east-1.quicksight.aws.amazon.com/
  • 对于 Amazon Quick 中如果原来有用户定义,与 SSO 的用户不匹配,仍可以继续使用,同如下 url 进行登录(url 地址在 Amazon Quick Web 管理控制台的 SSO 配置界面最下方提供):https://us-east-1.quicksight.aws.amazon.com/sn/auth/signin?enable-sso=0

九、生产部署和安全建议

本文聚焦于 EC2 单机直接 HTTPS 的方式,适合快速验证。

但是对于生产应用则应考虑可用性更高和数据持久化的架构。对生产环境推荐考虑更多安全性和扩展性需求,例如如下参考架构:

对于这些企业生产应用架构的详细部署步骤不在本文展开。

同时在生产环境部署时,建议注意以下安全选项:

✅ 生产环境必须使用有效 SSL 证书(ACM),不使用自签名证书

✅ Keystore 密码使用强密码,不硬编码在命令行中

Amazon EC2 安全组仅开放必要端口,限定访问的 IP 范围

✅ ACM 证书自动续期,无需手动管理

✅ 每个 IAM 角色仅授予最小权限

✅ 建议开启 Keycloak 的 Revoke Refresh Token,每次 refresh 后旧 Token 立即失效

✅ 考虑为 Keycloak 启用 MFA(TOTP/WebAuthn),参见文档

十、清理资源

如果本方案仅用于测试,请在完成后清理资源以避免产生费用:

十一、总结

在企业环境中,用户面临多套凭证管理和反复登录的困扰。本文以场景 B(企业已通过 IAM Identity Center 管理 Kiro 等服务的订阅,希望在保留现有用户体系不变的前提下,为 Amazon Quick 启用 SSO 登录)为实际案例,详细介绍了如何使用开源身份提供商 Keycloak 为 Amazon Quick 全系列产品(Web、Mobile、Desktop 及浏览器扩展)配置联合身份访问。

本方案的核心设计是:在一个 Keycloak Realm(aws-realm)下创建两个 Client,通过 SAML 2.0 和 OIDC 双协议分别服务不同的 Amazon Quick 组件,同时共享同一套用户、组和角色体系。

通过上述方案,企业可以获得:

  • 统一身份管理:一个 Keycloak Realm 管理所有用户,一套凭证实现多端访问
  • 灵活的角色控制:通过 Keycloak 的组和角色映射实现 Amazon Quick Admin/Author/Reader 权限分级
  • 桌面端无缝体验:Quick Desktop 企业登录与 Web SSO、Mobile SSO 共享同一套用户体系
  • 现有体系无侵入:保留 IAM Identity Center 原有配置和用户不变,Keycloak 与现有应用并存
  • 可扩展的桥接能力:对于已有 AD FS、Okta 等 SSO 系统的企业(场景 D),Keycloak 可作为桥接层实现联合登录

本文的配置和步骤来自客户需求的 PoC 实践,已在实际环境中完成部署验证。对于生产环境部署,建议参考”生产部署和安全建议”章节。读者可在此基础上,根据自身实际场景和安全合规要求做进一步优化调整。同时,由于 Amazon Quick 尚处于 Preview 预览阶段,很多功能正在快速更新,采用本方案部署 Amazon Quick SSO 时请留意最新的官方文档。

➡️ 下一步行动:

相关产品

  • Amazon Quick — AI assistant for research, business insights, automation, and no-code app building
  • Amazon EC2 — Secure and resizable compute capacity for virtually any workload
  • Amazon IAM — Management of identities and access to AWS services and resources
  • Amazon QuickSight — Fast business analytics service
  • Amazon CloudFront — Global content delivery network to accelerate web and API performance

相关文章:

十二、参考资源

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

黄振武

西云数据解决方案架构师,曾就职于多家外企、头部央企,专注于云计算和AI解决方案设计和技术咨询,20+年软件开发、项目交付、咨询等丰富的行业实践经验,擅长系统架构、容器/云原生、AI等领域。


AWS 架构师中心:云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用