前言

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

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

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

官网: https://goauthentik.io/
在这里插入图片描述
本文将基于开源版的 Authentik 使用 Docker 部署, 并完成和 AWS 控制台单点登录的配置. 下面正文开始.

部署 Authentik

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

# 创建存储 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
    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 就中
    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 🎉🎉🎉
在这里插入图片描述
全文完.

补充: 修改登陆后默认 Region

默认配置完成后登陆的 AWS Console 是北京区, 如果需要设置为默认宁夏区, 需要修改 SAML Provider, 展开 Advanced protocol settings
在这里插入图片描述
编辑 Default relay state 内容为宁夏区的 Console 首页 URL https://cn-northwest-1.console.amazonaws.cn/console/home?region=cn-northwest-1在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐