IAM 权限管理
核心概念
IAM(Identity and Access Management)控制「谁可以对什么资源做什么操作」。
| 概念 | 说明 |
|---|---|
| User | 人类用户,有长期凭证(Access Key) |
| Group | 用户组,批量授权 |
| Role | 角色,临时凭证,EC2/Lambda 等服务使用 |
| Policy | JSON 策略文档,定义允许/拒绝的操作 |
策略结构
AWS IAM Policy 示例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ReadOnly",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "10.0.0.0/8"
}
}
}
]
}
最佳实践
| 原则 | 做法 |
|---|---|
| 最小权限 | 仅授予完成工作所需的最少权限 |
| 使用角色而非用户 | EC2/Lambda 使用 IAM Role,不用 Access Key |
| 启用 MFA | 所有人类用户强制 MFA |
| 定期轮换 | Access Key 90 天轮换 |
| 不使用 Root | Root 账号仅用于初始设置,日常操作用 IAM 用户 |
| 审计 | 启用 CloudTrail 记录所有 API 调用 |
常见角色设计
| 角色 | 权限 |
|---|---|
| Admin | AdministratorAccess(仅少数人) |
| Developer | 读取所有 + 指定服务写入(不含 IAM) |
| DBA | RDS/ElastiCache 完整权限 |
| ReadOnly | ReadOnlyAccess(查看但不修改) |
| CI/CD Pipeline | ECR 推送 + ECS 部署 + S3 读取 |
常见面试问题
Q1: IAM User 和 IAM Role 的区别?
答案:
- User:代表一个人,有长期凭证(密码 / Access Key),适合人类用户
- Role:没有长期凭证,通过 AssumeRole 获取临时凭证,适合服务(EC2 / Lambda)和跨账号访问
最佳实践:应用程序永远使用 Role 而非 User 的 Access Key。