联合身份验证与Cognito
Hello大家好,我们接下来讨论AWS联合身份验证的内容。
AWS联合身份验证
对于考试,联合身份验证部分是一块非常重要的内容。那什么是联合身份验证,它是做什么用的呢?
联合身份验证,是用来允许AWS外部用户,如您的公司目录中的用户,外部三方用户,通过代入AWS的角色,然后通过代入角色的临时安全凭证的方式访问AWS的资源。
我们看一下联合身份验证大致的流程:
- 首先,您的用户通过第三方的用户系统进行身份验证,AWS要信任这个第三方。
- 当用户登陆时从三方那拿回了凭证,然后通过交换或使用这个凭证来访问AWS资源。
联合身份验证的核心思想是通过AWS信任的第三方的用户系统来执行所有的用户管理行为。
AWS的联合身份有多种形式,我们需要了解所有这些形式,以及在面对不同的使用场景选择最适合的方案:
- 第一个是,SAML 2.0
- 第二个是,用户自定义身份代理
- 然后是使用Cognito的WEB身份验证及【12】不使用Cognito的WEB身份验证
- 还有SSO,单点登陆
- 以及AWS托管的 Microsoft AD (Non-SAML)
使用联合身份验证,不需要我们为这些用户在AWS账户中创建IAM用户,用户管理工作是在AWS外的用户系统中完成的。
那我们接下来的内容就开始讨论上面联合身份验证的几种形式。
SAML 2.0联合身份验证
首先,SAML 2.0联合身份验证。
SAML 2.0,也就是安全断言标记语言 2.0,它支持联合身份验证,是许多身份验证提供商 (IdP) 使用的一种开放标准。
如您的公司已使用支持 SAML 2.0 的身份提供商,比如本地的Active Directory(活动目录),或者ADFS(活动目录联合服务)等,那么可以使用 SAML来简化为AWS 配置联合身份验证的过程。
那在这种场景下,您公司的员工的用户已经在您公司支持 SAML 2.0的身份提供商中存在了,通过配置就可以实现联合单一登录 (SSO),就可以通过临时凭证,然后实现这些用户的登录AWS控制台或调用 Amazon API 操作,而不需要为每个员工都创建一个 IAM 用户。
我们来看下大致的流程:
1、您公司的用户使用客户端应用程序来请求您公司的 IdP (身份提供商)进行身份验证。
2、IdP 根据身份存储对用户进行身份验证。
3、验证通过,IdP 构建一个具有用户相关信息的 SAML 断言,并将此断言发送到客户端应用程序。
4、客户端应用程序调用 AWS STS AssumeRoleWithSAML API,并传递 SAML 提供商的 ARN、要代入的角色的 ARN 以及来自 IdP 的 SAML 断言。
5、然后STS的API 对客户端应用程序的返回临时安全凭证。
6、最后客户端应用程序使用收到的这个临时安全凭证来调用 Amazon S3 API 操作。
同样,整个流程也适用于访问AWS控制台:
1、首先用户通过一个网站比如您公司的门户网站,验证用户的身份。通常在这个场景,门户网站充当处理您公司与 AWS 之间的信任交换的 IdP。
2、然后同样该门户网站生成一个 SAML 身份验证响应,将此返回给客户端浏览器
3、该客户端浏览器将被重定向到 AWS 单一登录终端节点并发布 SAML 断言。
4、SSO终端节点将代表用户请求临时安全凭证,并创建一个使用这些凭证的控制台登录 URL,并作为重定向返回给客户端。
5、最终该客户端浏览器将重定向到 AWS管理控制台。
综上,如果您公司的身份验证提供商 (IdP) 是支持SAML 2.0的,建议采用上述的两种方式调用AWS的API或者访问AWS管理控制台。
SAML 2.0联合身份验证 - Active Directory FS
还有一部分是ADFS联合身份验证过程,
整个过程与前面讨论的SAML 2.0的IdP过程基本是一致的。
可以看到不在使用IdP,取而代之使用ADFS对用户进行身份验证,后端使用AD作为身份存储,ADFS返回给用户SAML断言,发送给STS,然后用户使用临时凭证访问AWS管理控制台或者AWS资源。
那么如何配置SAML 2.0 联合身份验证呢?
在使用前面所述的基于 SAML 2.0 的联合身份验证之前,您必须先配置组织的 IdP 和您的 AWS 账户,使之相互信任。
然后在通过相应配置,就可以通过SAML 2.0 实现基于WEB的跨域SSO(单点登陆)。当您公司的用户登陆公司的门户后,即可获得对多个AWS账户的访问,而不需要在重复登陆AWS进行身份认证。
这种方式是通过客户端应用程序调用 AWS STS AssumeRoleWithSAML API,前面流程我们已经讨论过了,要记住这一点。
目前AWS有一个服务叫做AWS Single Sign-On,可以更加简单的实现上述的SAML 2.0联合身份验证,也是AWS更加推荐的方式,我们也会在后面的课时讨论。
自定义身份代理
前面我们讨论了基于SAML2.0的联合身份验证,那如果您公司的IdP不兼容SAML2.0,就需要使用自定义身份代理,来访问AWS控制台或资源。
这种方式需要在身份代理处分配给用户适当的IAM策略,所以需要在这里做更多的工作。为用户获取临时安全凭证通过AssumeRole(推荐)或 GetFederationToken API 操作。
我们看下整个流程,和之前有些区别:
- 用户进行登陆,然后到身份代理程序,通过公司的身份存储进行用户登陆验证;
- 验证通过后,身份代理程序直接和STS通信,获取临时安全凭证,用于允许用户执行授权的操作。大家注意,这部分和之前SAML2.0的流程是有区别的,之前是在用户侧和STS进行通信,而这里是身份代理程序直接和STS通信。
- 然后身份代理获取临时凭证后,将其传给用户,然后用户就可以通过这些凭证访问AWS的资源如EC2、S3等或访问AWS管理控制台。
所以这里主要和之前SAML2.0联合身份验证的主要区别是,自定义身份代理方案,不是用户侧和STS交互临时凭证,而是在身份代理这里与STS交互临时凭证。
**对于考试而言,只有在您的组织没有使用与 SAML 兼容的身份提供商 (IdP)时,才使用自定义身份代理。**还有一点,这个方案的身份代理部分是否配置正确非常的重要,而且会涉及到很多的工作。
Web联合身份验证 - AssumeRoleWithWebidentity API
好的,接下里我们讨论下Web 联合身份验证。
比如我们创建了一个移动程序,或者WEB应用程序,我们希望能够让用户访问到我们AWS账户下的指定的资源,如S3,DynamoDB,存储一些用户的数据,这是非常常见的场景。
- 第一种实现方式是编写代码然后通过调用 AssumeRoleWithWebIdentity API;这也是常用的方式;
- 而AWS更推荐使用AWS Cognito来取代上面这种方式。AWS认为Cognito更棒,除了实现所有功能,还允许匿名访问,支持数据同步,以及MFA认证。
那我们也看一下第一种方式的流程:
1、手机的应用程序调用第三方身份提供商对用户和应用程序进行身份验证,比如amazon,google,facebook等等。身份提供商会返回 Web 身份验证令牌到应用程序。
2、然后应用程序通过AssumeRoleWithWebIdentity API调用STS并传递Web 身份验证令牌,STS返回临时凭证,允许应用代入IAM角色和访问AWS资源。
3、最后应用程序就可以访问如这个图示中的例子DynamoDB的表。
SAML 2.0联合身份验证 - AWS Cognito
那前面也提到了,AWS推荐使用AWS Cognito来实现WEB联合身份验证,我们来看一下。
- 需要使用 Amazon Cognito 创建一个IAM角色,这个角色的权限要遵循所需最小权限原则;
- 同样在OIDC IdP和Cognito两侧要建立信任。
我们来看下整个架构:
您的应用程序的用户可以使用他的三方如google、facebook、amazon、cognito账密登陆;
然后应用程序使用 Cognito API 操作将 登陆三方的令牌交换成 Cognito 令牌;
接着应用程序使用 Cognito 令牌从 AWS STS 请求临时安全凭证;
最后应用程序可使用临时安全凭证访问应用程序运行所需的 AWS 资源,与临时安全凭证关联的角色及其分配的策略将决定它可访问的资源。
整个流程和API的方式有些类似,但是使用Cognito的优势是:
- Cognito支持匿名用户,而WebIdentity API是不支持的。
- 它支持MFA,所以可以在过程中强制使用MFA,这样我们就有了更多的安全保障。
- 最后是数据同步。
另外如果大家在哪里看到一个叫做TVM,Token Vending Machine,这是AWS比较老的一个解决方案,目前使用Cognito来替代它。
最后如果在考试中看到WEB联合身份验证相关的内容,AWS总是希望您会选择使用Cognito,它有很多的优势,另外AWS总是希望您选择AWS的服务来实现需求。
Web联合身份验证 - 识别用户的身份
在使用Web 联合身份验证在 IAM 中创建访问策略时,可根据已使用外部身份提供商 (IdP) 进行身份验证的用户的 ID 指定权限,这是通过IAM的策略变量来实现的。策略变量对我们面对一些场景时是非常有帮助的。
那在IAM策略中如何获取用户登陆后外部身份提供商对应的该用户的ID呢:
我这里列了一下congnito,amazon,facebook,google这4家的方式:
- congnito是通过:cognito-identity.amazonaws.com:sub
- amazon.com是通过:www.amazon.com:user_id
- facebook是通过:graph.facebook.com:id
- google是通过:accounts.google.com:sub
我们来看一个例子:
这是一个IAM策略,允许操作,动作是s3:ListBucket。
关键是在这个condition,它的意思是只有在 Amazon S3 中的存储桶前缀与这个字符串匹配时,该策略才会为该存储桶授予访问权限。而这里变量www.amazon.com:user_id,会代入用户通过amazon.com登陆后对应的该用户的ID,所以也就是说,这个策略的作用是假定用户使用 Login with Amazon 登录,该用户只能访问对应自己的ID的这个存储桶前缀位置。
这为使用Web 联合身份验证时,分配用户的权限提供了更多的灵活性。
那我们最后概括一下,使用联合身份验证,来管理 AWS 外部的用户身份;而IAM策略可以通过策略变量代入用户ID的方式,为外部的联合身份用户分配适当的访问权限。
好的,以上就是联合身份验证的内容,希望能够给大家带来帮助。
希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们
相关文章:
联合身份验证与Cognito
Hello大家好,我们接下来讨论AWS联合身份验证的内容。 AWS联合身份验证 对于考试,联合身份验证部分是一块非常重要的内容。那什么是联合身份验证,它是做什么用的呢? 联合身份验证,是用来允许AWS外部用户,如…...
day18_常用API之String类丶Object类
String概述 java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,同时String类提供了很多操作字符串的功能,我们可以直接使用。Java 程序中的所有字符串文字(例如“abc”)都为此类的对象 特点:St…...
OSG三维渲染引擎编程学习之五十五:“第五章:OSG场景渲染” 之 “5.13 一维纹理”
目录 第五章 OSG场景渲染 5.13 一维纹理 5.13.1 一维纹理介绍 5.13.2 一维纹理示例 第五章 OSG场景渲染 OSG存在场景树和渲染树,“场景数”的构建在第三章“OSG场景组织”已详细阐明,本章开始...
RTOS随笔之FreeRTOS启动与同步方法
RTOS启动与同步机制RTOS启动任务切换场景任务同步机制队列信号量事件组任务通知任务延时RTOS启动 FreeRTOS在任务创建完成后调用函数vTaskStartScheduler()启动任务调度器。 vTaskStartScheduler()任务启动函数详解 void vTaskStartScheduler( void ) {BaseType_t xReturn;xR…...
【AI/NLP】InstructGPT数据标注问题
文章目录1 背景介绍2 标记员筛选2.1 标记员筛选标准3 数据集及其标注3.1 预训练3.2 微调3.2.1 SFT-demonstration data3.2.2 RM-comparison data3.3 数据集大小4 模型实现1 背景介绍 ChatGPT的训练过程与InstructGPT相近,大致分为三步: SFT:…...
三次握手和四次挥手
文章目录TCP三次握手为什么要三次握手三次握手可以携带数据吗?三次握手失败,服务端会如何处理?ISN代表什么,意义,何要动态随机什么是半连接队列第2次握手传回了ACK,为什么还要传回SYN?为什么要四次挥手TCP…...
Jmeter常用断言之响应断言详解
响应断言是最常用的一种断言方法,主要是对响应结果中的文本内容进行断言,比如响应结果是否包含指定的值,或者是否等于指定的值。响应断言可以适用各种返回类型的响应结果,如:Test、html、application/json、applicatio…...
【Python学习笔记】36.Python3 MySQL - mysql-connector 驱动(1)
前言 MySQL 是最流行的关系型数据库管理系统,本章节为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。 Python3 MySQL - mysql-connector 驱动 我们可以使用 pip 命令来安装 mysql-connector࿱…...
计算机SCI论文课题设计需要注意什么? - 易智编译EaseEditing
课题设计就要本着严谨性和可行性来进行。实验设计的类型要选择准确,统计学的方法要运用合理,研究对象和观察指标的选择也要符合研究目的的要求,技术路线要清晰明了。 关于课题的设计的可行性也要综合考虑,比如前期的相关工作基础…...
Quartz入门教程
本文参考文章编写 Quartz 官网 Quartz 是 OpenSymphony 开源组织在 Job Scheduling 领域又一个开源项目,是完全由 Java 开发的一个开源任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时ÿ…...
TypeScript 学习之 function
函数可以实现抽象层,模拟类,信息隐藏和模块。 函数有:有名字的函数、匿名函数 在 JavaScript 中的函数 // 有名字的函数 function add(x, y) {return x y; }// 匿名函数 let myAdd function (x, y) {return x y; };函数类型 typescript 可…...
【云计算自学路线】
云计算包含的技术内容和涉及的方向比较多,一定要进行系统化的学习才能更好的掌握这门技术。 云计算作为互联网新技术领域,现阶段也是出于高速发展期,想学习加入云计算行业的小伙伴可以抓紧机会了,跟着小课一起来了解云计算以及它…...
code01 v2黑屏、花屏、死机、断电重启、休眠死机的进来
症状解决 长话简说,症状如下: 使用浏览器、播放视频等,遇到突然死机或花屏死机的情况 关闭硬件加速,如:浏览器中设置关闭硬件加速,出现这种症状的软件都需要设置 开机电流音、播放与暂停时喇叭吱吱想、打…...
分享107个HTML电子商务模板,总有一款适合您
分享107个HTML电子商务模板,总有一款适合您 107个HTML电子商务模板下载链接:https://pan.baidu.com/s/1VW67Wjso1BRpH7O3IlbZwg?pwd0d4s 提取码:0d4s Python采集代码下载链接:采集代码.zip - 蓝奏云 Aplustemplates 购物模板…...
Barra模型因子的构建及应用系列三之Momentum因子
一、摘要 在之前的Barra模型系列文章中,我们已经初步讲解、构建了Size因子和Beta因子,并分别创建了对应的单因子策略。通过回测发现,其中Size因子的小市值效应具有很强的收益能力。而本篇文章将在该系列下进一步构建Momentum因子。 二、模型…...
8.2.1.3 索引合并优化
索引合并访问方法检索具有多个范围扫描的行,并将其结果合并为一个。此访问方法仅合并来自单个表的索引扫描,而不是跨多个表的扫描。合并可以生成其基础扫描的合并、交叉或交叉的合并。 可以使用索引合并的查询示例: SELECT * FROM tbl_name…...
水雨情在线小能手-雨量水位报警站
雨量水位报警站由水位探测器、雨量传感器、报警灯、扩音器、太阳能板和采集传输控制器组成。实时采集水位等级,三个水位探测器对应3个水位等级,当现场水面浸没相应探测器时,本机会实时发出语音报警,同时可发送相应的预警/报警等级…...
【蓝桥杯集训4】双指针专题(6 / 6)
目录 3768. 字符串删减 - 滑动窗口ac 799. 最长连续不重复子序列 - 滑动窗口 800. 数组元素的目标和 - 二分ac 2816. 判断子序列 - 双指针 1238. 日志统计 - 滑动窗口 1240. 完全二叉树的权值 - 双指针 1、前缀和 - 通过了 5/12个数据 2、双指针 3768. 字符串删减 -…...
文件流,gzip解压,压缩
目录 文件画布 写入 (空文件Foutnew File(Parent,entry.getName());)FileOutputStream outnew FileOutputStream(Fout);BufferedOutputStream Boutnew BufferedOutputStream(out);其他流量基于基础包装文件--文件流---字节流 顺序pbf一般是形成后再压缩目…...
在线开会,来开开圆桌会议吧~
圆桌会议应用场景:适合内部培训、部门会议亦或是头脑风暴等较为轻松的场景,有兴趣的朋友可以联系我来测试哦~~ 上图: 图:圆桌会议应用截图 在圆桌布局之下,企业可以将每一位参会者和座位绑定,1:1模拟线下圆…...
使用营销自动化的 7 大主要优势
对于大多数企业家来说,自动化已成为在数字时代简化业务的必要条件。那么,您可以采取哪些步骤来实施营销自动化呢? 1. 社交媒体整合 拥有吸引人的社交媒体形象是成功的先决条件。您不可能完成所有社交媒体营销任务,使用自动化软件&…...
【图像分类】基于PyTorch搭建GRU实现MNIST手写数字体识别(单/双向GRU,附完整代码和数据集)
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 在https://blog.csdn.net/AugustMe/article/details/128969138文章中,我们使用了基于PyTorch搭建LSTM实现MNIST手…...
day14_oop_抽象_接口
今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、抽象 三、接口 零、 复习昨日 多态的好处: 扩展性强.加入新的功能,不需要改动代码降低代码耦合度(解耦合或者松耦合) 一、抽象类 1.1 抽象类…...
模式识别 | MATLAB实现DNN深度神经网络模式分类识别
分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测 目录 分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测基本介绍任务描述程序设计参考资料基本介绍 DNN的结构不固定,一般神经网络包括输入层、隐藏层和输出层,一个DNN结构只有一个输入层,一个输出层,输入层和输…...
【C++】类和对象三大特性--继承
文章目录1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承虚拟继承解决数…...
MySQL的存储引擎
目录 一.概念 二.分类 操作 修改默认存储引擎 一.概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不…...
工程项目管理系统源码-简洁+好用+全面-工程项目管理系统
工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 系统定义 工程项目管理企业不直接与该工程项目的总承…...
什么是STAR原则?
文章目录📋前言🔥省流版🎯什么是STAR原则🎯进行过程📋前言 对于大部分还在学习阶段的学生们来说,可能并不了解这个原则的含义,这里的star并不是指英文单词星星。这个原则我也是前段时间才认识到…...
前置知识-初值问题、显式隐式龙格库塔方法、Butcher阵列
1.1.4 龙格一库塔法 将向前欧拉法写成式 (1-37) 的形式, 可以看出它实际上利用了 f ( x , u ) f(x, u) f(x,u) 在 x n...
PythonWeb Django PostgreSQL创建Web项目(二)
安装数据库PostgreSQL并创建数据库 我第一次尝试使用PostgreSQL数据库,why?我喜欢它提供的丰富的数据类型,例如货币类型、枚举类型、几何类型(点、直线、线段、矩形等等)、网络地址类型、文本搜索类型、XML类型JSON类型等等,非常…...
做网站好赚钱吗/站长之家网站排名
华为ssh安全连接的配置方法如下:在模拟器ensp中拉一台路由器和云出来。首先将路由器和云路由调通,让我们的电脑外部可以和路由器通信。AR1的基础配置如下:system-view Enter system view, return user view with CtrlZ. [Huawei]sysname AR1[…...
网页网站导读怎么做/免费发布推广信息的平台有哪些
有些资料讲如果要支持目录必须使用iiswriter,或者其他软件,其实通过简单对iis配置,再利用urlwriter就可以完美解决url重写的问题可以将http://abc.domain.com/blog转向到http://www.domain.com/xxx.aspx?usernameabc当然首先要将主机的泛域名支持打开。…...
做app和网站哪个比较好/南昌seo排名
第1关:计算阶梯数 任务描述 本关任务:爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请编程求解该阶梯至少有多少阶。 相关知…...
大连b2c网站建设/济南最新消息
一个简单的跨平台的按钮组件。可以进行一些简单的定制。 如果这个组件外观并不怎么搭配你的设计,那你可以使用TouchableOpacity或是TouchableNativeFeedback组件来制作自己所需要的按钮,视频教程如何制作一个按钮讲述了完整的过程。或者你也可以在github…...
蚌埠市做网站/宁波专业seo服务
文章目录一、编写项目代码二、编写Azkaban必须文件三、使用Azkaban执行项目代码一、编写项目代码 package Azkaban;import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arr…...
在阿里巴巴做网站多少钱2019/企业网站首页
通常我们定义一个基本数据类型的变量,函数调用的现场保存,一个对象的引用,都使用JVM中的栈空间; 通过new关键字和构造器创建的对象放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分…...