
CloudFormation を使用して 2 つの EC2 インスタンスを作成しました。1 つは Apache Web サーバー用、もう 1 つは PostgreSQL DB 用です。何らかの理由で、DB インスタンスはポート 80 で Web サーバー インスタンスに telnet できるのに、Web サーバーはポート 5432 で DB インスタンスに telnet できません。ローカルホストから DB インスタンスを確認すると、正常に動作しており、ローカルホスト 5432 に正常に telnet しています。各インスタンスには 2 つのセキュリティ グループがあります。
"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" } ]
}
},
設定に何が問題なのでしょうか? ご協力いただければ幸いです。
UPD: 次のインバウンド/アウトバウンド ルールを追加しようとしましたが、これにより 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"
]
}
}
},
受信ルールのみ(送信ルールなし)を追加してみましたが、これも機能しません。
答え1
セキュリティ グループの出力が定義されていません。デフォルトの出力は無制限ですか? CIDR 範囲を持つ SG はあまり使用しません。コンソールの SG の入出力のスクリーンショットを含めるように質問を編集することをお勧めします。
AWS 内アクセスには、CIDR ベースではなく、セキュリティ グループ間のルールを使用することを好みます。そのため、次の操作を実行します。
- TheWebServerSecurityGroup はポート 5432 で TheDBSecurityGroup への出力を許可します。
- TheDBSecurityGroup は、ポート 5432 で TheWebServerSecurityGroup からの進入を許可します。
- WebServerSecurityGroupは、ポート443の0.0.0.0/0からの進入を許可します。必要な場合は80も許可します。
ポート22を許可するのではなく、セッションマネージャーログイン後に AWS コンソールから SSH を効果的に取得できるため、SSH よりも安全ですが、ポート 22 を開く必要はありません。記憶が正しければ、サーバーは VPC エンドポイント (送信) にポート 443 を開き、SSH を中継します。設定は少し面倒ですが、CloudFormation で一度設定すれば、さまざまな状況で再利用できます。