AWS云计算技术架构探索系列之二-身份账户体系(IAM)
一、前言
建立身份账户体系是我们上云的第一步,良好的账户体系设计,会为后续的管理带来极大的便捷性和扩展性,反之,则可能增加管理的复杂,以及账户使用的不安全。
AWS设计了一套完备的身份账号体系,主要包括IAM(Identity and Access Management),以及Organizations,其中IAM,包括账号,用户组,用户,角色,策略等。其关系图如下:
- 用户,用户是AWS的身份凭证,分为根用户和IAM用户。用户的识别包括用户名/密码,AK/SK。
- 用户组,包含多个用户的组,方便用户策略的统一分配和管理。
- 角色,定义了受信任实体的特定权限,且凭证在短期内有效。通俗的说,定义了A(受信实体)对于B(目标资源)有特定的权限(增删改查等动作),这个权限是通过短期凭证实现。
- 策略,是对权限的定义,允许或者拒绝(Effect),对于哪些资源(resource),实施哪些动作(Action)。
- 账户,即申请的AWS的账户,通过根用户管理其下所有IAM用户和资源,也是账单的承载单位。
- 组织,对多个账号统一管理,包括整合账单和服务控制策略。
下面我来具体介绍:
二、用户和用户组
用户是AWS的身份凭证,包括用户名/密码,AK/SK两种认证方式,用户名/密码用来登录控制台,AK/SK一般用户CLI,以及API访问。
用户可以分为:
- 根用户,一个账号默认有一个根用户,根用户作为账号的持有者,默认具备所有权限,类比管理系统的超级管理员。
- IAM用户,根用户可以创建IAM用户,并为之设置策略,使其拥有相应的权限。
- 联合用户,相对于AWS来说的第三方用户,比如公司系统的已有的用户,或者来自互联网提供商,如Facebook,Google等。这种用户模式,比较好的适配混合云的场景。
对于只有几个人的小微企业,可能只需要根账户就能搞定一切。但是在大中企业中,技术岗位和人员有明确的分工,比如有应用开发者,数据库管理员,网络管理员,他们对不同资源有不同的权限要求,不可能将根用户给所有人的开放,此时就需要创建和分配不同的IAM用户,如下图所示:
如果一个IAM用户的认证信息泄露,影响的范围仅在所分配的权限范围内,且可以通过根用户修改其登录凭证,及时止损。但是如果根用户认证信息泄露,那就可以随意删除和修改所有其他用户的认证信息以及权限,影响将非常大。
那如何保护根用户信息呢,首先根用户只能掌握在少数账号管理人员手中,其他人是无法接触到的;其次,根用户启用MFA(Multi-Factor Authentication),它提供了额外的安全级别,可以通过购买第三方硬件(类似于银行的U盾),或者安装与 MFA 兼容的APP程序生成密钥。
用户组是一组用户的集合,可以为组内的用户统一分配权限,方便用户的管理。
三、角色
AWS的角色与传统的RBAC中的角色概念是不一样的,传统的RBAC中角色,是一组权限的集合,角色仅可以分配或者授权给某个用户。而AWS的角色首先也是一组权限的组合,同时还定义了受信任实体(即可分配的服务)。 比如:
定义一个角色,EC2具有S3存储桶所有操作权限,受信任的实体就是"EC2服务",权限就是"S3存储桶所有操作权限"。当该角色分配给某个具体的EC2实例,该EC2实例就具备了S3存储桶的所有操作权限。
角色的受信任实体可以有以下类型:
- AWS产品,如ec2,s3等。
- AWS账户,即其他的AWS账户。
- Web身份,Cognito 或任何 OpenID 提供商。
- SAML 2.0 身份联合。
当角色授予给某个具体的受信任实体的实例后,该实例就具有了角色定义的权限。在实现过程,是通过调用STS( Security Token Service)的API,获取临时凭证,再通过临时凭证签署对AWS服务API调用。
继续上面的例子, 其Role逻辑关系和实现过程,我用以下的图示表示:
四、策略
策略是权限的定义形式,AWS采用JSON表达式,如下:
{"Version": "2012-10-17","Statement": [{"Sid": "VisualEditor1","Effect": "Allow","Action": "s3:*","Resource": "arn:aws:s3:::mybucket","Condition": {"IpAddress": {"aws:SourceIp": "10.0.0.1"}}}]
}
- Effect,表示允许(Allow),拒绝(Deny)。
- Action,表示对服务的具体操作类型。如样例中s3:*,表示对s3服务的所有操作。
- Resource,表示具体的资源标识,如样例中,arn:aws:s3:::mybucket表示S3的具体存储桶。
- Condition,表示附加的条件,如样例中,对源IP进行限制。
其内容是, 允许或者拒绝(Effect),对于哪些资源(resource),实施哪些动作(Action)。当然AWS提供了策略生成器,可以通过配置的方式生成该文件。
我们可以将一个或者多个策略附加给用户组,用户,角色。在策略定义以及执行的过程中,遵守以下原则:
- 最小授权原则,所有策略的定义都应该遵循,在满足要求情况下,按照最小原则授权。
- 拒绝优先原则,如果附加的多个策略有冲突,那么拒绝的策略优先。
对于附加用户组,用户,角色的策略,称之为基于身份的策略,该策略可以分为三种类型:
- Amazon 托管策略,Amazon创建和托管的策略,该类型策略是无法修改的,并开放给所有账户,我们可以直接拿来用。
- 客户托管策略,客户在自己的账号中创建和托管的策略,客户可以根据自己的需求,灵活定义策略,以便精确控制。
- 内联策略,创建和管理的策略,直接嵌入在单个用户、组或角色中。
另外一种策略是附加在具体的资源上,称之为基于资源的策略。如下的策略就是附加在S3的DOC-EXAMPLE-BUCKET存储桶上,其格式如下:
{"Version":"2012-10-17","Statement":[{"Sid":"AddCannedAcl","Effect":"Allow","Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]},"Action":["s3:PutObject"],"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*","Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}}}]
}
与基于身份的策略相比较,基于资源策略的json表达式多了个Principal(委托人)字段,即该存储桶可以被两个账户实施PUT操作。
基于资源策略都是内联策略,即在创建某个具体资源的时候附加的,并与之绑定。目前仅部分服务支持该类型策略,比如S3,SQS等。具体可以参见:
使用 IAM 的 Amazon 服务 - Amazon Identity and Access Management
那为什么要设计基于资源的策略呢?我们来看个场景。
创建一个允许所有操作S3存储桶mybucket资源的策略,并分配给Role1,再将Role1附加到3个EC2上,这样这3个EC2就具备对S3存储桶mybucket所有操作权限。随着业务的调整,需求发生了变化,要求仅EC2 B能操作mybucket资源,其他两个不可以操作,如何实现呢?
首先想到的是,将Role1角色从EC2 A,EC2 C上删掉,但是Role 1有可能不只是包含这一个策略,如果删掉了,会影响这两台实例对其他资源的权限。还可以将role 1分拆成两个,这种操作实际也很麻烦,role多了也不好管理和维护。此时就可以使用基于资源的策略,就能轻松的解决问题。
在mybucket附加一个基于资源策略,拒绝EC2A,EC2C的操作,根据拒绝优先原则,策略叠加后,EC2 A,EC2C就无法访问。
五、账户
账户是可以对所属资源进行管理,以及查看和管理账单信息,账户的持有者就是根用户,通过根用户实现对资源的管理。
当企业的规模比较小时,一个账户,多个IAM用户的模式就能满足资源管理的需求。但是当发展到一定规模,就会遇到管理瓶颈,以账户管理为例,主要有:
- 多个环境管理,有开发环境,测试环境,以及生产环境,这些环境的资源是隔离,权限也要隔离。同一个账户多IAM用户模式,很容易出现由于权限管控错误,导致生产事故的问题。
- 用户管理,员工离职或者入职,或者岗位变化等等,导致用户管理工作繁重。
针对这些问题,企业一般采用多身份账户体系策略,如下:
每个环境创建一个对应账户,在该环境账户中,维护相应环境的资源,以及跨账户角色,允许身份账户对资源的访问。
身份账户管理维护所有的IAM用户,通过分配可访问跨账户角色的策略,控制IAM对各个环境资源的访问权限。
当某个员工加入,只需要在身份账户中创建一个IAM用户并分配策略,当该用户对访问的环境资源有需求变化时,通过变更策略即可搞定。这种多身份账户体系设计,即解决了各个环境的用户隔离,又通过对用户的统一管理,实现不同环境资源的访问。
六、组织
当企业采用多账户体系策略时,就会涉及到多账户的管理,组织就是AWS提供管理多账户的服务,主要有以下功能:
1、整合账单,可以管理和支付所有成员账户的账号,同时也可以享受折扣优惠,降低成本。
2、服务控制策略(SCP),可以为所有的成员账户附加统一的服务策略,以便对成员账户管理。主要的是,这些策略对成员账户的根用户也生效,。
组织中,有且仅有一个管理账户,通过管理账户邀请成员账户加入。
七、总结
本篇中系统的介绍了AWS身份账户体系的内容。主要包括用户,用户组,角色,策略,账户以及组织,其相关的知识点,通过以下的表格总结
名称 | 定义 | 核心内容 |
用户 | 用户是AWS的身份凭证 |
1、分为根用户,IAM用户,联合用户 2、根用户具备所有的权限,需要重点关注其信息安全,采用MFA机制 3、根据对权限不同要求,创建不同IAM用户 |
用户组 | 多个用户的组 | 统一分配策略,方便用户的管理 |
角色 | 受信任实体的特定权限,且凭证在短期内有效 |
1、角色的定义,包括受信任实体,以及策略 2、受信任实体包括AWS产品,AWS账户,WEB身份,SAML 2.0 身份联合 |
策略 | 权限的定义 |
1、策略的内容,允许或者拒绝(Effect),对于哪些资源(resource),实施哪些动作(Action) 2、策略分为基于身份的策略和基于资源的策略 |
账户 | 申请的AWS的账户 |
1、对所属资源进行管理,以及查看和管理账单信息 2、账户的持有者就是根用户 3、多账户策略为最佳实践 |
组织 | 多账户的管理 |
1、整合账单功能 2、服务控制策略(SCP)功能 |
附件:
AWS云计算技术架构探索系列之一-开篇
AWS云计算技术架构探索系列之二-身份账户体系(IAM)
AWS云计算技术架构探索系列之三-计算
AWS云计算技术架构探索系列之四-存储
AWS云计算技术架构探索系列之五-网络
AWS云计算技术架构探索系列之六-数据库
AWS云计算技术架构探索系列之二-身份账户体系(IAM)相关推荐
- AWS云计算技术架构探索系列之一-开篇
一.前言 1.什么是AWS AWS是亚马逊公司的云计算 品牌,作为全球云计算技术的首创者和领导者,其分布在全球25区域81个可用区的数据中心,提供200多项服务齐全的云服务(2021年12月份数据), ...
- AWS云计算技术架构探索系列之五-网络
一.前言 当我们有了计算和存储资源,但是要真正把应用程序运行起来并提供互联网服务,那还需要使用AWS的网络,本章节就一起了解AWS的网络及其相关的组件基础知识和架构,其中包括: 区域(Region), ...
- AWS云计算技术架构探索系列之三-计算
一.前言 计算是最核心的云服务,对于用户来说,取之不尽,用之不竭.按需使用的算力正是云计算的最主要的优势之一. 从云计算架构发展历程看,经历了基于XEN,KVM,VMware和Hyper-V为核心的虚 ...
- 软考高级系统架构设计师系列论文二:论软件的性能优化设计
软考高级系统架构设计师系列论文二:论软件的性能优化设计 一.摘要 二.正文 三.总结 一.摘要 本文结合我2008年在某人民银行实施的E户通电子转账系统的经历,就软件的性能优化设计进行了详细讨论.在系 ...
- 云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)
接下来几篇主要从技术角度介绍云计算的架构: 云计算四种模式:公有云.私有云.混合云和行业云(本文讲述) 云计算架构:基础架构层.云平台层.业务应用层和业务管理层 云计算服务模式:IaaS. ...
- IT职场人生系列之二十三 知识体系(专家与杂家)
这是IT职场人生系列的第二十三篇.(序言,专栏目录) 专家与杂家 专家与杂家之争由来已久. 挺专家者说:只有专一,才能学透学精:那些泛泛之辈,只能学到些皮毛,终究不能有所成就. 挺杂家者说:只有广泛, ...
- 5g网络架构_【5G网络架构】系列之二:5G基站—gNodeB。为什么叫gNodeB?取个名而已,需要理由吗?...
编者按:要想使用5G网络,必须要有5G基站做支撑.3G基站叫NodeB,4G基站叫eNodeB,5G基站叫什么?3GPP给5G基站取了个名,叫gNodeB.尽管我们一直没弄明白3G基站为何叫NodeB ...
- 边缘计算在物联网(IoT)当中的运用「物联网架构探索系列」
边缘计算是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应用智能.安全与隐私保 ...
- 《大型网站技术架构》读书笔记二:大型网站架构模式
来源:http://www.cnblogs.com/edisonchou/p/3790225.html 一.分层 最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责.网站一般分为三个 ...
最新文章
- PHP+XML留言板
- mysql版本 时间_【MySQL】MySQL版本时间线和MySQL各版本的区别
- 论IP地址在数据库中应该用何种形式存储
- Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
- 【程序员面试宝典】强制类型转换之面试例题2
- 安装mysql数据库要注意的
- Nexus 安装(Linux 环境)
- 解决listview与scroll冲突,自定义listview高度
- maven打包报错找不到符号,由于找不到类中方法的解决思路
- 51单片机之逻辑运算指令ANL、ORL、XRL等
- 如何在jupyter notebook中设置一级二级三级标题?
- php 统计uv,简单网站统计功能的实现 PV IP 真实访客数(UV) | 学步园
- 【LeetCode - 379】电话目录管理系统
- 一个exe可执行程序的生与死
- SICP练习1.16
- 安全驾驶:上海科目二-全部科目-笔记整理-祝你考试一把过!
- 十大常见web漏洞及防范
- selenium自动化测试-鼠标键盘操作
- hpc超级计算机大会,国家超算广州中心主任卢宇彤当选HPC 2019大会程序主席
- vue axios介绍