AWSソリューションアーキテクト・アソシエイト EC2・VPC編
EC2とVPCはAWSのサービスの中でも超基本となるサービスです。言ってみればEC2はサーバーでVPCはネットワークです。
私は以下のような『My AWS System』を構築して、EC2とVPCについて勉強しました。
これくらいの簡単な構成が構築できるようになれば、EC2やVPCの概念はほぼ理解できている状態になります。
※以下の内容はネットワークの基本知識があることを前提に記載しています。プライベートIPアドレスの細かい設定方法などについては触れていません。
『My AWS System』
構成はいたってシンプルです。EC2を2台配置して、それぞれパブリックサブネット、プライベートサブネットに配置します。
以下の要件を満たすよう構築します。
- パブリックサブネットのEC2へのアクセスは自宅PCからのアクセスのみを許可する。
- プライベートサブネットへのアクセスは、パブリックサブネットのみを許可する。
- プライベートサブネットから外部インターネットへのアクセスは、パブリックサブネットのEC2(proxy)を必ず経由する。
- S3へのアクセスは外部のインターネットを経由させない
ネットワーク設定
いきなりEC2は起動できません。EC2を構築する前にネットワーク周りの準備をしておく必要があります。なぜなら、EC2構築の際に、
- どこのVPCに所属させるか
- どこのサブネットに所属させるか
- どこのセキュリティグループに所属させるかどうか
- EIP(Elastic IP アドレス)を付与するかどうか
を指定しなければ、EC2を起動させることは出来ません。
VPC / サブネット / セキュリティグループ
基本的なことは公式ドキュメントを参照ください。ここでは、私がどんなネットワーク構成で『My AWS System』を構築して、AWSのネットワークを理解したか解説します。
VPCとサブネットの関係は容易に理解できると思います。VPCの中にサブネットが複数存在することができます。
私の『My AWS System』では以下のルールでサブネットをセキュリティグループを設計しています。
ポイントは、"1サブネット:1セキュリティグループ" です。サブネット内のEC2に対しては、全て同じセキュリティグループを適用します。
パブリックサブネットに対してキュリティグループを1つ作成します。プライベートサブネットに対してセキュリティグループを1つ作成します。
インバウンド通信の許可設定
パブリックサブネットのセキュリティグループの設定では以下のインバウンド通信を許可します。
- 自宅IPアドレスからのSSH接続
- "プライベートサブネットのセキュリティグループ" からのHTTPS / HTTP 通信
原則、どこのセキュリティグループからの通信を許可するか、というルールを設定していきます。そうすることで、セキュリティグループの設計がそのままネットワークセキュリティの設定となりますので、管理がしやすくなります。
続いて、プライベートサブネットのセキュリティグループの設定では以下の通信を許可します。
- "パブリックサブネットのセキュリティグループ" からのSSH接続
上記の設定を行うことで、パブリックサブネット内のEC2は自宅PCからのSSH接続と、プライベートサブネットからのHTTPS/HTTP通信しか受け付けなくなります。プライベートサブネットのEC2では、パブリックサブネットのEC2からのSSH接続しか受け付けなくなります。
ルートテーブル / IGW(Internet GateWay) / VPCエンドポイント
『My AWS System』の構築のためには、VPCとサブネットのルートテーブルを編集しなければいけません。
- IGWを作成し、VPCにアタッチする。
- S3のVPCエンドポイントを作成してVPCにアタッチする。
- VPCのルートテーブルにIGWを設定する。
- パブリックサブネットのルートテーブルにIGWとS3のVPCエンドポイントを設定する。
VPCのルートテーブルは以下のようになります。
パブリックサブネットのルートテーブルは以下のようになります。
EC2のセットアップと稼働確認
EC2のセットアップ方法については、インターネットを探せばいくらでも出てきます。以下に掲載しているコマンドについては参考程度に見てください。
パブリックサブネットのEC2をセットアップ
- OSはAmazonLinux2の最新バージョンを選択
- インスタンスタイプは "t2-micro(無料枠)" を選択
- ディスクは30GBの汎用SSD
- VPC、サブネット、セキュリティグループは上記で作成したものをセット
- タグは任意に設定
- キーペアは持っていなければ、新しく作成
- 以上、すべての設定内容を確認しEC2を起動
EC2が起動したら自宅PCからEC2に対してSSH接続します。その際に認証鍵(キーペア)を使うことを忘れないようにしましょう。
私がEC2構築で行っている初期設定は以下です。
上記の初期設定後のAMIを取得しておけば、今後はEC2を立てる際、初期設定後の状態で起動させることも出来ます。
proxy(squid)の設定
proxyはOSSのsquidを使用します。proxy環境を構築することでネットワークの設定に詳しくなれます。
これにより、パブリックサブネットのEC2のセットアップは完了です。続いて、プライベートサブネットのEC2をセットアップします。
プライベートサブネットのEC2をセットアップ
手順は先ほどと同様です。異なるところは、proxyを経由しなければ外のインターネットと通信できないことです。
セットアップの手順にあるコマンドで外部との通信を使用するのは『yum』『curl』です。また、今後AWS全般の操作で使用する『AWS CLI』もproxyを通す必要があります。
以下に、『yum』『curl』『AWS CLI』のコマンド実行時にproxyを通すよう設定する方法を記載しておきます。
上記でEC2のセットアップは完了です。
稼働確認
proxy サーバーではログ(/var/log/squid/access.log)を出力するよう設定しています。プライベートサブネットのEC2から、外部ネットワークへの通信を試みて、ログにその情報が追記されて行っているか確認しましょう、
EC2とS3のネットワーク設定
S3というサービスはグローバルサービスと呼ばれています。グローバルサービスとは、VPCの中に存在するサービスではなく、インターネットによるアクセスを前提としたサービスであるということです。
ですが、S3への通信ルートは、2系統存在します。1つは外のインターネットを経由するルート、1つはVPCとS3で直接に通信するルートです。
後者の通信を可能とするのが、VPCエンドポイントです。こちらはすでに設定済みですね。改めて、パブリックサブネットのルートテーブルを参照してください。
S3のVPCエンドポイントがルートテーブルに記述されていれば問題ありません。ネットワークの設定はこれで完了です。
S3のアクセスコントロール
実は、ルートテーブルにS3エンドポイントを設定しただけでは、EC2からS3へアクセスすることは出来ません。
なぜなら、S3はデフォルト設定では誰とも通信できない状態だからです。
S3のアクセスコントロールは、二つの方法で決定されます。それは、アクセスされるS3バケットのバケットポリシー、アクセスする側のEC2インスタンスの持つロールです。
『My AWS System』は同一のAWSアカウント内でS3もVPCも構築しているので、S3のバケットポリシーまたは、EC2インスタンスの持つロールのいずれかによって、許可された場合のみ、EC2はS3バケットへアクセスが可能となります。
詳しくは『AWSソリューションアーキテクト・アソシエイト S3編』で解説します。
EC2とネットワーク
以上が、EC2とVPCの基本です。この基本さえ分かっていれば、EC2とRDS、EC2とRedshift、S3とkinesis、その他サービスを用いたネットワークの設定は理解することが出来ます。
グローバルサービスはS3だけではありません。Dynamodb、ElastiCache、Elasticsearch Serviceなどなど、たくさん存在します。これらグローバルサービスのネットワーク設定も基本はS3と同じです。
要は外のインターネット経由で接続するか、VPCエンドポイントが用意されていれば、それをVPCにアタッチして使用するかどうかです。
また、EC2のインスタンス毎にセキュリティグループを作成することで、細かなアクセスコントロールも可能になりますよね。
まずは、本記事で書いたような簡単な構成が自分で "理解して" 構築できるようになるだけでも、かなり応用が効くようになります。