AWS IAM
分类:
文章
•
2023-03-30 19:32:28
- IAM (Identity and Access Management)
- IAM不是用于存储应用的认证和授权信息,是用于AWS资源的认证和授权
- IAM也不用于操作系统的认证和授权
- 常见认证/授权场景
- 操作系统:AD/LDAP
- Application:AD, Application user repository, Amazon Cognito
- AWS Resources: IAM
- 操作IAM的方式
- AWS console
- CLI
- SDK
- RESTful API
- Principal,IAM实体
- Root account,创建AWS时的跟账号
- IAM users,root account或具有IAM权限的IAM user创建的账号
- Roles/Temporary security tokens,角色或者临时安全令牌
- Roles/Temporary Security Tokens的使用场景
- 为EC2增加角色,这样EC2 instance就具备了相应的权限,在EC2上面执行CLI,SDK调用等就不用输入用户名/密码或者access key ID
- Cross Account Access,为其它account的IAM用户分配权限
- Federation:为其它应用的用于分配权限,例如,常见的微信登录,QQ登录等,在登录某个网站/系统时,可以注册新用户,也可以使用微信/QQ等账号登录,登录后为其授权。
- 为什么为EC2分配role,而不是内嵌Access Key ID
- 两种方式都可以为EC2授权
- 将Access Key ID和Security Access Key内嵌到EC2,并存放在某个配置文件,会增加泄漏的风险,且当要rotate Access Key ID的时候需要重新拷贝Key到EC2,存在安全隐患,也不方便
- 为EC2分配role以后,但调用API,SDK操作AWS资源时,AWS会自动生成临时security token和session ID,并将其设置为API,SDK的参数,不存在拷贝key的过程,也不存在rotate的问题
- Authentication,认证
- 验证某个账号是否合法,合法则允许进入系统,否则不能进入
- User Name/Password:通过用户名密码的方式认证
- Access Key:通过与用户名/密码关联的Access Key ID和Security Access Key认证
- Access Key/Sesstion Token:如果分配了Role,则使用Access Key和Session Token认证,这些都是临时生成的
- Authorization,授权
- 为合法用户授权,可以登录的用户有很多,不同的用户有不同的权限,通过policy为不同的Principal授权
- Policies,允许(拒绝)在某种条件下操作某个服务下的某些资源,JSON格式
- Effect,Allow or Deny
- Service,将要操作什么服务
- Resource,将要操作服务的什么资源,一般Service和Resource是一起用ARN定义的
- Action,具体的操作,如List,Delete,etc
- Condition,在什么条件下才有此权限,如IP Range,特定的时间等
- Policy 示例
- 为Principal授权
- policy分为两种,系统预定义的policy和用户自定义的policy
- IAM User可以属于某个Group,为Group授权后,Group里面所有的用户都具备相应的权限
- 可以为User/Group直接分配系统预定义的policy或用户自定义的policy
- 授权有四种场景:
- 为IAM User分配系统预定义的policy
- 为IAM User分配用户自定义的policy
- IAM User属于某个Group,为Group分配系统预定义的policy
- IAM User属于某个Group,为Group分配用户自定义的policy
- 最佳实践:使用root账号创建IAM admin 账号,之后推出root账号,用IAM admin账号管理所有IAM用户
- 不能将role加入到Group,但可以为role分配系统预定义或用户自定义的policy,这点与IAM User一样
- MFA (Multi-Factor Authentication)
- 为IAM用户或root账号启动MFA,这样在登录系统时不仅需要输入用户名/密码,还需要输入MFA code,MFA code可以来自硬件设备或软件app
- 强烈要求root账号启动MFA
- MFA code是通过MFA Key计算出来的,知道MFA Key也就知道了MFA Code,MFA Code和时间有关,30s过期
- Rotating Keys
- 需要定期Rotate Access Key,这样能避免Access Key泄漏
- 好像不能自动rotate key,需要手动操作
- 如何处理多个权限
- 综合分析所有policy,只要有一个deny,则deny,而不管是否有allow
- 没有allow,默认都是deny
- 其它则allow