A instância AWS EC2 não pode ver outra instância em uma porta específica

A instância AWS EC2 não pode ver outra instância em uma porta específica

Criei duas instâncias EC2 usando CloudFormation - uma para o servidor web Apache, outra para o banco de dados PostgreSQL. Por algum motivo, o servidor web não pode fazer telnet na instância de banco de dados na porta 5432, embora a instância de banco de dados possa fazer telnet na instância do servidor web na porta 80. Quando verifico a instância de banco de dados no host local, ela está funcionando bem e telnetando para o localhost 5432 com sucesso. Existem dois grupos de segurança para cada instância:

 "TheWebServerSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
      "GroupDescription" : "Security Group for The web-server instance",
      "SecurityGroupIngress" : [
        { "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0" },
        { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" }
      ],
      "VpcId" : { "Ref": "TheVPC" },
      "Tags" :  [ { "Key": "Name", "Value":  "TheWebServerSecurityGroup" } ]
    }
  },
  "TheDBSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
      "GroupDescription" : "Security Group for The DB instance",
      "SecurityGroupIngress" : [
        { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" },
        { "IpProtocol" : "tcp", "FromPort" : "5432", "ToPort" : "5432", "CidrIp" : "0.0.0.0/0" }
      ],
      "VpcId" : { "Ref": "TheVPC" },
      "Tags" :  [ { "Key": "Name", "Value":  "TheDBSecurityGroup" } ]
    }
  },

O que pode estar errado com a configuração? Qualquer ajuda é apreciada.

UPD: Tentei adicionar as seguintes regras de entrada/saída, mas com isso fica impossível instalar pacotes via yum:

"TheOutboundRule": {
      "Type": "AWS::EC2::SecurityGroupEgress",
      "Properties":{
          "IpProtocol": "tcp",
          "FromPort": 0,
          "ToPort": 5432,
          "DestinationSecurityGroupId": {
              "Fn::GetAtt": [
                  "TheDBSecurityGroup",
                  "GroupId"
              ]
          },
          "GroupId": {
              "Fn::GetAtt": [
                  "TheWebServerSecurityGroup",
                  "GroupId"
              ]
          }
      }
  },
  "TheInboundRule": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties":{
          "IpProtocol": "tcp",
          "FromPort": 0,
          "ToPort": 5432,
          "SourceSecurityGroupId": {
              "Fn::GetAtt": [
                  "TheWebServerSecurityGroup",
                  "GroupId"
              ]
          },
          "GroupId": {
              "Fn::GetAtt": [
                  "TheDBSecurityGroup",
                  "GroupId"
              ]
          }
      }
  },

Também tentei adicionar apenas a regra de entrada (sem saída), mas também não funcionou.

Responder1

Você não definiu nenhuma saída para seus grupos de segurança. A saída padrão é ilimitada? Não uso SGs com intervalos CIDR com muita frequência. Sugiro que você edite sua pergunta para incluir uma captura de tela da entrada e saída dos SGs no console.

Prefiro usar regras de grupos entre seguranças para acesso intra-AWS em vez de baseadas em CIDR. Então o que eu faria é:

  • TheWebServerSecurityGroup permite saída para TheDBSecurityGroup na porta 5432
  • TheDBSecurityGroup permite a entrada de TheWebServerSecurityGroup na porta 5432
  • TheWebServerSecurityGroup permite entrada de 0.0.0.0/0 na porta 443 - e acho que 80 se você precisar

Em vez de permitir a porta 22, sugiro que você dê uma olhadaGerenciador de sessão. É mais seguro que o SSH, pois você obtém efetivamente o SSH do console da AWS após fazer login, mas não precisa abrir a porta 22. Da memória, o servidor abre a porta 443 para um endpoint VPC (de saída), que retransmite o SSH. É um pouco complicado de configurar, mas se você fizer isso com o CloudFormation, poderá reutilizá-lo em muitas situações.

informação relacionada