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 用户,而不是共用根账户。

控制台操作步骤:

  1. 登录 AWS 管理控制台,打开 IAM 服务。
  2. 在左侧导航窗格中选择 用户,然后点击 创建用户
  3. 输入用户名,并选择访问类型:
    • 编程访问:生成访问密钥 ID 和秘密访问密钥(用于 CLI、SDK、API 调用)。
    • AWS 管理控制台访问:设置密码,允许用户登录控制台。
  4. 设置权限:可直接附加已有策略,或将用户加入组。
  5. (可选)设置标签后,完成创建。立即下载或保存访问密钥,之后无法再次查看秘密访问密钥。

创建 IAM 用户组以简化权限分配

不建议直接对每个用户单独附加策略,应使用 IAM 用户组,例如“开发者组”、“运维组”。

示例:为“运维组”分配 AmazonEC2ReadOnlyAccess 策略

  1. 在 IAM 控制台选择 用户组创建新组
  2. 输入组名 Ops-Team
  3. 在附加策略筛选框中搜索 AmazonEC2ReadOnlyAccess,勾选并附加。
  4. 创建组,然后将用户添加到该组,用户自动继承组的所有策略。

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"
        }
      }
    }
  ]
}
  • EffectAllowDeny(显式拒绝优先)。
  • 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 桶的内容。

  1. 打开 IAM 控制台,选择 角色创建角色
  2. 选择受信任实体类型:AWS 服务,然后选择 EC2
  3. 在策略筛选框中搜索 AmazonS3ReadOnlyAccess 并勾选(此为 AWS 托管策略,允许对所有 S3 资源只读;若想限制桶,可稍后编辑信任策略)。
  4. 输入角色名称 EC2-S3-Read-Role,创建。
  5. 在启动 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 则最终结果为拒绝。


日常安全最佳实践

  1. 锁定根用户:不用于日常操作,启用 MFA,删除其访问密钥。
  2. 强制 MFA:尤其为拥有控制台访问权限的 IAM 用户开启多因素认证。
  3. 定期轮换密钥:通过 IAM 控制台可查看最后使用日期,停用未使用票据。
  4. 使用 IAM Access Analyzer:发现公开或跨账户共享的资源。
  5. 启用 AWS CloudTrail:记录所有 API 调用,便于审计。
  6. 不要共享 IAM 用户,为每个实体分配独立身份。
  7. 为生产环境使用角色而非长期密钥

快速自检:记住这三者关系

  • (用户/组/服务)通过 角色策略 获得 对什么的权限
  • 策略(JSON)是授权核心;用户是身份的长期载体;角色是短期凭证的载具。

掌握了 IAM 的这些基础,你就能安全地迈出 AWS 权限管理的第一步。如果需要进一步了解跨账户角色切换或使用 AWS Organizations SCP 进行账户级别管控,可继续查阅进阶教程。