亚马逊AWS官方博客
适部署用于 WorkSpaces 的 LinOTP 多重身份验证
Amazon WorkSpaces 支持通过各种 RADIUS 提供商进行多重身份验证。本指南将概述使用 AWS Auto-Scaling Group (ASG) EC2 实例配置 LinOTP/FreeRadius 所需的步骤。此外,ASG 前面将有一个 AWS 应用程序负载均衡器来处理 HTTPS 令牌注册请求,以及一个 AWS 网络负载均衡器来处理来自 WorkSpaces 客户端的多重身份验证请求。通过利用 ASG,LinOTP 具有高可用性和容错性。
解决方案设计
先决条件
以下是本指南的先决条件
- 具有创建和修改本指南所需资源的适当权限的AWS 帐户。
- Amazon WorkSpaces 环境。
- 至少具有2 个私有子网和2 个公共子网的VPC。
- 用于 LinOTP 前端的注册域。
使用的组件
本指南使用以下组件
- Amazon RDS – LinOTP 令牌数据库。
- Amazon EC2 – LinOTP / FreeRadius EC2。
- AWS 应用程序负载均衡器 – 为 LinOTP 提供 HTTPS 请求。
- AWS 网络负载均衡器 – 为 WorkSpaces MFA 提供 UDP RADIUS 请求。
- AWS Certificate Manager – 应用程序负载均衡器的 SSL 证书。
- Route53 – 应用程序负载均衡器的 DNS“A”记录。
创建 SSL 证书
通过应用程序负载均衡器对 LinOTP 实例的 HTTPS 请求将需要有效的 SSL 证书。
- 打开Amazon Certificate Manager控制台,选择 Request a Certificate 并选择 Request a public certificate。
- 输入证书的域名,然后单击“下一步”。
- 对于验证方法,选择 DNS 验证并单击下一步。
- 输入此证书的任何可选标签,然后单击下一步,然后单击请求证书
- 请求进行中后,您需要验证您是否拥有正在使用的域名。单击 Route 53 中的创建记录。创建记录后,最多可能需要 30 分钟来验证身份并颁发证书。
创建RDS数据库
- 打开 Amazon RDS 控制台,并单击创建数据库。
- 选择标准创建并选择 MySQL。
- 对于版本选择 MySQL 5.7.34。
- 选择与您的用户环境相关的适当数据库实例类、存储、连接、身份验证和其他配置选项,然后单击创建数据库。
注意:数据库应驻留在私有子网中,并且不能从 Internet 访问。
- 配置完成后,请记下端点地址以及用于管理的用户名和密码。
创建 EC2
在本节中,我们将创建一个 EC2,该EC2将用作我们的模板,用于创建在我们的启动模板中使用的 AMI。这将是将在本文档后面的 Auto-Scaling 组中使用的标准模板。
- 打开 EC2 控制台并单击启动实例。
- 配置一个 Amazon Linux 2 EC2,用于创建 AMI 和关联的启动模板。
- 按照标题为FreeRADIUS MFA 与 Amazon WorkSpaces 集成的博客中的说明进行操作。这将指导您完成 LinOTP 和 FreeRADIUS 的一般设置。
完成后,我们需要对 LinOTP 配置进行一些更改,以将 RDS 数据库用于令牌。
- 通过 SSH 连接到您的 EC2 并创建一个 INI 配置文件
mv /etc/linotp2/linotp.ini.example /etc/linotp2/linotp.ini
- 编辑 /etc/linotp2/linotp.ini 并将 sqlalchemy.url 变量更改为指向您的 RDS 数据库实例
Sqlalchemy.url=mysql://<username>:<password>@<rds_endpoint>/<database>
<username> = 数据库用户名
<password> = 数据库密码
<rds_endpoint> = RDS 端点 URL
<database> = RDS 数据库名称
3.设置加密密钥
sudo dd if=/dev/urandom of=/etc/linotp2/encKey bs=1 count=96
- 设置数据库
paster setup-app /etc/linotp2/linotp.ini
创建 AMI 并启动配置
- 打开EC2 控制台并选择 Instances (running) 。
- 从 EC2 Instance List 中选择实例并单击 Actions -> Image and templates -> Create Image。
- 指定图像名称、描述(可选)并选择Create Image。
- AMI 完成后,从侧面菜单中选择 Launch Templates 并选择 Create Launch Template。
- 为您的启动模板指定名称和描述,并选中Provide guidance to help me set up a template that I can use with EC2 Auto Scaling。
- 对于 Amazon Machine Image (AMI),选择您在步骤 2 中创建的 AMI。
- 创建启动模板时有许多可用选项。其中大部分将特定于您的环境。完成后选择Create Launch Template。
创建Auto Scaling Groups
- 打开EC2控制台。
- 在EC2控制台中,从菜单中选择 Auto Scaling Groups。输入名称以标识组并选择之前创建的启动模板,然后单击下一步。
- 选择您将部署此 Auto Scaling Groups的 VPC,然后选择至少 2 个私有子网,然后单击下一步。
- 保留为步骤 3 选择的默认值,然后单击下一步。在此步骤中,我们不会创建负载均衡器。
- 输入您想要的容量、最小容量和最大容量,然后单击下一步。
- 审查您的选项并单击创建 Auto Scaling Groups。
创建目标组
我们将创建 2 个目标组,一个用于我们的 HTTPS (LinOTP) 请求,另一个用于我们的 UDP (RADIUS) 请求。
- 创建 HTTPS 目标组
- 启动 EC2 控制台。
- 从目标组菜单中单击New Target Group。
- 从目标类型中选择Instances并指定目标组名称。
- 协议选择HTTPS,端口选择443。
- 选择和 Auto Scaling Groups相同的 VPC 和 HTTP1 的协议。
- 将协议设置为 HTTPS,将health checks路径设置为 /selfservice/login,然后单击下一步。
- 在注册目标屏幕上选择创建 Auto Scaling Groups时配置的实例,然后单击。
- 创建 UDP 目标组
- 从目标组菜单中单击New Target Group。
- 从目标组菜单中单击New Target Group。
- 协议选择UDP,端口选择1812。
- 选择与和Auto Scaling Group相同的 VPC。
- 对于健康检查,将协议设置为 TCP。
- 在注册目标屏幕上选择创建 Auto Scaling Group时配置的实例,为所选实例的端口输入 1812,然后单击下面的Include as pending below,然后单击Create target group。
创建负载均衡器
此解决方案将使用 2 个负载平衡器。第一个是应用程序负载均衡器,它将处理 LinOTP 应用程序的 HTTPS 请求,例如令牌注册。第二个是网络负载均衡器,它将处理来自 Amazon WorkSpaces 的所有 RADIUS 请求。
- 创建应用程序负载均衡器
- 打开EC2控制台。
- 在负载均衡器菜单下选择Create Load Balancer,然后在Application Load Balancer选项下选择创建。
- 在 Basic Configuration 下提供负载均衡器名称,为地址类型选择面向 Internet 和 IPv4。
- 选择与您的自动扩展组相同的 VPC,并为 ALB 选择至少 2 个子网。注意:这些必须是公共子网。
- 在Security Groups下,选择将允许 HTTPS 流量的安全组。如果您没有包含这些规则的安全组,您现在可以创建一个。
- 对于Listeners and routing,协议选择HTTPS,选择你在上一节中创建的与HTTPS协议的目标组。
- 在Secure Listener settings保留默认安全策略并选择您在之前创建的 SSL 证书,然后单击创建负载均衡器。
- 记下分配给负载均衡器的 DNS 名称。稍后您将需要它。
- 创建网络负载均衡器
- 打开EC2控制台
- 在负载均衡器菜单下选择Create Load Balancer,然后在Network Load Balancer选项下选择创建。
- 在 Basic Configuration 下提供负载均衡器名称,地址类型选择 internal 和 IPv4。
- 选择与您的自动扩展组相同的 VPC,并为 ALB 选择至少 2 个子网。注意:这些必须是私有子网。
- 在Security Groups下,选择将允许 UDP 1812 流量的安全组。如果您没有包含这些规则的安全组,您现在可以创建一个。
- 对于Listeners and routing,协议选择UDP,端口1812,选择你在上一节中创建的UDP协议的目标组。
- 查看摘要并单击Create load balancer。
- 更新 Auto Scaling Group
- 打开EC2控制台。
- 2. 在 Auto Scaling Groups 下选择之前创建的组。
- 3. 然后单击编辑。
- 4. 检查应用程序、网络或网关负载均衡器目标组部分并选择之前创建的目标组并单击更新。
向 DNS 添加 A 记录
我们需要添加一条 DNS ‘A’ 记录以指向我们的应用程序负载均衡器,以便为 LinOTP 令牌的请求提供服务。
- 打开 Route53 控制台并从 DNS 管理下的列表中选择您的托管区域。
- 选择Create Record。
- 输入记录名称并将记录类型设置为 A – Routes traffic to an IPv4 address and some AWS resources. 选择Alias切换。
- 在 Route traffic to select 框中选择 Alias to Application and Classic Load Balancer。选择您所在的地区并选择之前配置的应用程序负载均衡器,然后单击创建记录。
配置 AD Connector
我们的 Amazon WorkSpaces AD Connector 需要配置为使用 FreeRADIUS 服务器进行多重身份验证。我们会将所有请求转发到网络负载均衡器。
- 从 EC2 控制台的选择中选择Network Interfaces。在过滤器列表中搜索网络负载均衡器。记下负载均衡器所在的每个可用区的主要私有 IPv4 地址。
- 在 WorkSpaces 控制台中,选择目录,然后选择您将配置的目录连接器旁边的单选按钮。
- 选择Actions和更Update Details。
- 向下滚动到多重身份验证。输入网络负载均衡器的 IP 地址和您在第 7 节第 2 步中设置的共享密钥。选择 PAP 作为协议,将超时设置为 30 秒并重试为 3,然后单击更新。
这个解决方案为 Amazon WorkSpaces 部署提供一个可扩展且高度可用的 LinOTP / FreeRADIUS 多因素身份验证解决方案。您可以通过浏览到 https://<your_dns_name>/manage 来浏览您的 LinOTP 部署,其中 <your_dns_name> 是您创建的“A”DNS record。