IAM
用户、策略与权限边界。
IAM
这一课你将能做到
- 创建 IAM 用户、组、角色,并给它们分配合适的策略
- 写出符合最小权限原则的自定义策略(Policy),限制只能访问特定 S3 桶
- 在 EC2 上使用 IAM Role 代替 Access Key,并解释为什么这是最佳实践
为什么要学
IAM 是 AWS 安全的「大门」。所有对 AWS 资源的操作都要经过 IAM 鉴权。本站如果迁到 AWS,后端服务要访问 S3、RDS、SES,每个服务用什么身份、有什么权限,全靠 IAM。面试必问「最小权限原则」「Role 和 User 的区别」。
人话:IAM 就是 AWS 的「门禁系统」。User 是员工工牌,Group 是部门,Role 是「临时通行证」——谁戴上这个通行证,谁就拥有对应的权限。Policy 是通行证上写的「允许进入哪些房间」。
先建立图像
IAM 核心概念关系图:
┌─────────────────────────────────────────┐
│ AWS 账号 (Root) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ User │ │ Group │ │ Role │ │
│ │(开发者A) │ │(开发组) │ │(EC2角色)│ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ └────────────┴────────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ Policy │ │
│ │(权限策略) │ │
│ └───────────┘ │
└─────────────────────────────────────────┘
策略(Policy)结构示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::codenav-uploads/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}
}
}
]
}
跟着做
步骤 1:创建 IAM 用户并加入组
# 创建用户
aws iam create-user --user-name developer-li
# 创建组
aws iam create-group --group-name developers
# 把用户加入组
aws iam add-user-to-group --user-name developer-li --group-name developers
# 给用户创建 Access Key(用于 CLI)
aws iam create-access-key --user-name developer-li
步骤 2:给组附加托管策略
# 附加只读策略到开发组
aws iam attach-group-policy --group-name developers --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
# 附加 EC2 全权限到运维组(先创建 ops 组)
aws iam create-group --group-name ops
aws iam attach-group-policy --group-name ops --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess
步骤 3:创建自定义策略(最小权限示例)
创建文件 s3-codenav-policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListCodenavBuckets",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "AllowReadWriteCodenavUploads",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::codenav-uploads",
"arn:aws:s3:::codenav-uploads/*"
]
}
]
}