使用开源 Authentik 实现 AWS 单点登录
前言懒得自己编了, Gemini 这样介绍 Authentik:简单来说Authentik 是一款功能极其强大的开源身份验证与访问管理 (IAM) 解决方案。如果你觉得像 Okta 或 Auth0 这种商业服务太贵或者觉得像 Keycloak 这种传统方案配置起来太头疼那么 Authentik 就是一个非常现代且灵活的替代品。它主要用于为你的应用、服务器和网络服务提供统一的登录入口。官网: https://goauthentik.io/本文将基于开源版的 Authentik 使用 Docker 部署, 并完成和 AWS 控制台单点登录的配置. 下面正文开始.部署 Authentik参考官方 Docker Compose 部署文档 在安装好 Docker 和 Docker-Compose 环境的 Ubuntu 系统中实现:# 创建存储 Authentik 数据的文件夹mkdirauthentikcdauthentik# 下载官方的 docker-compose 配置模板wgethttps://docs.goauthentik.io/compose.yml# 生成 PostgreSQL 数据库随机密码 (保存在 .evn 环境变量配置文件中)echoPG_PASS$(openssl rand-base6436|tr-d\n).envechoAUTHENTIK_SECRET_KEY$(openssl rand-base6460|tr-d\n).env# 启动dockercompose pulldockercompose up-d注: 国内需要给 Docker 附魔才能正常拉镜像, 参考 配置 Docker 使用代理默认配置下, Authentik 监听端口为9000和9443, 启动后访问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_providerreturnarn: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就中returnuser.username至此, 我们就完成了两个 Property Mapping 的准备工作创建 Application Provider继续在 Authentik 管理界面打开 Applications Create with ProviderApplication 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:authentikAdvanced protocol settings:Property mappings: 把上面创建好的两个映射都选中移到 Selected User Property MappingsService 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 代码中写的一致:创建 RoleTrusted 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 RoleAuthentik_Role全文完.补充: 修改登陆后默认 Region默认配置完成后登陆的 AWS Console 是北京区, 如果需要设置为默认宁夏区, 需要修改 SAML Provider, 展开 Advanced protocol settings编辑 Default relay state 内容为宁夏区的 Console 首页 URLhttps://cn-northwest-1.console.amazonaws.cn/console/home?regioncn-northwest-1
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2500874.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!