LoginSignup
1
1

AWS EC2をIPv6のみ(パブリックIPv4アドレスなし)で作ってssh接続する

Last updated at Posted at 2023-12-08

2024年2月よりAWSのパブリックIPv4アドレスが有料になるということなので、パブリックIPv4アドレスを付与しないEC2インスタンスを作ろうと思います。
参考: パブリック IPv4 アドレスの利用に対する新しい料金体系

EC2インスタンスの作成

VPCの設定

新規作成の場合

IPv4(ローカルIP)とIPv6の両方を設定します。
IPv6は『Amazon提供のIPv6 CIDRブロック』を選択すれば、Amazonが付与してくれます。
スクリーンショット 2023-12-08 9.50.55.png

既存のVPCにIPv6を追加したい場合

対象のVPCを選択し、アクション>CIDRの編集 で『新しいIPv6 CIDRを追加』ボタンを押して、新規の場合と同様に設定します。
スクリーンショット 2023-12-08 9.57.33.png

サブネットの設定

新規作成の場合

サブネットもIPv6を設定します。
スクリーンショット 2023-12-08 10.06.47.png
IPv6 subnet CIDR block の末尾の『/64』は環境に合わせて変えてください。

既存のサブネットにIPv6を追加したい場合

対象のサブネットを選択し、アクション>IPv6 CIDRの編集 で『IPv6 CIDRを追加』ボタンを押して、新規の場合と同様に設定します。
スクリーンショット 2023-12-08 10.27.29.png

EC2インスタンスの設定

新規作成の場合

IPv6が設定されているサブネットを選択すると、『IPv6 IPを自動で割り当てる』という項目が出てくるので、『有効化』を選択します。(サブネットにIPv6が設定されていないと出ません)
パブリックIPの自動割り当ては『無効化』を選択します。
スクリーンショット 2023-12-08 10.36.58.png

既存のEC2インスタンスにIPv6を追加したい場合

対象のEC2インスタンスを選択し、アクション>ネットワーキング>IPアドレスの管理 で『▶eth0: eni-〜』と書かれているところを押すと設定エリアが出るので、IPv6アドレスの『新しいIPアドレスの割り当て』ボタンを押して、空欄(自動割り当て)のまま保存します。
スクリーンショット 2023-12-08 10.46.01.png

接続設定

さて、EC2インスタンスはできましたが、パブリックIPv4アドレスがないので、sshでIPv4アドレスを指定して接続できませんね。(自分の環境がIPv6に対応してるなら、セキュリティグループで自分のIPv6アドレスからのssh接続を許可等すれば、EC2インスタンスのIPv6アドレスで接続できるかもしれませんが、今回はやりません。)
そこで、EC2 Instance Connect Endpointを設定して接続できるように設定します。
参考: EC2 Instance Connect Endpoint を使用した、パブリック IPv4 アドレスを必要としないインスタンスへの接続

EC2 Instance Connect Endpointの設定

セキュリティグループの設定

EC2 Instance Connect Endpoint用のセキュリティグループを作る

(test_ec2-connect-endpointとします)
インバウンドルールはなしのままにします。
アウトバウンドルールは、デフォルトで設定されている

  • すべてのトラフィック 0.0.0.0/0
  • すべてのトラフィック ::/0

は削除し、SSHを追加します。送信先には、上記で作成したEC2インスタンスが対象となるようなCIDRブロックかセキュリティグループを設定してください。

EC2インスタンス用のセキュリティグループを作る

(test_ec2-connectとします)
インバウンドルールにSSHを追加し、ソースに先程作ったセキュリティグループ test_ec2-connect-endpoint を設定します。
アウトバウンドルールはデフォルトのままにします。

作成したら、EC2インスタンスを選択し、アクション>セキュリティ>セキュリティグループを変更 でtest_ec2-connectを追加してください。

エンドポイントの作成

EC2 Instance Connect Endpoint の作成を参考にエンドポイントを作成します。
セキュリティグループには、先程作ったtest_ec2-connect-endpointを設定します。

AWS CLIで接続する

ローカルでawsコマンドが使えるようにしておいてください。(AWS CLIの設定については割愛)
AWS CLIは新しいものでないと対応していないので、最新バージョンにしておいた方が良いかもしれません。

aws ec2-instance-connect ssh --instance-id i-xxxxxxxx

でssh接続します。(i-xxxxxxxxには、対象のEC2インスタンスのインスタンスIDを入れてください.)

Macの場合は、.ssh/config に

Host *.eic
  User ec2-user
  ProxyCommand aws ec2-instance-connect open-tunnel --instance-id %h
Host test_ec2.eic
  Hostname i-xxxxxxxx
  IdentityFile ~/.ssh/EC2を作成した時に設定したキーペアの鍵ファイル

のように設定しておけば、

ssh test_ec2.eic

で接続できるようになります。

インターネットゲートウェイの設定

EC2インスタンスから外へアクセスするためには、インターネットゲートウェイを設定する必要がありますが、外向きだけできれば良いのであれば、Egress-Only インターネットゲートウェイを設定すれば良いと思います。
Egress-Only インターネットゲートウェイを作成し、ルートテーブルのルートの設定で、送信先『::/0』に対して作成したEgress-Only インターネットゲートウェイを設定します。

既存のEC2インスタンスにIPv6を追加した場合で、インターネットゲートウェイがすでに設定されていた場合(引き続きインターネットゲートウェイを使う場合)は、インターネットゲートウェイのルートを設定しているルートテーブルの『ルートを編集』で、送信先『::/0』に対しても『0.0.0.0/0』と同じインターネットゲートウェイを設定すると、IPv6でもアクセスできるようになります。

その後の設定

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1