第1章 IAM概述:让身份与权限不再是一笔糊涂账

聊IAM之前,我先说说自己刚入行时的感受。那时候公司几十个AWS账号,密钥满邮箱飞,权限全靠运维大哥手工配。有人离职了,密钥还躺在代码里。想想都后怕。

说白了,IAM就是云端的一把锁。没有它,你的资源对全世界开放。有了它,谁干什么、能看什么、不能碰什么,全在策略里写死。

1.1 什么是IAM?

IAM全称是 Identity and Access Management(身份与访问管理)。它不是某一朵云的专利,但云厂商把它做成了最基础、也是最容易出错的服务。

我记得有一次帮客户做安全审计,发现他们居然用一个根用户跑生产业务。根用户是什么?那就是云上的皇帝,没有任何限制。我当时就跟他们讲:根用户只用来开账号,用完就锁。这个习惯必须养成。

IAM核心价值:

  • 最小权限 —— 只给够用的权限,不给多余的。
  • 职责分离 —— 开发、测试、运维各管各的。
  • 可审计 —— 每笔操作都能追溯到谁、什么时间、干了什么。
  • 临时凭证优先 —— 能用角色就别用长密钥,能用临时令牌就别存AccessKey。

1.2 IAM的核心组件

IAM的组件不多,但每个都很关键。就像拼图,少一块都不转。

1.2.1 用户(User)

用户代表一个人或一个应用。每个用户有唯一的ARN,可以关联密码(登录控制台用)或AccessKey(API调用用)。

我个人习惯:能建角色就不建用户。用户一旦多了,密钥管理就是噩梦。有一次我接手一个项目,光IAM用户就200多个,里面三分之一是「已离职」。嗯,清理了一整个周末。

1.2.2 组(Group)

组是一组用户的集合。你给组挂策略,组里的用户自动继承。这东西省事,我一直推荐。

举个例子:developers组,挂上「只读+部署」的策略,所有开发人员往里一塞,齐活。有人离职?从组里移除就行,不用改策略。

1.2.3 角色(Role)

角色没有长久的密钥,它是拿临时凭证的。角色可以给AWS服务用,比如EC2实例要读S3;也可以跨账号用,比如合作伙伴要访问你的一桶数据。

你想想看,如果你的应用跑在EC2上,你会在代码里写AccessKey吗?我反正不会。给实例绑一个角色,SDK自动获取临时凭证,安全又省心。

1.2.4 策略(Policy)

策略定义了「谁什么时候能干什么」。它是JSON格式的文档,包含Effect(Allow/Deny)、Action(操作列表)、Resource(资源ARN)、Condition(条件)。

小技巧:写策略时,我习惯先写Deny,再写Allow。为什么?因为Deny优先于Allow,提前把风险高的操作挡掉,再开放业务需要的权限。

IAM 组件核心概念对照
组件 对应实体 凭证类型 典型用途
用户 人 / 应用 密码 / AccessKey 控制台登录、API调用
组 用户集合 无单独凭证 批量权限管理
角色 临时身份 STS临时凭证 服务间访问、跨账号
策略 权限规则 JSON文档 定义Allow/Deny

1.3 策略的两种类型

策略分两种:身份策略和资源策略。别看都是JSON,差别很大。

  • 身份策略:挂到用户、组、角色上。控制「这个身份能做什么」。
  • 资源策略:挂到资源上(比如S3桶、KMS密钥)。控制「谁能访问这个资源」。

我记得有一次做S3桶策略,漏写了一个条件,导致匿名用户也能读桶里的日志。当时客户数据差点出事。从那以后,我只要写资源策略,一定加 aws:SourceIp 或者 aws:PrincipalOrgID 条件。

1.4 必须要了解的几个概念

我曾经见过一个团队,把所有的权限策略写在一个超长的JSON里,谁改都怕炸。后来我建议他们拆分:按服务拆、按环境拆、按团队拆。每个策略只做一件事,命名也统一(比如 s3-readonly-dev)。以后查起来,眼睛不累,脑子也清楚。

1.4.1 隐式Deny vs 显式Deny

IAM里,默认所有权限都是Deny(隐式)。只有你显式Allow了,才能操作。但如果你写了显式Deny,那就连Allow也救不了。Deny优先。记住这一点,很多安全问题就能想通。

1.4.2 Condition条件键

条件键是策略的精细开关。比如:只允许来自公司IP的请求;只允许使用MFA登录的人执行敏感操作;只允许在特定时间范围内操作。没有条件,策略就是一纸空文。

1.5 本章知识体系全景图

下面这张图把IAM的核心要素串了起来,我建议你存下来,后面几章都会用到。

IAM 核心架构与流程 IAM 身份中心 用户 (User) 组 (Group) 角色 (Role) 策略 (Policy) - JSON 最终决定:Allow / Deny Condition条件键 (IP / MFA / 时间) 说明/条件框

从上图能看出来,身份(用户/组/角色)关联策略,策略里可以带条件,最终IAM引擎给你一个Allow或Deny。整个链条里,策略是灵魂。后面的章节,我会带你手把手写策略、绑角色、管密钥。

1.6 本章要点速查

  • 根用户:只用于开户,日常禁用。
  • 最小权限:只给必要的,写策略时从Deny入手。
  • 角色>用户:能拿临时凭证就别造长期密钥。
  • 条件键:策略不加条件,等于把门敞开。
  • 资源策略:小心公开写Allow,每个桶都该检查一遍。