NatGateway経由でyum update できないときの確認事項
AWSでNatGatewayをパブリックサブネットに構築して、プライベートサブネットでアプリWEBサーバーとしているAmazonLinux2のEC2のyum updateを出来ないときの確認事項です。コスト削減のために、EC2インスタンスでNATインスタンスを作った場合も使える確認事項だと思います。
NatGatewayを、EC2インスタンスやRDSインスタンスやロードバランサーと同じように、NATインスタンスという1つのインスタンスであると自覚して設計していくようにしてください。
前提条件
- ネットワークACLはデフォルト状態
- パブリックサブネットとプライベートサブネットの2パターンのルートテーブルが既にあり、ELB/EC2/RDSなどのインスタンスリソースに問題なく2種のサブネットが適用されている状態
NatGatewayのセキュリティグループはAWSが勝手にやってくれているため、専用に命名したセキュリティグループを事前に作る必要はありません。
3種のサブネットの意味と使い方を確実に把握する
以下、セキュリティグループで各種プロトコルは開放してあることを前提として認識してください。
- パブリックサブネット・・・inbound(外から中)/outbound(中から外)のインターネットアクセスが可能なサブネット。ルートテーブルは、igw(インターネットゲートウェイ)(とlocal)。EIPをパブリックIPとして使える。VPCやVPNの中でプライベートIPも使える。
- プライベートサブネット・・・inbound(外から中)/outbound(中から外)のどちらもインターネットアクセスが不可能なサブネット。ルートテーブルは、localのみ。EIPをインスタンスにアタッチしてもpingで使えない。VPCやVPNの中でプライベートIPは使える。
- プロテクトサブネット・・・outbound(中から外)のインターネットアクセスだけが可能なサブネット。ルートテーブルは、nat(ナットゲートウェイ)(とlocal)。外部ネットワークからのICMPプロトコルによるpingなど、外から中のインバウンド通信に対してEIPをインスタンスにアタッチしてもパブリックIPとして使えない。VPCやVPNの中でプライベートIPは使える。
AWSのNatGatewayドキュメント
NAT ゲートウェイ – Amazon Virtual Private CloudがAWSのドキュメントです。ドキュメント内のCDPをよく見て設定しながら以下の点も確認したら、うまくできると思います。
確認事項
- NatGatewayのサブネットのルートテーブルはlocalとインターネットゲートウェイ(0.0.0.0/0)のigwが関連付けしてあるか?(「サイト間のVPN接続」のゲートウェイであるvgwも同時並行で存在して大丈夫です)
つまり、パブリックサブネットの中にNatGatewayを配置してあること。 - yum updateを行いたいEC2インスタンスのプライベートサブネットのルートテーブルにlocalとNatGateway(0.0.0.0/0)のnatが関連付けしてあるか?
(「サイト間のVPN接続」のゲートウェイであるvgwも同時並行で存在して大丈夫です) - yum updateを行いたいプライベートサブネットEC2インスタンスのセキュリティグループのアウトバウンド(中から外の方向への通信)のSSHは、NatGatewayのサブネットのCIDRもしくはVPC CIDRを指定して開いてあるか?(0.0.0.0/0よりもこれらのCIDRを指定してネットワークを限定する)
yum updateを行いたいプライベートサブネットEC2インスタンス⇒NatGateway⇒インターネットゲートウェイ、という経路で外に出ていく、と考えるといいと思います。
yum updateを行いたいプライベートサブネットのEC2インスタンスで単純にVPCの外との通信が出来るか調べたい場合は、yum updateを行いたいプライベートサブネットのEC2インスタンスのセキュリティグループでアウトバウンドのping向けICMPを0.0.0.0/0で開きます。 - yum updateを行いたいプライベートサブネットEC2インスタンスでyum updateのプロセスが残っていないか?NatGateway導入して設定不備でyum update出来なかった際のyum updateプロセスが残っていたら、そのプロセスはkillしてyum updateをやり直してください。
- プライベートサブネット内のEC2インスタンスから外への ping amazon.com は、プライベートサブネット内のEC2インスタンスのセキュリティグループでICMPのインバウンドだけ開けていても出来ない。アウトバウンドも開ける必要がある。
他に、WebServerのEC2インスタンスのセキュリティグループからS3のVPCエンドポイント(プレフィックス)向けのアウトバウンドはHTTPSだけでなくHTTPも必要。また、EC2インスタンスのIAMロールにS3へのアクセスを許可するIAMポリシーのアタッチも必要。
ちなみに、NatGatewayをきちんと構築できていれば、プライベートサブネット内のEC2インスタンスからSendGridのAPI https://api.sendgrid.com をセキュリティグループでhttps 443を開けていれば使えます。