2024年2月よりAWSのパブリックIPv4アドレスが有料になるということなので、パブリックIPv4アドレスを付与しないEC2インスタンスを作ろうと思います。
参考: パブリック IPv4 アドレスの利用に対する新しい料金体系
EC2インスタンスの作成
VPCの設定
新規作成の場合
IPv4(ローカルIP)とIPv6の両方を設定します。
IPv6は『Amazon提供のIPv6 CIDRブロック』を選択すれば、Amazonが付与してくれます。
既存のVPCにIPv6を追加したい場合
対象のVPCを選択し、アクション>CIDRの編集 で『新しいIPv6 CIDRを追加』ボタンを押して、新規の場合と同様に設定します。
サブネットの設定
新規作成の場合
サブネットもIPv6を設定します。
IPv6 subnet CIDR block の末尾の『/64』は環境に合わせて変えてください。
既存のサブネットにIPv6を追加したい場合
対象のサブネットを選択し、アクション>IPv6 CIDRの編集 で『IPv6 CIDRを追加』ボタンを押して、新規の場合と同様に設定します。
EC2インスタンスの設定
新規作成の場合
IPv6が設定されているサブネットを選択すると、『IPv6 IPを自動で割り当てる』という項目が出てくるので、『有効化』を選択します。(サブネットにIPv6が設定されていないと出ません)
パブリックIPの自動割り当ては『無効化』を選択します。
既存のEC2インスタンスにIPv6を追加したい場合
対象のEC2インスタンスを選択し、アクション>ネットワーキング>IPアドレスの管理 で『▶eth0: eni-〜』と書かれているところを押すと設定エリアが出るので、IPv6アドレスの『新しいIPアドレスの割り当て』ボタンを押して、空欄(自動割り当て)のまま保存します。
接続設定
さて、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でもアクセスできるようになります。
その後の設定