1 关于IAM
IAM全称是Identity and Access Management,身份和访问管理,是一套用于登录验证和管理的框架,
可用于单点登录、多因素身份验证、基于策略的集中式授权和审计、动态授权等场景。
从管理对象来看,
- 一个是管理identity,验证用户的合法性,即Authentication
- 另一个是管理资源的access,也就是资源授权,即Authorization
2 AWS identity/principal
在AWS上,identity和principal是等价的,都是指代可以对资源进行操作的发起方,主要有:
- user
- role
- federated user
- application
2.1 user和role的区别
- user可以在console上登录,有永久的认证信息,比如用户名和密码,但是role是无法登录的,也没有认证凭证
- user一般是给某个人使用,而token可以给任何有需要的人使用,当然也可以给user使用
- role通过临时生成的密钥来访问资源,默认1h,最长12h,在role的传导场景,最长是1h
- user只能存在于某个账号下,role可以跨账号, 但是user可以通过switch到其他role来达到跨账号的目的
2.2 federated user
当用户已经有了一个用户身份,比如域账号或者Okta,可以不用单独为这个用户在AWS中创建user和配置policy,我们可以直接通过用户的域账号身份去访问AWS的资源。但这个需要有IDP的参与,也就是Identity provider。这样不仅省去对新账号的管理,也减少创建账号的时间消耗。
以域账号为例,此时IDP即为ADFS,用户通过域账号认证身份后,ADFS会按照SAML 2.0规范生成身份验证信息,发给Server Provider(服务提供商),从而实现联合验证,此时该用户就是一个federated user
3 AWS资源访问
对AWS资源操作的请求包含三部分,
- 主体(Identity)
- 操作(Action)
- 资源(Resource)
AWS通过策略(Policy)来定义主体权限(Permissions),最基本的策略有两大类,
- Identity-based policy,它关联到特定的User/Role/Group上,指定这些主体能对哪些资源进行怎样的操作
- Resource-based policy,它关联到具体的AWS资源上,指定哪些主体可以对这个资源做怎样的操作