使用开源 Authentik 实现 AWS 单点登录

前言

懒得自己编了, Gemini 这样介绍 Authentik:

简单来说,Authentik 是一款功能极其强大的开源身份验证与访问管理 (IAM) 解决方案。

如果你觉得像 Okta 或 Auth0 这种商业服务太贵,或者觉得像 Keycloak 这种传统方案配置起来太头疼,那么 Authentik 就是一个非常现代且灵活的替代品。它主要用于为你的应用、服务器和网络服务提供统一的登录入口。

官网: https://goauthentik.io/

本文将基于开源版的 Authentik 使用 Docker 部署, 并完成和 AWS 控制台单点登录的配置. 下面正文开始.

部署 Authentik

参考官方 Docker Compose 部署文档 在安装好 Docker 和 Docker-Compose 环境的 Ubuntu 系统中实现:

bash 复制代码
# 创建存储 Authentik 数据的文件夹
mkdir authentik
cd authentik

# 下载官方的 docker-compose 配置模板
wget https://docs.goauthentik.io/compose.yml

# 生成 PostgreSQL 数据库随机密码 (保存在 .evn 环境变量配置文件中)
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env

# 启动
docker compose pull
docker compose up -d

注: 国内需要给 Docker 附魔才能正常拉镜像, 参考 配置 Docker 使用代理

默认配置下, Authentik 监听端口为 90009443, 启动后访问 http://server_ip:9000 等待系统加载完成:

刷出来登陆界面就表明系统准备就绪了:

初始化 Authentik

系统就绪后, 首先访问地址 http://server_ip:9000/if/flow/initial-setup/ 进入初始化配置界面:

输入邮箱, 密码, 继续后来到用户视角的首页. 注意这里输入的邮箱和密码就是管理员账号.

点击右上角的 Admin interface 进入后台管理界面:

至此, Authentik 就准备就绪了, 下面开始配置 AWS 控制台单点登录的流程.

AWS 信任关系配置

这里使用 IAM SAML 方式进行配置, 参考文档 Integrate with Amazon Web Services (Classic IAM)

Authentik 配置

Property Mappings 配置

解释一下为啥需要做这一步, 这是因为在传递身份信息时的 SAML 断言文档里面会有大量的属性, 我们需要通过这种方式明确让 Authentik 给 AWS 传递信息的时候将符合 AWS 格式要求的 SAML 属性给带进去.

打开 Authentik 管理员界面, Customization > Property Mappings > Create

选择 SAML Provider Property Mapping

填入以下信息:

  • Name: AWS Role Mapping (这个不要求, 也可以自己命名)

  • SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/Role (注意这个属性名称在中国区 AWS 也是这样写)

  • Friendly Name: 留空

  • Expression: 这个是 Python 代码, 对于固定的单个目标 AWS Role, 直接 return 符合要求格式的 ARN 就行. 由于目前还没有在 AWS IAM 中创建对应的 Role 和 SAML Provider, 所以这里就直接先按格式写好名字, 后面再创建. 下面例子中我规划的 Role 名称 Authentik_Role, SAML Provider 名称 Authentik_provider

    python 复制代码
    return "arn:aws-cn:iam::123456789012:role/Authentik_Role,arn:aws-cn:iam::123456789012:saml-provider/Authentik_provider"

重复上面相同的操作, 再创建一个新的 Property mapping:

  • Name: AWS Role Session Name (这个不要求, 也可以自己命名)

  • SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/RoleSessionName (注意这个属性名称在中国区 AWS 也是这样写)

  • Friendly Name: 留空

  • Expression: 这个很简单, 直接返回 user.username 就中

    python 复制代码
    return user.username

至此, 我们就完成了两个 Property Mapping 的准备工作

创建 Application & Provider

继续在 Authentik 管理界面打开 Applications > Create with Provider

Application Name 填入 AWS, 下方会自动生成 Slug, 继续

Provider 选择 SAML Provider 继续

注意下面配置 Provider 时, 中国区 AWS 用特定内容:

  • Name: 用自动生成的就好
  • Authorization flow: default-provider-authorization-implicit-consent (Authorize Application)

Protocol settings:

  • ACS URL: https://signin.amazonaws.cn/saml (注意中国区是 .cn)
  • Issuer: authentik

Advanced protocol settings:

  • Property mappings: 把上面创建好的两个映射都选中移到 Selected User Property Mappings

  • Service Provider Binding: Post (默认就是这个, 确认一下)

下一步 Configure Policy/User/Group Bindings 不做设置, 继续下一步完成配置.

下载 Metadata

打开 Applications > Providers > AWS, 在 Related objects 下方下载 Metadata

得到 XML 文件 Provider for AWS_authentik_meta.xml 后我们接下来就要到 AWS 控制台进行配置.

AWS IAM 配置

创建 Identity provider

类型选择 SAML, 注意 Provider name 需要和前面我们准备 Property mapping 时在 Python 代码中返回的 ARN 中名称一致, 得叫 Authentik_provider, 选择上一步下载的 Provider for AWS_authentik_meta.xml 作为 Metadata 文档上传.

创建完成后打开详情, 确认 ARN 和前面 Python 代码中写的一致:

创建 Role

Trusted entity type 选择 SAML 2.0 federation, 并选择上面创建好的 Authentik_provider, 允许的操作选择 Allow programmatic and Amazon Web Services Management Console access

勾选要赋予的权限策略下一步, 需要注意这里 Role 的名称也需要和前面我们准备 Property mapping 时在 Python 代码中返回的 ARN 中名称一致, 得叫 Authentik_Role, 完成创建.

测试

为了避免浏览器缓存影响测试, 新开一个浏览器隐私窗口, 访问 Authentik 首页, 可以看到 My applications 中出现了前面准备好的 AWS 应用:

点击图标即可跳转至 AWS 控制台, 右上角确认当前使用的联合身份为 IAM Role Authentik_Role 🎉🎉🎉

全文完.

相关推荐
亚马逊云开发者21 小时前
OpenClaw 接入 Amazon Bedrock 模型选择完全指南:Nova/Claude/Llama 三大模型家族怎么选不花冤枉钱
aws·亚马逊云科技·amazon bedrock·模型选择·openclaw
亚马逊云开发者2 天前
给 AI 助手装个"记忆芯片"🧠:OpenClaw + S3 Vectors 搞定个人知识库
aws
亚马逊云开发者2 天前
写了个 Skill 让 OpenClaw 自动查 AWS 账单,从此告别手动翻控制台
aws
亚林瓜子2 天前
为AWS ElastiCache添加CPU和内存利用率告警
云计算·aws
亚马逊云开发者3 天前
血的教训!OpenClaw 从月烧 200 刀到 30 刀,我都踩了哪些坑?
aws
Moshow郑锴3 天前
2026.3 AWS连环事故原因分析-究竟是裁员导致还是AI失控?
人工智能·云计算·aws·incident
Lim小刘3 天前
告别“裸奔”:OpenClaw 龙虾 Agent 在 AWS 上的企业级安全加固实战
人工智能·安全·aws·openclaw
亚马逊云开发者3 天前
🔐 老板说OpenClaw权限太大了?手把手教你收紧到刚刚好!
aws