Почему я не могу пропинговать свой экземпляр EC2, если я настроил VPC и EC2 через Terraform?

У меня есть настройка через Terraform, которая включает в себя VPC, общедоступную подсеть и экземпляр EC2 с группой безопасности. Я пытаюсь проверить связь с экземпляром EC2, но получаю таймауты.

Несколько вещей, которые я пытался обеспечить:

  • EC2 находится в подсети, и подсеть направляется в Интернет через шлюз

  • EC2 имеет группу безопасности, разрешающую весь трафик в обе стороны.

  • EC2 имеет эластичный IP

  • VPC имеет ACL, который подключен к подсети и разрешает весь трафик в обоих направлениях.

Я не уверен, что я здесь пропустил.

Мой tf-файл выглядит (отредактирован с учетом последних изменений):


resource "aws_vpc" "foobar" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_internet_gateway" "foobar_gateway" {
  vpc_id = aws_vpc.foobar.id
}

/*
Public subnet
*/
resource "aws_subnet" "foobar_subnet" {
  vpc_id = aws_vpc.foobar.id
  cidr_block = "10.0.1.0/24"
}

resource "aws_route_table" "foobar_routetable" {
  vpc_id = aws_vpc.foobar.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.foobar_gateway.id
  }
}

resource "aws_route_table_association" "foobar_routetable_assoc" {
  subnet_id = aws_subnet.foobar_subnet.id
  route_table_id = aws_route_table.foobar_routetable.id
}

/*
Web
*/
resource "aws_security_group" "web" {
  name = "vpc_web"
  vpc_id = aws_vpc.foobar.id

  ingress {
    protocol    = -1
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    protocol    = -1
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_network_acl" "main" {
  vpc_id = aws_vpc.foobar.id
  subnet_ids = [aws_subnet.foobar_subnet.id]

  egress {
    protocol   = -1
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }

  ingress {
    protocol   = -1
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }
}

resource "aws_instance" "web-1" {
  ami = "ami-0323c3dd2da7fb37d"
  instance_type = "t2.micro"
  subnet_id = aws_subnet.foobar_subnet.id
  associate_public_ip_address = true
}

resource "aws_eip" "web-1" {
  instance = aws_instance.web-1.id
  vpc = true
}

Почему я не могу пропинговать свой экземпляр EC2, если я настроил VPC и EC2 через Terraform?


person Joe Bob    schedule 17.05.2020    source источник
comment
Не могли бы вы проверить свои списки ACL VPC вручную через консоль AWS и посмотреть, разрешен ли трафик. Спасибо   -  person sogyals429    schedule 17.05.2020
comment
Отвечает ли это на ваш вопрос? Невозможно проверить связь с экземпляром AWS EC2   -  person Edcel Cabrera Vista    schedule 17.05.2020
comment
@EdcelCabreraVista, похоже, другая проблема, так как у меня есть группы безопасности, разрешающие весь трафик   -  person Joe Bob    schedule 17.05.2020


Ответы (2)


Почему вы добавляете параметр self в правило группы безопасности. В документации для terraform указано, что If true, the security group itself will be added as a source to this ingress rule. Это в основном означает, что только эта группа безопасности может получить доступ к экземпляру. Удалите это и попробуйте.

РЕДАКТИРОВАТЬ: см. Комментарии ниже, чтобы узнать, как устранить проблему.

person sogyals429    schedule 17.05.2020
comment
Это example в документации Terraform - правило входа по умолчанию, разрешающее весь трафик, имеет self = true ... Но я удалил это, оно все равно не сработало. Я проверил свою консоль AWS и увидел, что она не создавала никаких правил входящего / исходящего трафика, что могло быть проблемой. - person Joe Bob; 17.05.2020
comment
Да, тогда проблема может быть в сетевом ACL. Насколько я понимаю, в настоящее время SG не позволяет вашему ip или кому-либо еще подключаться к вашему экземпляру. Таким образом, вам также нужно будет удалить этот параметр self и добавить ACL. Не могли бы вы добавить это и попробовать. - person sogyals429; 17.05.2020
comment
Я удалил себя из группы безопасности, добавил ACL, чтобы разрешить весь трафик, и присоединил ACL к подсети. Все еще не работает - person Joe Bob; 17.05.2020
comment
Вы не назначили своему экземпляру какой-либо sg? Можете ли вы добавить это, пожалуйста, vpc_security_group_ids = [aws_security_group.web.id] и попробуйте. - person sogyals429; 17.05.2020
comment
sogyals, которые исправили это. Спасибо! - person Joe Bob; 17.05.2020
comment
Без проблем. Я бы посоветовал вам взглянуть на разделение маршрутов для таблицы маршрутов, так как этим проще управлять. - person sogyals429; 17.05.2020
comment
Вы должны отредактировать ответ, включив здесь то, что действительно нужно. Глядя на код, включенный в вопрос, я вообще не вижу ссылки на себя, но в экземпляре отсутствует конфигурация группы безопасности для фактического присоединения группы безопасности, поэтому в вашем ответе следует просто указать это. - person ydaetskcoR; 17.05.2020

Разрешение всего трафика через группу безопасности не приведет к включению проверки связи с экземпляром. Вам необходимо добавить определенное правило безопасности - изображение, показанное ниже, чтобы включить запрос ping.

Правило безопасности для включения проверки связи в экземпляре EC2 Помните, что AWS сделала это правило отдельным, чтобы вы знали, что делаете. Возможность пинговать экземпляр из любой точки мира делает ваш экземпляр уязвимым для людей, пытающихся найти экземпляр путем подбора различных IP-адресов.

Следовательно, рекомендуется осторожно изменить это правило.

person The Cloud Guy    schedule 17.05.2020
comment
Это совсем не так. Установка протокола на -1 разрешает все протоколы, включая ICMP. - person ydaetskcoR; 17.05.2020