EC2 インスタンス間で EC2 Instance Connect を使って VPC ピアリングを経由してプライベート通信させる
いわさです。
EC2 インスタンスへリモート接続したい場合は、様々な方法で接続することが可能です。
この中の EC2 Instance Connect という機能を使うと、AWS の API 経由で SSH 接続ができます。
一般的にはインターネット経由でパブリック接続するか、あるいは EC2 Instance Connect Endpoint を経由したプライベート接続が出来ることが知られています。
今回 VPC ピアリングで接続されている VPC の EC2 インスタンス間で EC2 Instance Connect を使って SSH 接続する機会があったのですが、EC2 Instance Connect Endpoint を使わずに VPC ピアリング経由でプライベート通信をさせることになりました。
ec2-instance-connect sshには様々な接続オプションが用意されており、こういった接続にも対応することができます。
接続してみる
事前に2つの VPC を作成し、VPC ピアリング[1]を構成しておきます。
そして各 VPC のパブリックサブネットへ EC2 インスタンス(EC2-A、EC2-B)を作成し、EC2-A にリモート接続してさらにその EC2-A から EC2-B へリモート接続をします。それぞれの VPC はパブリックサブネットのみを持っています。
まずは EC2-A にリモート接続してみましょう。
マネジメントコンソールから接続を行います。

いくつか接続の種類がありますが、今回は EC2 Instance Connect を使いましょう。
接続に「パブリック IP を使用して接続」を選択します。
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Mon Nov 24 03:17:24 2025 from 3.112.23.5
ec2-user@ip-10-0-2-204 ~]$
接続することが出来ました。
インターネット経由での接続
さらに、EC2-A からコマンドで EC2 Instance Connect を使って EC2-B に接続してみます。
コマンドでは AWS CLI のec2-instance-connect sshを使うことが出来ます。
[ec2-user@ip-10-0-2-204 ~]$ aws ec2-instance-connect ssh --instance-id i-0075f2465aef268a1
The authenticity of host '18.182.63.67 (18.182.63.67)' can't be established.
ED25519 key fingerprint is SHA256:czGQ9+DrkFVZG4sLVJoWQhoLOc7c9JAmbE67uYRp0rQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '18.182.63.67' (ED25519) to the list of known hosts.
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-10-1-4-169 ~]$
デフォルトの最低限のオプションの場合、指定したインスタンスのパブリック IP アドレス経由で接続されます。
18.182.63.67に対して接続しようとしているのがメッセージからわかります。
VPC フローログからも、パブリック IP アドレスに向かっていることが確認できます。

つまり、この時点では次のように VPC ピアリングを経由せずにインターネット経路での接続になっています。

VPC ピアリング経由での接続
この EC2 Instacne Connect ですが、connection-typeオプションで接続モードを切り替えることが出来ます。
directでは IP アドレスを使って直接接続を行おうとします。そしてそのデフォルトですがまずはターゲットのパブリック IPv4 アドレスを使用します。
一方でeiceを指定すると EC2 Instance Connect Endpoint を使用します。この場合は常にプライベート IPv4 アドレスを使用します。
今回はプライベート IPv4 アドレスを使いたかったのですが、EC2 Instance Connect Endpoint は使いたくありませんでした。
このコマンド、必須パラメータとしてinstance-idを指定する必要があるのですが、実はオプションでinstance-ipを指定することが出来ます。
ここで EC2-B のプライベート IP アドレスを指定することでconnection-typeにdirectを指定した場合でもプライベート IP アドレスで上書きして次のように接続できそうな気がしてきました。

では試してみましょう。
[ec2-user@ip-10-0-2-204 ~]$ aws ec2-instance-connect ssh --instance-id i-0075f2465aef268a1 --instance-ip 10.1.4.169 --connection-type direct
The authenticity of host '10.1.4.169 (10.1.4.169)' can't be established.
ED25519 key fingerprint is SHA256:czGQ9+DrkFVZG4sLVJoWQhoLOc7c9JAmbE67uYRp0rQ.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: 18.182.63.67
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.1.4.169' (ED25519) to the list of known hosts.
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Mon Nov 24 03:31:36 2025 from 13.115.249.18
[ec2-user@ip-10-1-4-169 ~]$
お、先程と異なり接続先がプライベート IP アドレス(10.1.4.169)に変わりましたね。
うまく行っていそうです。
VPC フローログも確認してみましょう。

良いですね。
ルートテーブルの設定にもよりますが、普通であればこれで VPC ピアリングを経由してプライベート通信出来ていそうです。
さいごに
本日は EC2 インスタンス間で EC2 Instance Connect を使って VPC ピアリングを経由してプライベート通信させてみました。
ec2-instance-connect sshコマンドのinstance-ipとconnection-typeオプションを組み合わせることで接続経路をうまくコントロールできることが確認できました。
EC2 Instance Connect Endpoint を使わないパブリック接続と使わないプライベート接続はデフォルトの動作なので、使わないプライベート接続もできることを覚えておきましょう。
それにしてもec2-instance-connect sshは事前にキーなど用意しておかなくても良いので、とても便利ですね。もうちょっと使っていこうかな。






