AWS IAM权限管理完全指南:用户、角色、策略配置实操教程

一家国内SaaS企业在AWS上运行了半年后,某天收到了一封来自AWS的异常账单邮件——单月账单突然从2000美元飙升到1.8万美元。

排查后发现:一名离职员工的账号没有及时删除,其AccessKey被泄露,黑客用这个密钥在多个区域批量启动了高性能GPU实例挖矿。

这次事故完全可以避免——如果他们当初正确配置了AWS IAM。

IAM(Identity and Access Management)是AWS账户安全的第一道防线,也是最容易被忽视的一道防线。


一、AWS IAM是什么?它解决什么问题?

AWS IAM是AWS提供的身份和访问管理服务,核心功能是控制谁能访问你的AWS资源,以及能做什么

没有IAM的世界会发生什么:

  • 所有人共用Root账号的用户名和密码
  • 一个实习生有和CTO相同的权限
  • 外部合作商访问你的S3桶时,顺便能看到所有RDS数据库

有了IAM之后,你可以精确控制:

  • (人员/系统)能访问
  • 哪些AWS服务和资源
  • 什么操作(读/写/删除/管理)
  • 在什么条件下(IP限制/时间限制/MFA验证)

IAM是免费服务,不需要额外付费。


二、IAM的四个核心概念

在实操之前,必须先弄清楚IAM的基本组成:

1. IAM用户(User)

代表一个具体的人或应用程序。每个IAM用户有独立的登录凭证(用户名+密码,或AccessKey)。

适合场景:

  • 给开发团队每个成员创建独立账号
  • 给自动化脚本/CI/CD工具创建专属账号

2. IAM用户组(Group)

将多个用户归为一组,统一管理权限。给用户组分配策略,组内所有用户自动继承。

适合场景:

  • 开发组、运维组、数据组分别赋予不同权限
  • 新员工加入直接加入对应组,无需单独配置权限

3. IAM策略(Policy)

策略是权限规则的JSON文档,定义”允许或拒绝什么操作”。

AWS提供两类策略:

  • AWS托管策略:AWS预置的常用策略,如 AdministratorAccess、ReadOnlyAccess
  • 客户托管策略:你自己创建的自定义策略,更精细

4. IAM角色(Role)

角色是可以被”临时扮演”的权限身份,没有固定的用户名和密码。

适合场景:

  • EC2实例需要访问S3(给EC2绑定角色,而不是在代码里写AccessKey)
  • 跨账号访问(A账号的服务访问B账号的资源)
  • 第三方服务(如GitHub Actions)部署到你的AWS账户
概念 类比 核心用途
IAM用户 员工工牌 具体人员/系统的登录身份
IAM用户组 部门 批量管理同类用户的权限
IAM策略 权限清单 定义能做什么/不能做什么
IAM角色 临时访客证 AWS服务间/跨账号的临时权限

三、最小权限原则:IAM安全的核心思想

在配置任何IAM权限之前,必须记住一个原则:

最小权限原则(Principle of Least Privilege)

只给每个用户/角色/服务恰好够用的权限,不多给一分。

这意味着:

  • 开发人员只需要访问开发环境的EC2和RDS,不需要生产环境权限
  • 数据分析师只需要S3读取权限,不需要EC2启动权限
  • Lambda函数只需要写DynamoDB的权限,不需要读S3

很多企业图省事,给所有人 AdministratorAccess 全管理员权限,这是最危险的做法。


四、实操配置:从零搭建安全的IAM体系

第一步:保护Root账号

Root账号是AWS账户的”最高权限”账号,一旦被盗,后果不可控。

Root账号安全三件事:

  • 开启MFA(多因素认证):在AWS控制台 → 安全凭证 → 激活MFA,绑定手机Authenticator App
  • 不创建AccessKey:Root账号不要生成编程访问密钥
  • 只用于账单管理:日常操作全部切换到IAM用户完成

第二步:创建管理员IAM用户

在IAM控制台创建一个管理员用户,用于日常运维,代替Root账号登录。

配置要点:

  • 用户名建议用真实姓名或工号,如 admin-zhangsan
  • 访问类型:勾选”AWS管理控制台访问”
  • 权限策略:附加 AdministratorAccess(仅限真正的管理员)
  • 同样为此用户开启MFA

以后登录AWS一律使用这个IAM用户,Root账号封存备用。

第三步:创建用户组并分配权限

按团队职能建立用户组,并为每组分配对应策略。

推荐的基础用户组配置:

用户组名称 适合人员 建议附加策略
Developers 开发工程师 AmazonEC2FullAccess + AmazonS3FullAccess(限开发环境)
DataAnalysts 数据分析师 AmazonS3ReadOnlyAccess + AmazonAthenaFullAccess
DevOps 运维工程师 PowerUserAccess(排除IAM管理权限)
Billing 财务/管理层 AWSBillingReadOnlyAccess
ReadOnly 审计/合规 ReadOnlyAccess

第四步:为EC2/Lambda配置IAM角色

这是最容易被遗漏的步骤,也是安全事故的高发点。

错误做法:在EC2实例的代码或配置文件里直接写入AccessKey ID和SecretKey。这些密钥一旦被提交到GitHub或泄露,攻击者可以立即使用。

正确做法:创建IAM角色并绑定到EC2实例。

具体步骤:

  • 在IAM控制台 → 角色 → 创建角色
  • 选择”AWS服务” → “EC2″作为信任实体
  • 附加需要的策略(如AmazonS3ReadOnlyAccess)
  • 给角色起名,如 ec2-s3-readonly-role
  • 在EC2实例设置中,将此角色附加到实例

EC2实例上的代码通过实例元数据自动获取临时凭证,无需在代码中硬编码任何密钥。

第五步:创建自定义精细化策略

当AWS托管策略粒度不够细时,需要创建自定义策略。

一个典型场景:允许用户只读取特定S3桶,而不是所有S3桶。

自定义策略的核心要素包括四个字段:

  • Effect:Allow(允许)或 Deny(拒绝)
  • Action:具体的API操作,如 s3:GetObject、ec2:DescribeInstances
  • Resource:具体资源的ARN(Amazon资源名称),支持通配符
  • Condition(可选):额外条件,如IP限制、MFA要求

以”只读特定S3桶”为例,策略逻辑是:允许执行 s3:GetObject 和 s3:ListBucket 两个操作,但将资源限定为特定桶的ARN,而不是所有S3资源。


五、IAM安全进阶:4个容易忽略的关键设置

设置密码策略

在IAM控制台 → 账户设置 → 密码策略,建议配置:

  • 最小密码长度:12位以上
  • 要求包含大写字母、小写字母、数字、特殊符号
  • 密码有效期:90天
  • 禁止重复使用最近5次密码

定期审查和轮换AccessKey

通过IAM的”凭证报告”功能,可以导出所有用户的AccessKey使用情况,包括:

  • Key是否超过90天未轮换
  • Key是否从未被使用(应立即删除)
  • 用户上次登录时间(长期未登录可能需要禁用)

建议每季度做一次凭证审计。

启用AWS CloudTrail记录所有IAM操作

CloudTrail会记录账户内所有API调用,包括IAM配置变更、用户登录、资源访问等。

这是安全事故溯源的核心工具。发生异常时,可以精确定位是哪个用户/角色/服务在什么时间做了什么操作。

建议将CloudTrail日志同步到S3并开启加密存储,保留至少一年。

使用权限边界(Permission Boundary)

当你需要授权给下属管理员(如DevOps Leader)创建IAM用户,但又担心他创建的用户权限超过自己的权限时,可以使用”权限边界”功能。

权限边界定义了某个用户或角色最多能拥有的权限上限,即使策略里写了更高权限,实际执行时也受边界限制。


六、IAM常见问题排查

问题1:用户登录时提示”无权访问”

排查顺序:

  • 检查用户是否被附加了策略(或所在用户组有策略)
  • 检查资源ARN是否写对(很多人ARN写错)
  • 检查是否有显式的Deny策略覆盖了Allow(Deny优先级更高)

问题2:EC2无法访问S3

最常见原因:EC2实例没有绑定IAM角色,或绑定的角色策略不包含S3权限。

问题3:跨账号访问失败

需要在两边都配置:被访问账号的资源策略中允许另一个账号的ARN,且访问方账号的用户/角色有假设目标角色的权限(sts:AssumeRole)。


写在最后

AWS IAM配置看似复杂,但核心逻辑其实很简单:最小权限、角色代替密钥、定期审计

做到这三点,80%的云安全风险就可以规避。

开头那家差点损失近2万美元的企业,如果当时做到了”为每人创建独立IAM用户+离职立即删除账号”,这次事故完全不会发生。

云安全的代价,往往在疏忽的那一刻已经注定。

如果你正在搭建AWS环境,或者不确定现有IAM配置是否安全,欢迎联系 aws-oncloudai.com 的技术团队,我们提供免费的AWS账户安全评估服务。


本文由 aws-oncloudai.com 云架构团队原创,转载请注明来源。

更多探索

Tell me what you need