AWS IAM Role 怎么给 EC2 授权?Instance Profile 与临时凭证

使用自动轮换的角色凭证替代代码中的长期 Access Key

讲解 AWS EC2 IAM Role、Instance Profile、信任与权限策略、临时凭证、IMDSv2、最小权限和 AccessDenied 排查。

运行在 EC2 上的应用需要调用 S3、CloudWatch 等 AWS API 时,应通过 IAM Role 和 Instance Profile 获得自动轮换的临时凭证,而不是把长期 Access Key 写进代码、环境变量或 User Data。

默认做法:进入 AWS 中文控制台“EC2 → 实例”,选中实例后点“操作 → 安全 → 修改 IAM 角色”,绑定只含业务所需动作的角色。应用使用 AWS SDK 默认凭证链,从实例元数据取得自动轮换的临时凭证。角色不会删除实例数据,通常也不单独收费;权限过宽却可能让程序误删资源或产生额外账单。

AWS EC2 IAM Role Instance Profile 与临时凭证示意图
应用通过 SDK 从实例元数据获得临时凭证,权限由 IAM Policy 控制。

Role 与 Instance Profile

对象职责
Trust Policy允许 EC2 服务承担角色
Permissions Policy定义可调用的动作和资源
IAM Role承载信任与权限
Instance Profile把角色交付给 EC2;一个配置文件只能包含一个角色

配置顺序

  1. 列出应用真实需要的 API 动作与资源 ARN;
  2. 建立允许 EC2 承担的角色;
  3. 附加最小权限策略;
  4. 通过 Instance Profile 关联实例或启动模板;
  5. 让 AWS SDK 使用默认凭证链;
  6. 使用 CloudTrail 和 AccessDenied 结果收敛权限。

不要手工缓存临时凭证

角色凭证包含临时 Access Key、Secret Key 和 Session Token,AWS 会在到期前轮换。应用应由支持的 SDK 自动刷新;把元数据响应写入配置文件,会重新引入泄露和过期问题。

IMDSv2 与元数据安全

生产实例应评估要求 IMDSv2,并限制不可信进程、代理和 SSRF 访问元数据。切换为 IMDSv2 only 前必须验证旧 SDK、代理和容器网络路径,否则依赖 IMDSv1 的组件会中断。

AccessDenied 排查

  • 实例是否关联正确 Instance Profile,而不是只创建了 Role;
  • Role 权限是否包含动作、资源与条件;
  • 资源策略、KMS Key Policy、SCP 或 Permissions Boundary 是否拒绝;
  • 应用使用的是实例角色凭证,还是残留环境变量中的旧密钥;
  • 区域、账户和资源 ARN 是否正确。

创建角色时分清两份策略

信任策略回答“谁可以扮演这个角色”,EC2 实例角色应信任 EC2 服务;权限策略回答“临时凭证能做什么”,例如只允许访问某个 S3 桶的指定前缀。Instance Profile 是把角色交付给 EC2 的容器,控制台通常代为创建和关联。只创建 IAM 角色但没有关联到实例,应用仍拿不到凭证。

从长期密钥迁移的顺序

  1. 盘点应用实际调用的 API、资源 ARN、区域和 KMS 密钥。
  2. 创建最小权限角色并关联测试实例,启用 IMDSv2 要求。
  3. 移除代码、环境变量和配置文件中的 Access Key,让 SDK 使用默认凭证链。
  4. 用真实业务动作验证,再停用旧 Access Key;观察无调用后删除。

不要在文章、日志或工单中输出临时凭证。临时凭证可轮换,不等于泄露后无风险;SSRF 或不可信容器仍可能在有效期内滥用。

AccessDenied 怎么读

  • 报错身份不是预期角色:检查实例关联、容器凭证来源和本地环境变量是否覆盖默认链。
  • 动作允许但资源拒绝:继续看 S3 桶策略、KMS 密钥策略、组织 SCP 或权限边界中的显式拒绝。
  • 刚改策略仍失败:确认调用区域、资源 ARN 和角色会话,避免反复扩大到 *
  • 元数据取不到:检查 IMDSv2 令牌、Hop Limit 与代理环境,不要退回长期密钥。

最小权限怎样验收

在实例内先确认调用身份,再执行一项必需的只读或测试操作;随后尝试明确不应允许的无关操作,必须被拒绝。到 CloudTrail 核对事件主体是角色会话而非个人用户或长期 Key。把策略 JSON、角色名和应用版本纳入变更记录,但不保存凭证。

回退边界

修改前保存上一策略版本和旧角色关联。新版本导致生产失败时,可短时切回上一份已验证的最小策略,同时根据明确拒绝项修正;不要直接绑定管理员策略。只有新角色稳定、旧 Access Key 的调用归零并完成告警后,才删除旧密钥。角色轮换过程本身不会恢复被误删的数据,关键资源仍要独立备份。

容器和代理环境要单独验证

同一 EC2 上运行多个互不信任容器时,实例角色可能让所有能访问元数据的进程共享权限。需要按工作负载隔离凭证时,应采用相应容器身份方案或网络边界,不能只给实例绑定一个宽泛角色。URL 预览、下载代理等功能还要阻止访问链路本地元数据地址,避免 SSRF 取得临时凭证。

完成当前任务后继续检查

官方资料

AWS 教程AWS CloudShell 显示账户验证中怎么办?已验证仍无法创建环境的排查2026-09-15AWS 教程AWS EBS 卷卡在 attaching 怎么排查?可用区、挂载限制与设备识别2026-09-01AWS 教程AWS CloudTrail 怎么查操作记录?Event history、Trail 与审计边界2026-08-28

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区