3、AWS IAM深度解析:用户、组、角色与策略、IAM Policy语法与评估逻辑、跨账户访问与SCP
说到多云身份治理,AWS IAM 是绕不开的第一道坎。很多人在云上出了安全问题,十有八九是 IAM 没搞明白。我见过不少团队,策略写得像天书,权限放得比谁都宽。今天咱们就把 IAM 的核心拆开揉碎,从基础概念到策略评估逻辑,再到跨账户访问和 SCP,一次性讲透。
3.1 IAM 四大核心对象:用户、组、角色与策略
AWS IAM 其实就管四样东西:用户、组、角色、策略。理解它们的关系,你就掌握了 IAM 的骨架。
| 对象 | 本质 | 典型场景 |
|---|---|---|
| 用户(User) | 代表一个人或服务账号 | 开发人员登录 AWS 控制台 |
| 组(Group) | 用户的集合,简化权限管理 | 将“开发者”组统一赋予 S3 读写权限 |
| 角色(Role) | 临时身份,不绑定长期凭证 | EC2 实例访问 S3、跨账户访问 |
| 策略(Policy) | 权限定义的文档(JSON) | 允许或拒绝某 API 操作 |
我个人习惯把角色看作“临时工牌”。用户是长期员工,有固定的工牌(长期密钥)。角色则是访客牌,用完就失效。你想想看,EC2 实例要访问 S3,难道把 Access Key 写死在代码里?那太危险了。给实例挂一个角色,临时凭证自动轮转,这才是正道。
3.2 IAM Policy 语法与评估逻辑
策略是 IAM 的灵魂。写策略就像写法律条文,一个字都不能错。IAM 策略本质上是一个 JSON 文档,核心结构如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
这里面有几个关键字段:
- Effect:Allow 或 Deny。说白了就是“允许”还是“拒绝”。
- Action:要控制的 API 操作。可以用通配符
*,但我建议尽量精确。 - Resource:操作的资源 ARN。这是最容易出错的地方。
- Condition:可选,增加额外的限制条件,比如来源 IP、MFA 状态等。
嗯,这里要注意:策略评估逻辑并不是简单的“允许优先”。AWS 的评估规则是:显式拒绝优先于一切允许。如果同时有 Allow 和 Deny,Deny 胜出。如果没有任何显式允许,默认隐式拒绝。
为什么会这样设计?我猜是为了安全。你想想看,如果 Allow 优先,那一个宽泛的 Allow 策略就可能覆盖掉你精心设置的 Deny。AWS 把 Deny 设为最高优先级,就是为了让你能“一刀切”地封死某些危险操作。
我在项目中遇到过这样一个坑:给一个角色挂了一个 Allow 所有 S3 操作的策略,然后又挂了一个 Deny 删除特定桶的策略。结果 Deny 生效了,但 Allow 里的 ListBucket 也受到了影响——因为 Deny 策略的 Resource 写错了,导致所有桶的删除操作都被拒绝。嗯,策略的 Resource 一定要精确匹配。
3.3 跨账户访问
多云环境下,跨账户访问是家常便饭。比如,你的开发账号需要读取生产账号的 S3 数据。怎么做?
核心思路是:生产账号创建一个角色,开发账号的用户可以切换到那个角色。具体分三步:
- 在生产账号中创建 IAM 角色,并设置信任策略(Trust Policy),允许开发账号的某个用户或角色来“扮演”它。
- 给这个角色挂载权限策略,定义它能做什么。
- 在开发账号中,给用户或角色授予
sts:AssumeRole的权限,指向生产账号的角色 ARN。
说白了,就是“借身份”。开发账号的用户通过 STS(Security Service)拿到生产账号角色的临时凭证,然后用这个凭证去操作资源。
3.4 SCP:组织层面的权限边界
SCP(Service Control Policy)是 AWS Organizations 里的一个高级功能。它不直接给用户授权,而是划定一个权限边界。你可以把它理解成“最高指示”:组织内的所有账号,都不能越过 SCP 划定的红线。
举个例子:你可以在 SCP 里禁止所有账号删除 S3 桶。那么就算某个账号的 IAM 策略写了 Allow s3:DeleteBucket,实际操作时也会被 SCP 拒绝。SCP 的优先级高于账号内的 IAM 策略。
| 对比项 | IAM 策略 | SCP |
|---|---|---|
| 作用范围 | 单个用户、组或角色 | 整个 OU 或账号 |
| 是否直接授权 | 是 | 否,只设边界 |
| 优先级 | 受 SCP 限制 | 高于 IAM 策略 |
| 典型用途 | 细粒度权限控制 | 全局安全基线 |
我个人习惯在组织根 OU 上挂一个“禁止删除日志”的 SCP,这样所有子账号都无法删除 CloudTrail 日志。你想想看,如果攻击者拿到了某个账号的 Admin 权限,第一件事就是删日志灭迹。有了 SCP,就算 Admin 也删不了,日志安全就有了底线。
3.5 本章知识体系总览
下面这张图把 AWS IAM 的核心逻辑串起来了。从用户、组、角色到策略,再到跨账户访问和 SCP,你可以看到它们之间的关系和层级。
这张图把 IAM 的核心脉络理清了。用户和组是“谁”,角色是“临时身份”,策略是“权限定义”,SCP 是“组织级边界”。跨账户访问则是通过角色扮演实现的。你想想看,掌握了这些,AWS 的权限管理基本就通了。