You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2绑定S3全权限IAM角色后访问报错403及InvalidAccessKeyId如何解决

问题原因排查与解决方案

核心原因

出现上述两类报错最常见的原因按概率从高到低排序如下:

  • AWS CLI凭证优先级高于EC2绑定的IAM角色:AWS CLI的凭证获取优先级为「命令行传入参数 > 系统环境变量 > ~/.aws目录下的凭证配置文件 > EC2实例绑定的IAM角色凭证」。如果你的EC2实例内配置了过期、无效的本地AccessKey,CLI会优先调用该无效凭证,不会使用绑定的IAM角色权限,直接触发InvalidAccessKeyId和403报错。
  • IAM角色绑定未生效:Ansible playbook中绑定IAM角色的步骤存在配置错误,比如未正确创建/关联实例配置文件(Instance Profile,EC2绑定IAM角色的必需中间载体),或IAM角色的信任策略未允许EC2服务代入角色,导致实例无法获取角色权限。
  • S3桶策略拦截:目标S3桶配置了自定义桶策略,限制了访问源IP、可访问的账号主体等,即使IAM角色拥有AmazonS3FullAccess权限,也会被桶策略拦截返回403。

解决步骤

  • 第一步:清理本地无效凭证
    先备份并删除实例内的AWS本地配置文件,避免无效凭证被优先调用:
    mv ~/.aws ~/.aws.bak
    
    再检查系统环境变量,清理残留的AWS密钥配置:
    # 检查是否存在AWS相关环境变量
    env | grep AWS
    # 清理找到的密钥变量
    unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
    
    完成后先执行aws s3 ls测试,看是否还存在InvalidAccessKeyId报错。
  • 第二步:验证IAM角色绑定有效性
    调用EC2实例元数据接口,确认角色已成功绑定:
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
    
    正常会返回你绑定的IAM角色名称,若返回404则说明角色未绑定成功,需要回查Ansible playbook中实例配置文件的关联逻辑:EC2不能直接绑定IAM角色,必须先将角色挂载到实例配置文件,再将实例配置文件关联到EC2实例。
    同时确认IAM角色的信任策略包含EC2服务的代入权限,信任策略示例如下:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 第三步:排查S3桶策略限制
    如果完成前两步后仍返回403报错,登录AWS控制台检查目标S3桶的桶策略,确认没有限制当前EC2所属VPC、公网IP、IAM角色主体的访问规则,调整桶策略放开对应权限即可。

内容的提问来源于stack exchange,提问作者Prats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:24:03