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

EC2上Terraform配置AWS无凭证报错,求IAM角色解决方案

问题解决步骤

1. 修复EC2实例元数据服务(IMDS)访问问题

报错中的proxyconnect tcp: dial tcp ... i/o timeout说明Terraform无法通过IMDS获取实例关联的IAM角色凭证,核心原因是IMDS请求受阻,可按以下步骤排查:

检查并清理代理配置

执行命令查看当前系统代理环境变量:

echo $HTTP_PROXY $HTTPS_PROXY

如果存在代理变量,需临时取消或添加IMDS地址例外:

# 临时清空代理
unset HTTP_PROXY HTTPS_PROXY
# 或设置不代理IMDS地址
export NO_PROXY=169.254.169.254

验证IMDS连通性

执行curl命令测试能否获取IAM角色信息:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

若返回关联的IAM角色名称,说明IMDS访问正常;若仍超时,需检查:

  • 实例安全组是否允许出站访问169.254.169.254的TCP 80端口
  • 子网网络ACL是否允许入站/出站的TCP 80流量指向169.254.169.254

2. 正确配置Terraform AWS Provider的角色假设

你直接在provider块添加role_arn报错,是因为AWS Provider 4.x版本中,角色ARN需放在assume_role嵌套块内,而非直接作为provider参数。修改main.tf的provider配置:

provider "aws" {
  region = var.aws_region

  assume_role {
    role_arn = var.aws_role_arn
  }
}

同时确保变量文件(如variables.tf)中已声明aws_role_arn:

variable "aws_role_arn" {
  type        = string
  description = "ARN of the IAM role to assume"
}

3. 验证IAM角色配置

确认EC2关联的IAM角色已附加AmazonEC2FullAccess策略,且信任关系允许EC2服务扮演该角色(默认EC2角色的信任关系符合要求,示例如下):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4. 重新执行Terraform命令

完成上述配置后,重新初始化并执行计划:

terraform init
terraform plan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:11:26