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

Terraform调用AWS服务时返回‘i/o timeout’错误,求解决方案

问题:Terraform AWS Provider 无法假定IAM角色,DNS解析超时

执行任何需要Terraform与AWS服务交互的操作时,均触发以下错误:

Error: error configuring Terraform AWS Provider: IAM Role (arn:aws:iam::12345678910:role/terraform-role) cannot be assumed.
│
│ There are a number of possible causes of this - the most common are:
│   * The credentials used in order to assume the role are invalid
│   * The credentials do not have appropriate permission to assume the role
│   * The role ARN is not valid
│
│ Error: operation error STS: AssumeRole, https response error StatusCode: 0, RequestID: , request send failed, Post "https://sts.us-east-1.amazonaws.com/": dial tcp: lookup sts.us-east-1.amazonaws.com on 1.1.1.1:53: read udp 192.168.1.246:0->1.1.1.1:53: i/o timeout
│
│
│   with provider["registry.terraform.io/hashicorp/aws"],
│   on main.tf line 13, in provider "aws":
│   13: provider "aws" {

已完成的排查步骤

  • 同一网络下同款软件版本的另一台MacBook可正常运行
  • 切换至其他网络后问题依旧
  • 尝试ISP DNS(192.168.1.1)、Google DNS(8.8.8.8)、CloudFlare DNS(1.1.1.1),均无改善
  • 执行命令dig @1.1.1.1 sts.us-east-2.amazonaws.com可正常返回解析结果
  • AWS CLI可正常与STS服务通信
  • 容器内运行Terraform并挂载AWS凭证卷可正常工作,仅本地终端运行时出错
  • 测试Terraform 1.2.5、1.0.0、1.0.3版本,问题均未解决

环境信息

macOS Monterey, version 12.5
Terraform v1.2.5
aws-cli/2.0.30 Python/3.7.4 Darwin/21.6.0 botocore/2.0.0dev34
Go runtime version: go1.18.1

可能的解决方案

1. 清除终端代理环境变量

Terraform基于Go开发,Go程序会优先读取系统代理变量,即使未手动设置,也可能存在残留配置。执行以下命令查看并清除:

# 查看当前代理变量
echo $HTTP_PROXY $HTTPS_PROXY $NO_PROXY
# 清除代理变量
unset HTTP_PROXY HTTPS_PROXY NO_PROXY

之后重新运行Terraform命令测试。

2. 强制Terraform跳过DNS解析

在AWS Provider配置中直接指定STS服务端点IP(可通过dig sts.us-east-1.amazonaws.com获取),绕过DNS解析步骤:

provider "aws" {
  region                      = "us-east-1"
  assume_role {
    role_arn = "arn:aws:iam::12345678910:role/terraform-role"
  }
  # 替换为实际解析到的STS服务IP
  sts_endpoint               = "https://<STS_IP_ADDRESS>"
  skip_region_validation     = true
  skip_metadata_api_check    = true
}

3. 刷新MacOS DNS缓存

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

刷新后重新运行Terraform测试。

4. 检查终端网络权限

  • 打开「系统设置」→「隐私与安全性」→「网络」
  • 确保当前使用的终端(Terminal/iTerm2等)处于勾选状态,拥有网络访问权限

5. 临时禁用IPv6

部分网络环境下IPv6解析会导致超时:

  • 打开「系统设置」→「网络」→ 选中当前网络 →「高级」→「TCP/IP」
  • 将「配置IPv6」设置为「仅链接本地」或手动删除所有IPv6地址
  • 重启终端后测试

6. 强制Go使用系统DNS解析方式

设置环境变量让Go遵循系统DNS解析逻辑:

export GODEBUG=netdns=cgo

在当前终端运行Terraform命令测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:54:13