
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.