IAM基础 #
一、IAM概述 #
1.1 什么是IAM #
AWS IAM(Identity and Access Management)是AWS提供的身份和访问管理服务,用于安全地控制对AWS服务和资源的访问。
1.2 IAM特点 #
text
IAM核心特点:
├── 集中访问控制
│ └── 统一管理用户和权限
│
├── 精细权限控制
│ └── 可控制到具体API操作
│
├── 多因素认证
│ └── 增强账户安全
│
├── 联合身份
│ └── 支持外部身份提供商
│
├── 免费使用
│ └── IAM本身不收费
│
└── 全局服务
└── 跨所有区域生效
1.3 IAM核心概念 #
text
IAM核心组件:
├── 用户(User)
│ └── 与人或应用程序关联的身份
│
├── 组(Group)
│ └── 用户的集合
│
├── 角色(Role)
│ └── 临时凭证的身份
│
├── 策略(Policy)
│ └── 定义权限的JSON文档
│
└── 实体(Principal)
└── 可以执行操作的用户/角色/应用程序
二、IAM用户 #
2.1 用户类型 #
text
用户类型:
├── 根用户(Root User)
│ ├── 账户创建时自动创建
│ ├── 拥有所有权限
│ └── 仅用于账户管理
│
└── IAM用户
├── 创建的身份
├── 可分配权限
└── 用于日常操作
2.2 创建IAM用户 #
bash
aws iam create-user \
--user-name developer \
--tags Key=Department,Value=Engineering
aws iam create-login-profile \
--user-name developer \
--password TempPassword123! \
--password-reset-required
2.3 访问密钥 #
text
访问密钥用途:
├── 编程访问AWS
├── 包含访问密钥ID和秘密访问密钥
├── 每个用户最多2个
└── 定期轮换
bash
aws iam create-access-key --user-name developer
2.4 最佳实践 #
text
IAM用户最佳实践:
├── 不使用根用户日常操作
├── 为每个用户创建单独账户
├── 启用MFA
├── 定期轮换访问密钥
├── 使用强密码策略
└── 定期审计用户权限
三、IAM组 #
3.1 组的概念 #
text
IAM组特点:
├── 用户的集合
├── 统一管理权限
├── 一个用户可属于多个组
├── 组不能嵌套
└── 简化权限管理
3.2 创建组 #
bash
aws iam create-group --group-name Developers
aws iam add-user-to-group \
--group-name Developers \
--user-name developer
3.3 常用组设计 #
text
组设计示例:
├── Administrators
│ └── 管理员权限
│
├── Developers
│ └── 开发权限
│
├── ReadOnlyUsers
│ └── 只读权限
│
├── SecurityAuditors
│ └── 安全审计权限
│
└── DBAdmins
└── 数据库管理权限
四、IAM角色 #
4.1 角色概念 #
text
IAM角色特点:
├── 临时凭证
├── 无长期密码或访问密钥
├── 可被多种实体担任
│ ├── AWS服务
│ ├── IAM用户
│ ├── 联合用户
│ └── 应用程序
│
└── 短期会话凭证
4.2 创建角色 #
bash
aws iam create-role \
--role-name EC2Role \
--assume-role-policy-document file://trust-policy.json
信任策略示例:
json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
4.3 角色使用场景 #
text
角色使用场景:
├── EC2实例
│ └── 实例配置文件
│
├── Lambda函数
│ └── 执行角色
│
├── 跨账户访问
│ └── 其他账户用户担任
│
├── 联合身份
│ └── 外部身份提供商
│
└── AWS服务
└── 服务间访问
4.4 担任角色 #
bash
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/EC2Role \
--role-session-name MySession
五、IAM策略 #
5.1 策略类型 #
text
策略类型:
├── 托管策略
│ ├── AWS托管策略
│ └── 客户托管策略
│
├── 内联策略
│ └── 直接嵌入到用户/组/角色
│
└── 资源策略
└── 附加到资源(如S3存储桶策略)
5.2 策略结构 #
json
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowS3Read",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.0.2.0/24"
}
}
}]
}
5.3 策略元素 #
| 元素 | 说明 |
|---|---|
| Version | 策略语言版本 |
| Statement | 策略语句 |
| Sid | 语句标识符 |
| Effect | Allow或Deny |
| Action | 允许/拒绝的操作 |
| Resource | 操作的资源 |
| Condition | 条件 |
| Principal | 主体(资源策略) |
5.4 创建托管策略 #
bash
aws iam create-policy \
--policy-name S3ReadPolicy \
--policy-document file://policy.json
5.5 附加策略 #
bash
aws iam attach-user-policy \
--user-name developer \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam attach-role-policy \
--role-name EC2Role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
5.6 常用AWS托管策略 #
| 策略 | 说明 |
|---|---|
| AdministratorAccess | 完全访问权限 |
| PowerUserAccess | 除IAM外的完全访问 |
| ReadOnlyAccess | 只读访问 |
| AmazonS3ReadOnlyAccess | S3只读访问 |
| AmazonEC2FullAccess | EC2完全访问 |
六、权限边界 #
6.1 权限边界概念 #
text
权限边界特点:
├── 限制用户/角色的最大权限
├── 不授予权限,只限制权限
├── 必须与策略配合使用
└── 用于权限委托
6.2 设置权限边界 #
bash
aws iam put-user-policy-boundary \
--user-name developer \
--policy-arn arn:aws:iam::aws:policy/PowerUserAccess
七、IAM最佳实践 #
7.1 根账户保护 #
text
根账户保护:
├── 启用MFA
├── 不创建访问密钥
├── 仅用于账户管理
├── 使用强密码
└── 定期检查账户活动
7.2 最小权限原则 #
text
最小权限原则:
├── 只授予必要的权限
├── 使用AWS托管策略作为起点
├── 定期审计权限
├── 使用访问分析器
└── 删除不需要的权限
7.3 安全最佳实践 #
text
安全建议:
├── 启用MFA
├── 使用角色而非用户
├── 定期轮换凭证
├── 使用条件限制访问
├── 启用CloudTrail审计
├── 使用权限边界
└── 定期审查权限
八、小结 #
本章介绍了IAM基础:
| 内容 | 要点 |
|---|---|
| IAM概念 | 身份和访问管理服务 |
| 用户 | 与人/应用关联的身份 |
| 组 | 用户集合,统一权限管理 |
| 角色 | 临时凭证身份 |
| 策略 | 定义权限的JSON文档 |
下一步学习 #
了解IAM基础后,接下来可以:
最后更新:2026-03-28