【问题标题】:Connection timed out error in Lambda FunctionLambda 函数中的连接超时错误
【发布时间】:2020-06-22 01:18:12
【问题描述】:

我正在尝试通过 lambda 函数对 AWS 账户中的所有 ec2 实例进行 SSH 连接。

c.connect(hostname = each_in.private_ip_address, username = 'pcs_user', pkey = k)

但是我遇到了这样的错误。我已将 AWSLambdaVPCAccessExecutionRole 用于 IAM 角色。

Response:
{
  "errorMessage": "[Errno 110] Connection timed out",
  "errorType": "TimeoutError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 30, in lambda_handler\n    c.connect( hostname = each_in.private_ip_address, username = 'pcs_us', pkey = k )\n",
    "  File \"/opt/python/paramiko/client.py\", line 349, in connect\n    retry_on_signal(lambda: sock.connect(addr))\n",
    "  File \"/opt/python/paramiko/util.py\", line 283, in retry_on_signal\n    return function()\n",
    "  File \"/opt/python/paramiko/client.py\", line 349, in <lambda>\n    retry_on_signal(lambda: sock.connect(addr))\n"
  ]
}

【问题讨论】:

  • 2 个问题,Lambda 是否在 VPC 中,您是否已将 Lambda IP 范围列入您的安全组中的白名单?
  • @Chris Williams 因为我需要访问 AWS 账户中的所有 ec2 实例,所以我没有为 lambda 函数指定 VPC。我刚刚将 AWSLambdaVPCAccessExecutionRole 添加到 IAM 角色。
  • 该角色仅授予 LAmbda 函数管理其 ENI 的权限,但要做到这一点,它需要在 VPC 中才能运行 :)
  • 由于我需要访问 AWS 账户中的所有 EC2 实例,有什么办法可以同时选择所有 VPC。
  • 建议为 Lambda 创建一个 VPC 并附加一个中转网关以允许 Lambda VPC 与所有 VPC 对话。否则,您将需要让每个实例都是公共的,并将经常更改的 IP 范围列入白名单。答案描述了如何添加到 VPC。

标签: amazon-web-services amazon-ec2 ssh aws-lambda


【解决方案1】:

由于安全组规则阻止访问,Lambda 似乎无法连接到您的 EC2 实例。

如果您尝试连接到您账户中的 EC2 实例,您应该 add your Lambda to your VPC 通过 VPC 配置附加它,它应该被添加到私有子网中。

将您的 Lambda 添加到您的 VPC 后,在您的安全组中将实例列入白名单,允许您的 Lambda 所在子网的 IP 范围。

通过这样做,您将阻止任何访问通过公共互联网。确保您的 Lambda 通过其私有 IP 地址连接到任何 VPC。对于 VPC 之外的任何实例,您都需要通过 Transit Gatewaypeering connection 使用对等互连。

如果您无法将 Lambda 放入 VPC,那么您需要在每个实例的安全组中维护一个白名单,以将 ip-ranges.json 文件中的 Lambda 公共范围列入白名单。这必须针对其部署到的区域中的 Lambda 服务范围。

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2018-03-03
    相关资源
    最近更新 更多