一、前言

建立身份账户体系是我们上云的第一步,良好的账户体系设计,会为后续的管理带来极大的便捷性和扩展性,反之,则可能增加管理的复杂,以及账户使用的不安全。

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存储桶的所有操作权限。

角色的受信任实体可以有以下类型:

  1. AWS产品,如ec2,s3等。
  2. AWS账户,即其他的AWS账户。
  3. Web身份,Cognito 或任何 OpenID 提供商。
  4. 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用户的模式就能满足资源管理的需求。但是当发展到一定规模,就会遇到管理瓶颈,以账户管理为例,主要有:

  1. 多个环境管理,有开发环境,测试环境,以及生产环境,这些环境的资源是隔离,权限也要隔离。同一个账户多IAM用户模式,很容易出现由于权限管控错误,导致生产事故的问题。
  2. 用户管理,员工离职或者入职,或者岗位变化等等,导致用户管理工作繁重。

针对这些问题,企业一般采用多身份账户体系策略,如下:

每个环境创建一个对应账户,在该环境账户中,维护相应环境的资源,以及跨账户角色,允许身份账户对资源的访问。

身份账户管理维护所有的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)相关推荐

  1. AWS云计算技术架构探索系列之一-开篇

    一.前言 1.什么是AWS AWS是亚马逊公司的云计算 品牌,作为全球云计算技术的首创者和领导者,其分布在全球25区域81个可用区的数据中心,提供200多项服务齐全的云服务(2021年12月份数据), ...

  2. AWS云计算技术架构探索系列之五-网络

    一.前言 当我们有了计算和存储资源,但是要真正把应用程序运行起来并提供互联网服务,那还需要使用AWS的网络,本章节就一起了解AWS的网络及其相关的组件基础知识和架构,其中包括: 区域(Region), ...

  3. AWS云计算技术架构探索系列之三-计算

    一.前言 计算是最核心的云服务,对于用户来说,取之不尽,用之不竭.按需使用的算力正是云计算的最主要的优势之一. 从云计算架构发展历程看,经历了基于XEN,KVM,VMware和Hyper-V为核心的虚 ...

  4. 软考高级系统架构设计师系列论文二:论软件的性能优化设计

    软考高级系统架构设计师系列论文二:论软件的性能优化设计 一.摘要 二.正文 三.总结 一.摘要 本文结合我2008年在某人民银行实施的E户通电子转账系统的经历,就软件的性能优化设计进行了详细讨论.在系 ...

  5. 云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)

    接下来几篇主要从技术角度介绍云计算的架构:  云计算四种模式:公有云.私有云.混合云和行业云(本文讲述)  云计算架构:基础架构层.云平台层.业务应用层和业务管理层  云计算服务模式:IaaS. ...

  6. IT职场人生系列之二十三 知识体系(专家与杂家)

    这是IT职场人生系列的第二十三篇.(序言,专栏目录) 专家与杂家 专家与杂家之争由来已久. 挺专家者说:只有专一,才能学透学精:那些泛泛之辈,只能学到些皮毛,终究不能有所成就. 挺杂家者说:只有广泛, ...

  7. 5g网络架构_【5G网络架构】系列之二:5G基站—gNodeB。为什么叫gNodeB?取个名而已,需要理由吗?...

    编者按:要想使用5G网络,必须要有5G基站做支撑.3G基站叫NodeB,4G基站叫eNodeB,5G基站叫什么?3GPP给5G基站取了个名,叫gNodeB.尽管我们一直没弄明白3G基站为何叫NodeB ...

  8. 边缘计算在物联网(IoT)当中的运用「物联网架构探索系列」

    边缘计算是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应用智能.安全与隐私保 ...

  9. 《大型网站技术架构》读书笔记二:大型网站架构模式

    来源:http://www.cnblogs.com/edisonchou/p/3790225.html 一.分层 最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责.网站一般分为三个 ...

最新文章

  1. PHP+XML留言板
  2. mysql版本 时间_【MySQL】MySQL版本时间线和MySQL各版本的区别
  3. 论IP地址在数据库中应该用何种形式存储
  4. Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
  5. 【程序员面试宝典】强制类型转换之面试例题2
  6. 安装mysql数据库要注意的
  7. Nexus 安装(Linux 环境)
  8. 解决listview与scroll冲突,自定义listview高度
  9. maven打包报错找不到符号,由于找不到类中方法的解决思路
  10. 51单片机之逻辑运算指令ANL、ORL、XRL等
  11. 如何在jupyter notebook中设置一级二级三级标题?
  12. php 统计uv,简单网站统计功能的实现 PV IP 真实访客数(UV) | 学步园
  13. 【LeetCode - 379】电话目录管理系统
  14. 一个exe可执行程序的生与死
  15. SICP练习1.16
  16. 安全驾驶:上海科目二-全部科目-笔记整理-祝你考试一把过!
  17. 十大常见web漏洞及防范
  18. selenium自动化测试-鼠标键盘操作
  19. hpc超级计算机大会,国家超算广州中心主任卢宇彤当选HPC 2019大会程序主席
  20. vue axios介绍

热门文章

  1. 一文步入python大门,基础教程大全(25分钟)
  2. 今天分享一个关于微商的套路。
  3. 3D激光雷达SLAM算法学习01——3D激光SLAM整体框架
  4. 计算机的音乐丑八怪,-【计算器】丑八怪
  5. html中$ 的作用,jquery中的$()是什么?
  6. OpenCV级联分类器训练与使用实战教程-贾志刚-专题视频课程
  7. 个人收藏的常用前端网站
  8. FileZilla介绍及其使用
  9. Oracle培训——学习笔记——目录
  10. Android程序调用串口开发硬件