Группа безопасности и подсеть принадлежат разным сетям

Я создаю базовый шаблон AWS CloudFormation с одним VPC, 3 группами безопасности и 5 экземплярами EC2, моя группа безопасности выглядит примерно так:

{
  "WebApplicationServerSG": {
    "Type": "AWS::EC2::SecurityGroup",
    "Properties": {
      "VpcId": {
        "Ref": "DevVpc"
      },
      "GroupDescription": "Enable HTTP, HTTPS and SSH access",
      "Tags": [
        {
          "Key": "Name",
          "Value": "WebApplicationServer Service Group"
        }
      ],
      "SecurityGroupIngress": [
        {
          "IpProtocol": "tcp",
          "FromPort": "443",
          "ToPort": "443",
          "CidrIp": "0.0.0.0/0"
        },
        {
          "IpProtocol": "tcp",
          "FromPort": "80",
          "ToPort": "80",
          "CidrIp": "0.0.0.0/0"
        },
        {
          "IpProtocol": "tcp",
          "FromPort": "22",
          "ToPort": "22",
          "CidrIp": "0.0.0.0/0"
        }
      ],
      "SecurityGroupEgress": [
        {
          "IpProtocol": "tcp",
          "FromPort": "443",
          "ToPort": "443",
          "CidrIp": "0.0.0.0/0"
        },
        {
          "IpProtocol": "tcp",
          "FromPort": "80",
          "ToPort": "80",
          "CidrIp": "0.0.0.0/0"
        },
        {
          "IpProtocol": "tcp",
          "FromPort": "22",
          "ToPort": "22",
          "CidrIp": "0.0.0.0/0"
        }
      ]
    },
    "Metadata": {
      "AWS::CloudFormation::Designer": {
        "id": "a7977f00-48d6-488f-9e23-9bcd0785d399"
      }
    }
  }
}

И VPC выглядит примерно так:

{
  "DevVpc": {
    "Type": "AWS::EC2::VPC",
    "Properties": {
      "CidrBlock": "172.31.0.0/16",
      "EnableDnsSupport": "false",
      "EnableDnsHostnames": "false",
      "InstanceTenancy": "dedicated",
      "Tags": [
        {
          "Key": "Name",
          "Value": "DevStackVpc"
        }
      ]
    }
  }
}

Я получаю сообщение об ошибке при создании стека с помощью шаблона -

Группа безопасности sg-31f91b5a и подсеть subnet-ea0aa3a7 принадлежат разным сетям.

11:13:01 UTC+0550   CREATE_FAILED   AWS::EC2::Instance  WebApplicationServer    Security group sg-5147a53a and subnet subnet-ea0aa3a7 belong to different networks.

А вот суть полного шаблона, любая помощь будет очень признательна.


comment
Где определена ваша подсеть VPC?   -  person Matt Houser    schedule 14.01.2018
comment
И как вы связываете свой экземпляр EC2 с группой безопасности и подсетью?   -  person Matt Houser    schedule 14.01.2018
comment
Скорее всего проблема в определении подсети, можно точно сказать полный шаблон. И не используйте визуальные редакторы, если хотите полностью контролировать свой код :)   -  person Putnik    schedule 15.01.2018
comment
Обновили исходный вопрос шаблоном Gist for Complete.   -  person Jeet    schedule 15.01.2018
comment
comment
@Rob Спасибо, что указали, удалил бы скриншот. Имеет смысл не публиковать снимок экрана. Спасибо еще раз.   -  person Jeet    schedule 15.01.2018
comment
Я не вижу подсетей, объявленных в вашем шаблоне. Если вы укажете перекрестную ссылку на идентификатор подсети в ошибке, вы, вероятно, обнаружите, что он исходит из вашего VPC по умолчанию в регионе, а не VPC в этом стеке, и ваши экземпляры будут перемещаться туда, а не сюда.   -  person Michael - sqlbot    schedule 15.01.2018
comment
@ Michael-sqlbot Могу я попросить вас предоставить образец, если можете. Спасибо за указатель.   -  person Jeet    schedule 15.01.2018
comment
AFAIK, вам необходимо создать подсети EC2, а затем вам нужно объявить логический набор из двух или более этих подсетей для RDS группы подсетей для экземпляров RDS.   -  person Michael - sqlbot    schedule 15.01.2018


Ответы (3)


Если кто-то, использующий Terraform, попадал сюда, у меня было аналогичное сообщение об ошибке, и в итоге произошло следующее:

variable "name" {}

locals {
  vpc_id    = "..."
  subnet_id = "..."
}

resource "aws_instance" "web" {
  ami                         = "ami-09def150731bdbcc2"
  instance_type               = "t3.micro"
  vpc_security_group_ids      = ["${aws_security_group.allow_http.id}"]

  user_data = <<-EOF
    #!/bin/bash
    sudo amazon-linux-extras install nginx1.12 -y
    sudo nginx
  EOF

  tags {
    Name = "${var.name}"
  }
}

resource "aws_security_group" "allow_http" {
  description = "Allow inbound HTTP traffic for ${var.name} instance"
  vpc_id      = "${local.vpc_id}"

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "TCP"
    cidr_blocks = ["0.0.0.0/0"]
  }

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

В подсети, в которой я развертывался, не было auto assign public IPs включено. Таким образом, я обновил aws_instance, включив в него subnet_id и associate_public_ip_address:

resource "aws_instance" "web" {
  ami                         = "ami-09def150731bdbcc2"
  instance_type               = "t3.micro"
  subnet_id                   = "${local.subnet_id}"
  vpc_security_group_ids      = ["${aws_security_group.allow_http.id}"]
  associate_public_ip_address = true

  user_data = <<-EOF
    #!/bin/bash
    sudo amazon-linux-extras install nginx1.12 -y
    sudo nginx
  EOF

  tags {
    Name = "${var.name}"
  }
}

После чего все заработало.

person timothyclifford    schedule 26.03.2019

У меня указанная выше проблема решена указателями, указанными в комментариях. Связь между экземплярами subnet VPC, Security-Groups и EC2 следующая:

Первое, что получается и должно быть создано - это VPC, второе - это Subnet здесь вы упоминаете VpcId, который вы создали ранее. 3. Вы создаете security groups, здесь вы также упоминаете VpcId, который вы создали ранее. 4-й. Существует свойство NetworkInterfaces, где вы указываете SubnetId и GroupSet, которые представляют собой массив идентификаторов групп безопасности, и здесь вы определяете связь между группой безопасности, vpc и подсетью, и это то, что решило проблему.

Ниже приведен образец шаблона, который действительно работал -

{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
    "DevServerKeyPair": {
        "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instance",
        "Type": "AWS::EC2::KeyPair::KeyName",
        "ConstraintDescription": "Must be the name of an existing EC2 KeyPair."
    }
},
"Resources": {
    "DevVpc": {
        "Type": "AWS::EC2::VPC",
        "Properties": {
            "CidrBlock": "172.31.0.0/16",
            "EnableDnsSupport": "false",
            "EnableDnsHostnames": "false",
            "InstanceTenancy": "dedicated",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "DevStackVpc"
                }
            ]
        }
    },
    "DevSubnet": {
        "Type": "AWS::EC2::Subnet",
        "Properties": {
            "VpcId": {
                "Ref": "DevVpc"
            },
            "CidrBlock": "172.31.0.0/16",
            "AvailabilityZone": {
                "Fn::Select": [
                    0,
                    {
                        "Fn::GetAZs": ""
                    }
                ]
            }
        }
    },
    "WebApplicationServerSG": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            "VpcId": {
                "Ref": "DevVpc"
            },
            "GroupDescription": "Enable HTTP, HTTPS and SSH access",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "WebApplicationServer Service Group"
                }
            ],
            "SecurityGroupIngress": [
                {
                    "IpProtocol": "tcp",
                    "FromPort": "443",
                    "ToPort": "443",
                    "CidrIp": "0.0.0.0/0"
                },
                {
                    "IpProtocol": "tcp",
                    "FromPort": "80",
                    "ToPort": "80",
                    "CidrIp": "0.0.0.0/0"
                },
                {
                    "IpProtocol": "tcp",
                    "FromPort": "22",
                    "ToPort": "22",
                    "CidrIp": "0.0.0.0/0"
                }
            ],
            "SecurityGroupEgress": [
                {
                    "IpProtocol": "tcp",
                    "FromPort": "443",
                    "ToPort": "443",
                    "CidrIp": "0.0.0.0/0"
                },
                {
                    "IpProtocol": "tcp",
                    "FromPort": "80",
                    "ToPort": "80",
                    "CidrIp": "0.0.0.0/0"
                },
                {
                    "IpProtocol": "tcp",
                    "FromPort": "22",
                    "ToPort": "22",
                    "CidrIp": "0.0.0.0/0"
                }
            ]
        }
    },
    "WebApplicationServer": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "ImageId": "ami-f3e5aa9c",
            "InstanceType": "t2.micro",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "WebApplicationServer"
                }
            ],
            "KeyName": {
                "Ref": "DevServerKeyPair"
            },
            "NetworkInterfaces": [
                {
                    "SubnetId": {"Ref": "DevSubnet"},
                    "AssociatePublicIpAddress": "true",
                    "DeviceIndex": "0",
                    "GroupSet": [{ "Ref" : "WebApplicationServerSG" }]
                }
            ]
        }
    }
  }
}

Надеюсь, это поможет кому-то решить подобную проблему.

person Jeet    schedule 18.01.2018
comment
//, Ваше ясное объяснение отношений помогло мне, Джит. Спасибо, что ответили на это. - person Nathan Basanese; 03.06.2021

Проблема с группой безопасности, которую вы пытаетесь использовать! Когда вы создаете один с шаблоном, он использует VPC по умолчанию. В шаблоне CLoudFormation, в котором вы создаете группу безопасности, вам необходимо указать VpcId, который вы хотите использовать (НЕ по умолчанию), это решит проблему. Или вы можете вручную создать новую группу безопасности, используя (НЕ по умолчанию) VPC, а затем запустить новые экземпляры.

person Tkachenko Vlad    schedule 22.10.2020