1. 课程导入与治理全景
在 AWS 上,安全的第一性问题不是“网络怎么隔离”,而是“谁可以对这个资源做什么”。身份与权限体系是 AWS 所有服务的公共底座:无论是启动一台 EC2、读取一个 S3 对象、调用一次 Lambda,还是让 CI/CD 流水线部署代码,最终都会被翻译成一次带身份的 API 调用,并由 IAM 策略引擎判定允许或拒绝。本课程围绕这条主线展开,从单账号内的 IAM 用户、角色、策略,逐步扩展到多账号的 Organizations、SCP、权限边界与跨账号访问,最终形成一套可落地、可审计、可扩展的治理体系。
一、治理全景:五个核心对象与它们的关系
理解 AWS 权限治理,先要抓住五个核心对象。第一是主体(Principal),即发起请求的身份,可以是 IAM 用户、IAM 角色、联合身份用户,或 AWS 服务本身。第二是资源(Resource),如 S3 桶、DynamoDB 表、KMS 密钥,每个资源都有唯一的 ARN。第三是策略(Policy),用 JSON 描述“谁在什么条件下能对哪些资源执行哪些操作”。第四是边界(Boundary),包括权限边界、SCP、会话策略,它们不授予权限,只做权限的上限裁剪。第五是组织(Organization),通过 OU 层级把账号分组,让 SCP 和集中式日志、集中式账单得以统一施加。
这五个对象的关系可以用一句话概括:主体携带策略发起请求,策略经过边界裁剪后,由 IAM 策略引擎对资源做最终判定。下图展示了这一判定链路与各对象的相对位置,也标出了本课程后续章节将逐层展开的部分。
二、学习路径:从单账号到多账号治理
本课程的学习路径遵循“先局部、后全局,先授权、后约束”的顺序。第一阶段聚焦单账号 IAM:理解用户与角色的区别、策略 JSON 的结构(Version、Statement、Effect、Action、Resource、Condition)、以及策略评估逻辑。第二阶段进入多账号治理:用 Organizations 建立 OU 树,用 SCP 设定组织级上限,用跨账号角色实现集中管理与最小权限访问。第三阶段是工程化落地:把权限纳入 IaC(CloudFormation/Terraform)、接入 CloudTrail 与 Access Analyzer 做审计、用权限边界限制开发者自建角色的能力。第四阶段是成本与安全并重:通过标签、预算、集中账单和资源清理策略,让实验环境可控、可回收。
需要特别强调的是,策略评估的默认结果是拒绝。只有当某条策略显式 Allow,且没有任何边界或 SCP 显式 Deny 时,请求才会被放行。这个“默认拒绝”原则贯穿全课程,也是排查权限问题的第一判断依据。
三、实验环境准备:账号、身份与工具
为了让后续实验可复现,建议按以下方式准备环境。首先准备一个管理账号和一个成员账号(示例中命名为 lab-prod),管理账号用于创建组织与 SCP,成员账号用于验证权限效果。不要用根用户做日常操作,根用户只保留在创建组织和设置账单时使用,并立即开启 MFA。
其次,在成员账号中创建一个用于实验的 IAM 角色 LabAdminRole,信任策略允许管理账号中的指定用户切换。这样你可以在不创建长期访问密钥的前提下,通过 sts:AssumeRole 获得临时凭证。示例信任策略如下:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": { "aws:MultiFactorAuthPresent": "true" }
}
}]
}
第三,安装并配置 AWS CLI v2,使用 aws configure sso 或 aws sts assume-role 获取临时凭证。验证身份是否生效,最直接的方式是调用:
aws sts get-caller-identity
# 预期输出示例(示例值,非实测):
# {
# "UserId": "AROAEXAMPLE:alice",
# "Account": "444455556666",
# "Arn": "arn:aws:sts::444455556666:assumed-role/LabAdminRole/alice"
# }
如果返回的 Arn 是 assumed-role 形式,说明你正在以角色身份操作,而不是长期密钥,这是推荐的工作方式。
四、成本控制:让实验不产生意外账单
身份权限实验本身通常不产生高额费用,但一旦涉及 S3、KMS、CloudTrail、Config 等资源,就可能持续计费。建议在实验前完成三件事:第一,在管理账号启用成本预算,例如设置每月 5 美元的预算告警,阈值 80% 时邮件通知;第二,为所有实验资源打上统一标签,如 Project=iam-lab、Owner=your-name,便于按标签筛选和批量清理;第三,优先使用临时凭证与按需资源,实验结束后删除 IAM 用户访问密钥、删除测试用的 S3 桶和 KMS 密钥(注意 KMS 密钥有 7 天等待删除期,期间仍会计费)。
aws ce get-cost-and-usage 记录基线,实验结束后再对比一次,确认没有遗留资源在持续计费。