AWS IAM:用户、角色与策略
FreeGuideOnline
最新
2026-06-30
什么是 AWS IAM?
AWS Identity and Access Management (IAM) 是一项 Web 服务,让你能够安全地控制对 AWS 资源和服务的访问。你可以使用 IAM 来创建和管理 AWS 用户和组,并通过权限策略来允许或拒绝他们对 AWS 资源的访问。所有权限管理都遵循“最小权限原则”——只授予完成工作所需的权限,不多给。
核心概念:用户、角色与策略
在深入操作之前,先快速区分 IAM 的三个核心组件:
- IAM 用户:代表与 AWS 交互的一个人或一个应用程序。拥有长期凭证(如密码和访问密钥)。
- IAM 角色:不是唯一关联给某个人,而是可以被任何需要它的人或服务“代入”。角色提供临时安全凭证,非常适合 EC2 实例或跨账户访问。
- IAM 策略:用 JSON 编写的权限文档,明确“谁(主体)在什么条件下能对哪些资源做什么操作”。策略被附加到用户、组或角色上。
IAM 用户管理
创建 IAM 用户(用于员工或应用程序)
当团队成员或外部工具需要访问 AWS 时,应为其创建独立的 IAM 用户,而不是共用根账户。
控制台操作步骤:
- 登录 AWS 管理控制台,打开 IAM 服务。
- 在左侧导航窗格中选择 用户,然后点击 创建用户。
- 输入用户名,并选择访问类型:
- 编程访问:生成访问密钥 ID 和秘密访问密钥(用于 CLI、SDK、API 调用)。
- AWS 管理控制台访问:设置密码,允许用户登录控制台。
- 设置权限:可直接附加已有策略,或将用户加入组。
- (可选)设置标签后,完成创建。立即下载或保存访问密钥,之后无法再次查看秘密访问密钥。
创建 IAM 用户组以简化权限分配
不建议直接对每个用户单独附加策略,应使用 IAM 用户组,例如“开发者组”、“运维组”。
示例:为“运维组”分配 AmazonEC2ReadOnlyAccess 策略
- 在 IAM 控制台选择 用户组 → 创建新组。
- 输入组名
Ops-Team。 - 在附加策略筛选框中搜索
AmazonEC2ReadOnlyAccess,勾选并附加。 - 创建组,然后将用户添加到该组,用户自动继承组的所有策略。
IAM 策略:JSON 权限规则详解
策略的结构
IAM 策略是用 JSON 编写的,关键元素如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
}
]
}
- Effect:
Allow或Deny(显式拒绝优先)。 - Action:允许的具体服务操作,如
s3:ListBucket。 - Resource:受影响的资源 ARN,使用
*表示所有资源。 - Condition(可选):限定生效条件,例如来源 IP、MFA 已启用等。
常用的 AWS 托管策略
AWS 提供了大量预定义的托管策略,覆盖常见场景:
| 策略名称 | 用途 |
|---|---|
AdministratorAccess |
完全的管理权限(谨慎使用) |
PowerUserAccess |
除 IAM 和 Organizations 外的所有权限 |
ReadOnlyAccess |
对所有资源的只读访问 |
AmazonS3FullAccess |
S3 完整权限 |
AWSLambdaBasicExecutionRole |
Lambda 向 CloudWatch 写入日志的权限 |
最佳实践:优先使用托管策略,需要细粒度控制时再编写自定义策略。
编写自定义策略示例
场景:开发人员需要对其标记为 Project=Alpha 的 EC2 实例执行启动、停止、重启操作,但不允许终止。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Project": "Alpha"
}
}
}
]
}
将此 JSON 创建为策略(如 Dev-EC2-Restart-Alpha)后附加到相应用户或组即可。
IAM 角色:安全地授予临时访问权限
何时使用 IAM 角色
- EC2 实例访问其他 AWS 服务:将角色附加到 EC2,应用程序通过实例元数据获取临时凭证访问 S3、DynamoDB 等,无需在代码中硬编码密钥。
- 跨账户访问:允许 A 账户的用户访问 B 账户的资源。
- 联合身份验证:公司现有身份系统(如企业 AD)的用户直接联合登录并获得临时的 AWS 访问权限。
- AWS 服务间操作:例如 Lambda 函数需要读取 S3 桶,为其创建执行角色。
创建一个供 EC2 使用的角色
目标:允许 EC2 上的应用读取特定 S3 桶的内容。
- 打开 IAM 控制台,选择 角色 → 创建角色。
- 选择受信任实体类型:AWS 服务,然后选择 EC2。
- 在策略筛选框中搜索
AmazonS3ReadOnlyAccess并勾选(此为 AWS 托管策略,允许对所有 S3 资源只读;若想限制桶,可稍后编辑信任策略)。 - 输入角色名称
EC2-S3-Read-Role,创建。 - 在启动 EC2 实例时,在“IAM 角色”下拉中选择该角色。实例内部即可通过
http://169.254.169.254/latest/meta-data/iam/security-credentials/获取临时凭证。
更安全的做法:限制角色只能访问指定桶
修改角色的自定义策略,替换托管策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-app-data",
"arn:aws:s3:::my-app-data/*"
]
}
]
}
这样该 EC2 实例只能读取 my-app-data 桶,遵循最小权限。
权限边界与显式拒绝
- 权限边界:限制用户或角色可拥有的最大权限,即使直接附加了更多策略也无法突破。适合在委托管理时设置安全护栏。
- 显式拒绝:在任何策略中写入
"Effect": "Deny"将覆盖所有 Allow。可用于实现强制安全控制,如拒绝删除 CloudTrail 日志。
策略评估逻辑总结:默认隐式拒绝 → 如有 Allow 则允许 → 如有 Deny 则最终结果为拒绝。
日常安全最佳实践
- 锁定根用户:不用于日常操作,启用 MFA,删除其访问密钥。
- 强制 MFA:尤其为拥有控制台访问权限的 IAM 用户开启多因素认证。
- 定期轮换密钥:通过 IAM 控制台可查看最后使用日期,停用未使用票据。
- 使用 IAM Access Analyzer:发现公开或跨账户共享的资源。
- 启用 AWS CloudTrail:记录所有 API 调用,便于审计。
- 不要共享 IAM 用户,为每个实体分配独立身份。
- 为生产环境使用角色而非长期密钥。
快速自检:记住这三者关系
- 谁(用户/组/服务)通过 角色 或 策略 获得 对什么的权限。
- 策略(JSON)是授权核心;用户是身份的长期载体;角色是短期凭证的载具。
掌握了 IAM 的这些基础,你就能安全地迈出 AWS 权限管理的第一步。如果需要进一步了解跨账户角色切换或使用 AWS Organizations SCP 进行账户级别管控,可继续查阅进阶教程。