No se puede realizar SSH en una instancia EC2 creada con Terraform

No se puede realizar SSH en una instancia EC2 creada con Terraform

Usando Terraform v1.0.11 en Ubuntu 18.04

Después de terraform applyver lo main.tfsiguiente, y después de esperar a que la instancia pase las comprobaciones (y luego otro minuto), los intentos de SSH se topan con una pared.

$ ssh -v -i ~/.ssh/toydeploy.pem [email protected]
OpenSSH_7.6p1 Ubuntu-4ubuntu0.5, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 18.144.125.224 [18.144.125.224] port 22.
debug1: connect to address 18.144.125.224 port 22: Connection timed out
ssh: connect to host 18.144.125.224 port 22: Connection timed out

Abrí una instancia manualmente con la misma AMI y par de claves, y puedo ingresar mediante SSH. Al comparar la configuración de red y seguridad en la consola, las únicas diferencias que he notado son que la instancia implementada manualmente usa la VPC predeterminada. y "Responder nombre DNS del recurso privado" muestra "IPv4 (A)" para la instancia implementada manualmente y "-" para la instancia Terraformed. Ambos parecen benignos, pero puede que me equivoque.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }
}

provider "aws" {
  profile = "default"
  region  = "us-west-1"
}

variable "cidr_vpc" {
  description = "CIDR block for VPC"
  default     = "10.1.0.0/16"
}

variable "cidr_subnet" {
  description = "CIDR block for subnet"
  default     = "10.1.0.0/20"
}

resource "aws_vpc" "toydeploy-vpc" {
  cidr_block           = var.cidr_vpc
  enable_dns_hostnames = true
  enable_dns_support   = true
}

resource "aws_subnet" "toydeploy-subnet" {
  vpc_id     = aws_vpc.toydeploy-vpc.id
  cidr_block = var.cidr_subnet
}

resource "aws_security_group" "toydeploy-sg" {
  name   = "toydeploy-sg"
  vpc_id = aws_vpc.toydeploy-vpc.id

  ingress {
    from_port = 22
    to_port   = 22
    protocol  = "tcp"
    cidr_blocks = [
      "0.0.0.0/0"
    ]
  }

  # Terraform removes the default rule, so we re-add it.
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "toydeploy" {
  ami                         = "ami-083f68207d3376798" # Ubuntu 18.04
  instance_type               = "t2.micro"
  security_groups             = ["${aws_security_group.toydeploy-sg.id}"]
  subnet_id                   = aws_subnet.toydeploy-subnet.id
  associate_public_ip_address = true
  key_name                    = "toydeploy"
}

Si nada de lo siguiente aparece como un problema y puede indicarme un ejemplo práctico, también se lo agradecería.

Resuelto

Un examen más detenido mostró que la tabla de enrutamiento solo enrutaba para la subred y no para 0.0.0.0/0. Agregar lo siguiente resolvió el problema.

resource "aws_internet_gateway" "toydeploy-ig" {
  vpc_id = aws_vpc.toydeploy-vpc.id
}

resource "aws_route_table" "toydeploy-rt" {
  vpc_id = aws_vpc.toydeploy-vpc.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.toydeploy-ig.id
  }
}

resource "aws_route_table_association" "toydeploy-rta" {
  subnet_id      = aws_subnet.toydeploy-subnet.id
  route_table_id = aws_route_table.toydeploy-rt.id
}

Respuesta1

El tiempo de espera de la conexión suele indicar un problema de red. Controlar:

  • Grupo de seguridad/NACL abiertos a su IP en el puerto 22
  • VPC tiene puerta de enlace a Internet
  • La subred tiene una ruta hacia la puerta de enlace de Internet.
  • La instancia tiene una IP pública
  • La ruta está configurada correctamente

Esta es la línea clave de tu intento de conexión que te indica lo que está sucediendo.

ssh: connect to host 18.144.125.224 port 22: Connection timed out

información relacionada