
He creado dos instancias EC2 usando CloudFormation: una para el servidor web Apache y otra para la base de datos PostgreSQL. Por alguna razón, el servidor web no puede hacer telnet a la instancia de base de datos en el puerto 5432, aunque la instancia de base de datos puede hacer telnet a la instancia del servidor web en el puerto 80. Cuando verifico la instancia de base de datos desde localhost, funciona bien y hace telnet al localhost 5432 con éxito. Hay dos grupos de seguridad para cada instancia:
"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" } ]
}
},
¿Qué podría estar mal con la configuración? Se agradece cualquier ayuda.
UPD: Intenté agregar las siguientes reglas de entrada/salida, pero con eso resulta imposible instalar paquetes a través de 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"
]
}
}
},
También intenté agregar solo la regla de entrada (sin una de salida), pero tampoco funciona.
Respuesta1
No ha definido ninguna salida para sus grupos de seguridad. ¿La salida predeterminada es ilimitada? No uso muy a menudo SG con rangos CIDR. Le sugerimos que edite su pregunta para incluir una captura de pantalla de la entrada y salida de los SG en la consola.
Prefiero usar reglas de grupos entre seguridad para el acceso dentro de AWS en lugar de las basadas en CIDR. Entonces lo que haría es:
- TheWebServerSecurityGroup permite la salida a TheDBSecurityGroup en el puerto 5432
- TheDBSecurityGroup permite el ingreso desde TheWebServerSecurityGroup en el puerto 5432
- TheWebServerSecurityGroup permite la entrada desde 0.0.0.0/0 en el puerto 443, y supongo que 80 si lo necesita
En lugar de permitir el puerto 22, le sugiero que mireAdministrador de sesión. Es más seguro que SSH, ya que efectivamente obtiene SSH desde la consola de AWS después de iniciar sesión, pero no es necesario abrir el puerto 22. Desde la memoria, el servidor abre el puerto 443 a un punto final de VPC (saliente), que transmite SSH. Es un poco complicado de configurar, pero si lo hace con CloudFormation una vez, puede reutilizarlo en muchas situaciones.