最近AWSの認定資格のAWS 認定ソリューションアーキテクト – アソシエイトを取得しようかなと思っています。そのこともあって勉強かねて普段あまり個人的に触らないところを触ってみたいと思いました。まずはVPCから。こういう機会は基礎固めにとても良いですね。
VPCエンドポイント
VPCと他のAWSサービスをプライベート接続するための機能です。2015年に追加された機能です。たとえばS3はインターネットアクセスが必要なため本来インターネットする必要がないサブネットであってもインターネットゲートウェイをルートテーブルにアタッチする必要などがありました。VPCエンドポイントを利用するとVPCはプライベートのまま他のAWSサービスを利用できるようになります。
他のAWSサービスといっても今のところS3が主のようでVPCウィザードで作成する際にS3のエンドポイントという表現がされています。実質S3用の機能なのかもしれません。
VPCエンドポイントを作成するとルートテーブルにcom.amazonaws.ap-northeast-1.s3が設定されます。この状態になっているとインターネットアクセスができないプライベートサブネットでもS3へのアクセスができます。
$ wget https://www.onecoindog.com --2016-04-05 22:32:38-- https://www.onecoindog.com/ www.onecoindog.com (www.onecoindog.com) をDNSに問いあわせています... 52.69.64.136, 52.69.22.220 www.onecoindog.com (www.onecoindog.com)|52.69.64.136|:443 に接続しています... ^C
上記の場合自分の環境ではNATインスタンスのセキュリティグループでHTTPSを有効にしていないのでHTTPSはアクセスできないようになっています。
$ wget https://s3-ap-northeast-1.amazonaws.com/takayukii-blog-wp-uploads/acf-images-search-and-insert.zip --2016-04-05 22:32:45-- https://s3-ap-northeast-1.amazonaws.com/takayukii-blog-wp-uploads/acf-images-search-and-insert.zip s3-ap-northeast-1.amazonaws.com (s3-ap-northeast-1.amazonaws.com) をDNSに問いあわせています... 54.231.229.18 s3-ap-northeast-1.amazonaws.com (s3-ap-northeast-1.amazonaws.com)|54.231.229.18|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 2358844 (2.2M) [application/zip] `acf-images-search-and-insert.zip.1' に保存中 acf-images-search-and-insert. 100%[=================================================>] 2.25M --.-KB/s in 0.06s 2016-04-05 22:32:45 (40.6 MB/s) - `acf-images-search-and-insert.zip.1' へ保存完了 [2358844/2358844]
しかしS3へのアクセスであればVPCエンドポイントを作成しているのでNATの有無等に関わらずアクセスが可能になります。接続方法は特に変わらず透過的にVPCエンドポイントがよしなにやってくれるようです。
プライベートサブネットからのインターネットアクセス
今まで特にバックエンドで大掛かりに処理をする要件もなくプライベートサブネットを作ってこなかった事もありNATゲートウェイやNATインスタンスなどはあまり馴染みがありません。プライベートサブネットからインターネットへアクセスする方法ですが、これには2つ方法があります。いずれもVPCウィザードからオプションで自動で生成することができます。NATゲートウェイもNATインスタンスもElastic IPが必要になるので事前に割り当てておく必要があります。
NATインスタンスを利用する
ルートテーブルにNATインスタンスのENIとインスタンスIDが設定されてます。別途NATインスタンスに対してNAT用のセキュリティグループを設定する必要があります。
NATゲートウェイを利用する
ルートテーブルにNATゲートウェイが設定されてます。なお、NATゲートウェイではセキュリティグループはないので各EC2インスタンス側のセキュリティグループでアウトバウンドの設定などをしっかりしておく必要がありますね。
フローログ
VPCのIPトラフィックの監視ができる機能です。VPCとサブネットに作成する事ができます。
手順はほとんど必要なくて事前にCloudWatchのロググループを作っておくのとウィザードの途中でロールを作成するくらいです。ロールは勝手に作ってくれますが必要な権限は下記のような感じでした。
CloudWatchのログは少しタイムラグがあるようですが少し待っていたら意図したログが確認できました。ACCEPTの場合はセキュリティグループまたはネットワークACLで許可されていてREJECTの場合はそうでない状態です。下記のログレコードだと最初セキュリティグループでポート80を許可してなかったんですが、許可するようにしたらACCEPTに変わってるのが分かると思います。
たとえばフローログでパケットを監視してアクセス状況によってセキュリティグループだけでなくネットワークACLでブロックする等の使い方もありそうですね。
【新機能】VPC Flow LogsでVPC内のIPトラフィックを監視することができるようになりました!
ネットワークACL
ネットワークACLはVPCレベルのアクセス制御を行うものです。VPC単位で設定します。ネットワークACLの特徴としてはブラックリスト型で制御できるという事があるようです。
AWSでブラックリスト型のFirewallを実装する。〜BlackList Firewallパターン〜
たしかにセキュリティグループはホワイトリストのみなので、特定IPからの攻撃に対応するという場合はネットワークACLを使うのが良さそうです。
試しに自分のグローバルIPアドレスからのポート80へのアクセスを遮断してみました。ルール#は優先順位に関係するようでこの場合遮断のルールは全てのトラフィック許可よりも先に読まれないと有効になりません。
ブラウザでアクセスしてみるとタイムアウトになるのが確認でき、さきほどのフローログで確認するとREJECTに変わってるのが確認できました。
なお、アウトバウンドのアクセス制御の注意点としてネットワークACLではエフェメラルポートを開放する必要があります。エフェメラルポートとは、通信の帰りでクライアントが受けるランダムなポート(1024-65535)です。
VPN接続
設定手順等についてはスライドシェアにもあがっています。
オンプレミス側ではインターネットで通信可能なVPNのエンドポイントが必要になります。オンプレミス側でBGPという動的なルーティングに対応している機器の場合はAS番号が必要になります(こちらのほうが障害時の経路変更ができるため優れています)。
こちらの設定を見てると分かりやすいです。自宅のルータを変えてVMware上のVyOSをVPNルータとして使っています。自分でもやってみようかな。1時間$0.05なので月4000円くらいですかね。
AWS VPC VPN ConnectionsがNAT Traversal対応したので試してみた
カスタマーゲートウェイ側の設定ファイルはAWSマネジメントコンソールからダウンロードできます。
VPC側ではサブネットのルートテーブルにオンプレミス側のアクセスしたいネットワークアドレスと作成した作成したVPNゲートウェイのIDを設定します。VPC間のピアリング接続と容量的には同じですね。
その他
こちらの記事がかなり参考になります。
【初心者向け】AWS IPアドレス設計で押さえておきたいポイント
サブネットで利用できるIPアドレスの個数は、AWSで4つ予約されたアドレスがあるため、-4つ減らした個数が利用可能なので注意すること。
インスタンスへの固定IPアドレスの利用は避けること。