联合身份验证与Cognito

news2024/9/27 19:53:47

在这里插入图片描述

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 认证考试带来帮助,如您有任何疑问,请联系我们

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2中使用 Tinymce 5.1.0使用过程举例

一、背景 vue-cli 版本 :vue/cli 4.5.15 查看脚手架版本的方法:Win R 打开运行输入: cmd ,打开控制台输入 vue -V vue 版本:"vue": "^2.6.11", 二、安装 Tinymce 1、 --no-fund 是因为提示你…

C语言(表达式,语句和副作用和序列号)

目录 一.表达式 二.语句 三.副作用和序列点 一.表达式 由运算符和运算对象组合。最简单得表达式是一个单独的运算对象,以次为基础可以建立复杂的表达式 4 421 a*(b c/d)/20 运算对象可以是常量,变量或二者得组合。一些表达式由子表达…

python--石头剪刀布游戏(列表)

本使用了下面几篇文章的知识: python(8)--列表初阶使用_码银的博客-CSDN博客 python(7)--if语句_码银的博客-CSDN博客 一、学习目标 利用列表实现石头剪刀布游戏 二、实验环境 Pycharm社区版、win11 三、代码 先贴代码,有需要的直接拿,想要进…

Hive提升篇-Hive修改事务

简介 Hive 默认是不允许数据更新操作的,毕竟它不擅长,即使在0.14版本后,做一些额外的配置便可开启Hive数据更新操作。而在海量数据场景下做update、delete之类的行级数据操作时,效率并不如意。 简单使用 修改HIVE_HOME/conf/hi…

JS逆向寻找生成bid变量的加密算法,一顿操作猛如虎,结果发现原来是混淆代码

分享一下最近我JS逆向的心得。 我最近使用Python爬取某个网站某个链接,cookie必须加入qgqp_b_id参数才能获取数据。 这个参数是一个32位字符串,通过浏览器的开发者工具分析网页源代码,了解到这个qgqp_b_id变量不是服务器返回给客户端的&…

Whids:一款针对Windows操作系统的开源EDR

关于Whids Whids是一款针对Windows操作系统的开源EDR,该工具所实现的检测引擎基于先前的 Gene项目构建,并专门设计可以根据用户定义的规则匹配Windows事件。 功能特性 1、为社区提供一款功能强大且开源的Windows EDR; 2、支持检测规则透明化…

有了java基础,迅速学完Python并做了一份笔记

面向过程Python简介Python和Java的解释方式对比Java:源代码 -> 编译成class -> Jvm解释运行Python:源代码 -> Python解释器解释运行我经常和身边的Java开发者开玩笑说:“Java真变态,别的语言都是要么直接编译要么直接解释…

无线蓝牙耳机哪个好用?好用的无线蓝牙耳机推荐

随着苹果取消3.5mm耳机孔,近几年蓝牙耳机便逐渐取代有线耳机以强势的姿态闯入人们的日常生活。听歌、游戏、运动等,使用蓝牙耳机的人越来越多。经常看到有人问,无线蓝牙耳机哪个好用?针对这个问题,我来给大家推荐几款好…

消息称索尼计划为PS5推出两款蓝牙耳机,Find My蓝牙耳机用途广

根据国外科技媒体 Insider Gaming 报道,索尼计划进一步丰富 PlayStation 5 的配件生态,将会推出两款耳机,一款采用类似于 AirPods 的 TWS 设计,另一款则是无线头戴式耳机。 消息称 TWS 耳机的内部代号为“Project Nomad”&#…

Debug分支在什么场景下使用?怎样创建Debug分支?

在项目的正常开发过程中,之前发布过的版本可能很会出bug,这时就需要停下来现在的开发任务,先去修改bug,完成后再回来继续开发任务。git中stash提供了保存现场的功能,可以把当前工作区、暂存区中的内容不需要提交而保存…

Elasticsearch:Text vs. Keyword - 它们之间的差异以及它们的行为方式

很多刚开始学习 Elasticsearch 的人经常会混淆 text 和 keyword 字段数据类型。 它们之间的区别很简单,但非常关键。 在本文中,我将讨论两者之间的区别、如何使用它们、它们的行为方式以及使用哪一种。 区别 它们之间的关键区别在于,Elastic…

Win 10电脑摄像头提示错误代码0xa00f4244怎么办?

如果你的Windows 10电脑无法打开摄像头,提示“我们找不到你的摄像头”的错误消息,错误代码是0xA00F4244,原因可能是杀毒软件阻止了摄像头,或者是摄像头驱动程序有问题。 小编为你整理了摄像头错误代码0xA00F4244的解决方法&#…

浏览器(以chrome为例)设置对WebGL的支持

某些浏览器由于不支持WebGL渲染,在浏览三维场景服务的时候会报“Your WebGL implementation doesn’t seem to support hardware accelerated rendering”错误,解决方法如下: 1、首先确保电脑支持gpu硬件加速,并下载最新的 GPU 驱…

存储性能软件加速库(SPDK)

存储性能软件加速库SPDK存储加速存储性能软件加速库(SPDK)SPDK NVMe驱动1.用户态驱动1)UIO2)VFIOIOMMU(I/O Memory Management Unit)3)用户态DMA4)大页(Hugepage&#xf…

Part 4 描述性统计分析(占比 10%)——下

文章目录【后续会持续更新CDA Level I&II备考相关内容,敬请期待】【考试大纲】【考试内容】【备考资料】【扩展知识】4、相关分析4.1、相关分析的描述——散点图4.2、相关分析的类型4.3、相关分析的度量4.3.1、协方差4.3.2、相关系数【后续会持续更新CDA Level …

Pyside6(3): 自动生成UI的Qt参数输入对话框

1.前言参数输入界面是桌面软件开发最繁琐的部分之一。特别是当系统中存在多种可编辑的数值模型时,由于各个模型的字段不同,每个字段的输入类型也不同,需要制作不同的UI,使用不同的UI控件,无疑会耗费大量时间&#xff0…

vite+vue3 proxy配置代理服务器解决本地运行跨域问题

vitevue3 proxy配置代理服务器解决本地运行跨域问题 1. 什么是跨域呢? 首先,明白什么是同源策略?同源就是指 协议、域名、端口 都要相同,其中任何一个不同都会出现跨域。例如: http://www.xxx.com:8000 // http 是协…

2023,为什么我的简历还是石沉大海?

对于应聘者来说 ,我们经常见到这样的情况 ,投递的简历要么是已送达(未读),要么是已读不回 ,也有的是沟通上几句就没有了下文 。对于这样的结果我们是既好奇又郁闷 ,好奇的是为啥大多数的简历都石…

新库上线 | CnOpenDataA股上市公司交易所监管措施数据

A股上市公司交易所监管措施数据 一、数据简介 证券市场监管是指证券管理机关运用法律的、经济的以及必要的行政手段,对证券的募集、发行、交易等行为以及证券投资中介机构的行为进行监督与管理。 我国《证券交易所管理办法》第十二条规定,证券交易所应当…

数据结构刷题

数据结构刷题 文章目录数据结构刷题计算时间复杂度练习题答案不带头结点的单链表的插入和删除运算数据结构头插法和尾插法建立单链表二叉树各种方法实现数据结构图的练习题习题答案习题计算时间复杂度练习题 1、设 n 为正整数。试确定下列各程序段中前置以记号的语句的频度。 …