web-dev-qa-db-ja.com

VPC外からRDSインスタンスに接続できません(ERROR 2003(HY000)Ca n't connect to MySQL Server)

VPCを作成し、その中にRDSインスタンスを作成しました。 RDSインスタンスは 公的にアクセス可能 であり、その設定は次のとおりです。

RDS設定

RDSインスタンスにアタッチされたセキュリティグループは、すべてのトラフィックを受け入れます。

Security group settings

すべてのネットワークACLがすべてのトラフィックを受け入れます。ただし、VPCの外部のマシンからインスタンスにアクセスできません。次のエラーが発生します。

    root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)

VPC内のEC2から同じコマンドを実行すると、接続できます。私はいくつかのマシンから接続しようとしましたが、すべてファイアウォールなし(つまり、ポート3306が開いている)でした。

私は明らかに何かが欠けていますが、すべてが正しく構成されているようです。問題は何でしょうか?

12
dazedviper

VPCのRDSインスタンスが「パブリック」(インターネット)でアクセスできるようにするには、それに接続されているすべてのサブネットが、「プライベート」ではなく「パブリック」であるVPCのサブネットである必要があります。

パブリックサブネットは、基本的に、インターネットゲートウェイオブジェクト(igw-xxxxxxxx)を「インターネット」へのルートとして、または少なくともアクセスする必要があるインターネット宛先へのルートとして持つサブネットとして定義されます。通常、これは0.0.0.0/0の宛先アドレスです。パブリックサブネットは、関連するパブリックIPアドレスを持つインスタンス(RDSを含む)に使用する必要があります。プライベートIPアドレスは変換なしでインターネット全体で機能しないため、パブリックIPアドレスを持たないインスタンスには使用しないでください。

対照的に、プライベートサブネットでは、別のEC2インスタンス(通常はNATインスタンス)を介してインターネットの宛先に到達するようにルーティングテーブルが構成されています。これは、そのサブネットに関連付けられたVPCルートテーブルにi-xxxxxxxxとして表示されます「igw」ではなく、そのマシン(それ自体は、実際にはルートの宛先として機能するものとは異なるサブネット上にあります)はトランスレーターとして機能し、プライベートIPのみのインスタンスが透過的に発信できるようにしますNATマシンのパブリックIPを使用して、インターネットのニーズに対応します。パブリックIPアドレスを持つインスタンスは、プライベートサブネットに接続されている場合、インターネットと適切に対話できません。

特定のケースでは、ここでは、RDSインスタンスに関連付けられたサブネットは、実際にはプライベートまたはパブリックサブネットのいずれかに分類できるものとして構成されていません。これは、サブネットにデフォルトルートがまったくなかったためです。 「igw」オブジェクトを介してデフォルトルートを追加するか、OPと同様に、接続が必要なインターネットIPアドレスに静的ルートをサブネットのVPCルートテーブルに追加すると、接続の問題が修正されます。

ただし...同様の問題が発生した場合、変更が合理的に発生する可能性があるため、サブネットで正しく機能しているものが他にない限り、ルートテーブルを変更したり、新しいルートテーブルを作成してサブネットを関連付けたりすることはできません。既存の接続が切断されることが予想されます。その場合の正しい方法は、適切なルートテーブルエントリを配置して、異なるサブネット上のインスタンスをプロビジョニングすることです。

VPCをセットアップするときは、サブネットの役割を明確に定義し、VPCが最初に稼働するときに必要なルートを完全にプロビジョニングすることが理想的です。また、VPC「LAN」全体がソフトウェア定義ネットワークであることを覚えておくことも重要です。物理ネットワークとは異なり、ルーターがボトルネックになる可能性があり、トラフィックが多いマシンを同じサブネット上に配置するのが賢明です。サブネットを通過するトラフィックは、VPCのパフォーマンス上の欠点はありません。マシンは、マシンのIPアドレス指定のニーズに適したサブネット(パブリックアドレス、パブリックサブネット)に配置する必要があります。パブリックアドレスなし、プライベートサブネット。

VPCでのプライベート/パブリックサブネットのロジスティクスの詳細については、 VPCでプライベートサブネットが必要な理由 (スタックオーバーフロー)を参照してください。

21

これにはすでに素晴らしい答えがありますが、「公的にアクセス可能な」オプションを選択すると、AWSがパブリックサブネットを作成します。むしろ、私にとって問題はデフォルトのVPCセキュリティグループでした。私はネットワークACLルール-セキュリティグループではなくルールを見ていました。 (RDSで「公開アクセス可能」オプションを選択すると、セキュリティグループが追加されますが、受信ルールは自動的には追加されません。)

RDSをクリックし、セキュリティグループを特定してクリックします。次に、「インバウンドルール」でポート3306を追加し、接続するIPV4アドレス、x.x.x.x/32(または0.0.0.0/32-インターネット全体を接続する場合-ただし、注意してください)を追加します。

2
Charlie Dalsass

また、接続しているネットワークがポート3306で別のサーバーへの接続をブロックしていないことを確認してください。これは、私が企業ネットワークに接続している場合に当てはまりました。

0
gary69