中国区 AWS 控制台集成 ADFS 登录

前言

本文将使用一台 Windows Server 2019 服务器实现自建 AD + ADFS 环境集成到中国区 AWS 控制台进行单点登录.
参考文档: https://aws.amazon.com/cn/blogs/china/adfs-bjs/

配置 AD

生产环境建议先给本地连接设置静态 IP 地址, 不设置也没事儿, 后面配置功能的时候会有 Warning 提示, 测试环境忽略不碍事. 管理员身份打开 PowerShell 执行下面命令:

# 重命名主机名 (自动重启)
Rename-Computer -NewName "ADFS" -Restart

# 添加 AD 功能
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools

# 创建新的林和名为 alian.com 的域 (需要设置 SafeMode 恢复密码, 自动重启)
Install-ADDSForest -DomainName alian.com -InstallDNS

创建 AD 账号

# 创建新的 OU
New-ADOrganizationalUnit -Name "AWS" -Path "DC=alian,DC=com"

# 创建组
New-ADGroup -Name "AWS-Admin" -Path "OU=AWS,DC=alian,DC=com" -GroupScope Universal
New-ADGroup -Name "AWS-ReadOnly" -Path "OU=AWS,DC=alian,DC=com" -GroupScope Universal

# 创建用户
New-ADUser -Name "awsadmin" -DisplayName "AWS Administartor" -SamAccountName "awsadmin" -EmailAddress "awdadmin@alian.com" -UserPrincipalName "awsadmin@alian.com" -Path "OU=AWS,DC=alian,DC=com" -AccountPassword (ConvertTo-SecureString "Password123#" -AsPlainText -Force) -ChangePasswordAtLogon $false -Enabled $true -PasswordNeverExpires $true

# 将用户添加到组
Add-ADGroupMember -Identity "CN=AWS-Admin,OU=AWS,DC=alian,DC=com" -Members "CN=awsadmin,OU=AWS,DC=alian,DC=com"

New-ADUser 文档: https://learn.microsoft.com/en-us/powershell/module/activedirectory/new-aduser?view=windowsserver2022-ps#examples
Add-ADGroupMember 命令中需要传入包含 OU 信息的完整路径

ADFS 基础配置

# 安装 ADFS 和 IIS 功能
Install-WindowsFeature -Name ADFS-Federation,Web-Server -IncludeManagementTools

# 创建自签名证书
New-SelfSignedCertificate -DnsName "adfs.alian.com" -CertStoreLocation "Cert:\LocalMachine\My"

# 创建 ADFS Farm
$cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object { $_.Subject -match "adfs.alian.com" }
Install-AdfsFarm -CertificateThumbprint $cert.Thumbprint -FederationServiceName "adfs.alian.com" -ServiceAccountCredential (Get-Credential -Credential alian\administrator)

# 添加 DNS 解析
$ip = (Get-DnsServerResourceRecord -ZoneName "alian.com" -Name $env:COMPUTERNAME).RecordData.IPv4Address.IPAddressToString
Add-DnsServerResourceRecord -Name "adfs" -ZoneName "alian.com" -A -IPv4Address $ip

安装 Firefox 或 Chrome 浏览器, 访问 https://adfs.alian.com/FederationMetadata/2007-06/FederationMetadata.xml 下载 XML 文件备用.

AWS IAM 配置

打开 IAM 控制台 > Identity providers > Add provider > Provider type: SAML, 起个名字, 打开上一步下载好的 Metadata XML 文件, 保存
在这里插入图片描述
保存后, 复制 ARN 信息备用.
在这里插入图片描述
再打开 Roles > Create role > Trust entity type 选择 “SAML 2.0 federation”, 下面的 provider 选择上一步创建好的项目, 选择 “Allow programmatic and Amazon Web Services Management Console access” 允许联合登录访问控制台
在这里插入图片描述
选择托管策略 AdministratorAccess, Role name 输入 ADFS-Admin, Review 一下创建. 注意这里给 Role 起的名称前缀 ADFS- 将会用在后续做信任转换匹配.
在这里插入图片描述
复制 Role ARN 后面备用
在这里插入图片描述

ADFS 进阶配置

# 添加 Relying Party Trust (信赖方信任)
Add-AdfsRelyingPartyTrust -Name "AWS Console" -MetadataURL "https://signin.amazonaws.cn/static/saml-metadata.xml" -AccessControlPolicyName "Permit everyone"

# 存入变量
$rp = Get-AdfsRelyingPartyTrust -Name "AWS Console"

接下来是重点也是最难搞的一步, 就是配置转换规则, 将 SAML 中解析出来的内容映射到 AWS IAM 可以匹配的 Role. 官方文档里面用的是 GUI 一条一条添加的, 实例规则代码还有一些纰漏, 不如继续用 PowerShell 搞. 注意替换 $rule 中 ARN 和前面 IAM 中的信息保持一致.

$rule = @'
@RuleTemplate = "MapClaims"
@RuleName = "NameId"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");

@RuleTemplate = "LdapClaims"
@RuleName = "RoleSessionName"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 => issue(store = "Active Directory", types = ("https://aws.amazon.com/SAML/Attributes/RoleSessionName"), query = ";mail;{0}", param = c.Value);

@RuleName = "Get AD Groups"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);

@RuleName = "Roles"
c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"]
 => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws-cn:iam::123123123123:saml-provider/alian.com-adfs,arn:aws-cn:iam::123123123123:role/ADFS-"));
'@

Set-AdfsRelyingPartyTrust -TargetRelyingParty $rp -IssuanceTransformRules $rule

# 开启 SingonPage 否则会出现后面无法登录的错误
Set-AdfsProperties -EnableIdpInitiatedSignonPage $true

# 重启 ADFS 服务
Restart-Service adfssrv

测试访问

使用 Firefox 访问 https://adfs.alian.com/adfs/ls/IdpInitiatedSignOn.aspx
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

填坑

如果没有执行前面Set-AdfsProperties -EnableIdpInitiatedSignonPage $true 登录后会报错:

    Activity ID: 9c0aa720-9776-4b96-0700-0080000000fb
    Error details: MSIS7012: An error occurred while processing the request. Contact your administrator for details.
    Node name: 7440faec-1a4f-4023-b34c-caf6be8fada7
    Error time: Wed, 22 May 2024 14:18:13 GMT
    Cookie: enabled
    User agent string: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

在这里插入图片描述

# 检查 ADFS 属性, 默认并没有开启 SingonPage
Get-AdfsProperties | Select-Object -Property EnableIdpInitiatedSignonPage

# 打开
Set-AdfsProperties -EnableIdpInitiatedSignonPage $true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/646019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel表格写存神器--xlwt

原文链接:http://www.juzicode.com/python-tutorial-xlwt-excel 在 Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd,今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头,rd是read的简写…

数字图像的几种处理算法

文章目录 1.二值化 2.海报化 3.灰度化 1)分量法 2)最大值法 3) 平均值法 4) 加权平均法 4.模糊化 1.二值化 二值化就是将图像划分成黑和白,通过设定一个标准(如果大于这个标准就设为白,如果小于这个标准,就设为黑&#x…

布鲁可冲刺上市:极其依赖第三方,多个授权将到期,朱伟松突击“套现”

“奥特曼”概念股来了。 近日,布鲁可集团有限公司(下称“布鲁可”)递交招股书,准备在港交所主板上市,高盛和华泰国际为其联席保荐人。据贝多财经了解,布鲁可的经营主体为上海布鲁可科技集团有限公司。 天眼…

Kiwi浏览器 - 支持 Chrome 扩展的安卓浏览器

​【应用名称】:Kiwi浏览器 - 支持 Chrome 扩展的安卓浏览器 ​【适用平台】:#Android ​【软件标签】:#Kiwi ​【应用版本】:124.0.6327.2 ​【应用大小】:233MB ​【软件说明】:一款基于开源项目 Chr…

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…

Python 小游戏——贪吃蛇

Python 小游戏——贪吃蛇 文章目录 Python 小游戏——贪吃蛇项目介绍环境配置代码设计思路1. 初始化和变量定义2. 创建游戏窗口和FPS控制器3. 初始化贪吃蛇和食物的位置4. 控制贪吃蛇的方向和分数5. 主游戏循环 难点分析源代码呈现代码结果 项目介绍 贪吃蛇游戏是一款通过上下…

解析售后维修服务平台如何助力企业高效运营与决策

随着生活质量的不断提高,人们对于售后服务的要求也越来越多。因此,售后服务已经成为企业竞争力的重要组成部分。售后服务平台作为连接企业与消费者的桥梁,不仅关乎着消费者的满意度,而且直接影响着企业的品牌形象与市场地位。那么…

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频,觉得还是要先写个提纲,给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP,HLS 闲聊点 先说下学习命令行吧,学习命令行是为了…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

记一次安卓“Low on memory“崩溃问题

前言 最近再调人脸识别算法相关demo,发现调试期间总是偶发性崩溃,捕获不到异常的那种,看日志发现原因是Low on memory,一开始还疑惑 App内存不够应该是OOM啊,怎么会出现这种问题,百思不得其解,直到我打开了 Android s…

HTML+CSS+JS(web前端大作业)~致敬鸟山明简略版

HTMLCSSJS【动漫网站】网页设计期末课程大作业 web前端开发技术 web课程设计 文章目录 一、网站题目 二、网站描述 三、网站介绍 四、网站效果 五、 网站代码 文章目录 一、 网站题目 动漫网站-鸟山明-龙珠超 二、 网站描述 页面分为页头、菜单导航栏(最好可下拉&…

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回&#xff0c…

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出:一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景:防抖、节流 2.1防抖 举…

PLC_博图系列☞R_TRIG:检测信号上升沿

PLC_博图系列☞R_TRIG:检测信号上升沿 文章目录 PLC_博图系列☞R_TRIG:检测信号上升沿背景介绍R_TRIG: 检测信号上升沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 R_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

Neural Networks and Deep Learning环境搭建

1.进入Anaconda prompt 2.创建虚拟环境 (1)最简单的创建 python 虚拟环境的命令是: conda create -n your_env_name # your_env_name 为你虚拟环境名(2)我在这里创建一个名为:deep_study的 python2.7版…

Outlook关闭垃圾邮件过滤的方法

Outlook关闭垃圾邮件过滤的方法 | LogDicthttps://www.logdict.com/archives/outlookguan-bi-la-ji-you-jian-guo-lu-de-fang-fa

解决vite打包只生成了一个css和js文件问题

文章目录 1. 打包遇到的问题2. 问题原因及修改3. 调整后再次打包🆗 1. 打包遇到的问题 今天整了一个项目,试了下打包,发下打包后只生成了一个css文件,和一个js文件, 这样肯定是不行的,因为这样这个文件的包…

CSS常用设置

对于前端开发人员来说&#xff0c;最难的一步莫过于CSS&#xff08;是否同感&#xff1f;&#xff09; 在最近的项目中学习了一些CSS设置&#xff0c;特意来分享~ 容器内容水平垂直居中 先准备个容器和内容&#xff08;一个盒子&#xff09; <div id"app">…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…