AWSでサーバーとネットワーク構築を勉強してみた


サーバーサイドエンジニア2年生の私が、書籍「Amazon Web Services 基礎からのネットワーク&サーバー構築」でインフラの基礎を学び、アウトプットとしてまとめました。
この記事を読んだ後に実際にAWSに触ってみた時、何をやっているのかざっくりわかる」ような記事を意識しました。
いろいろな方がお勧めしているとおり、ハンズオン形式でAWSだけでなくインフラの基礎も学べます。
インフラ&AWS初心者の方はぜひ!

はじめにざっくり理解

ネットワーク構築とは、コンピュータ同士を安全に接続するためにいろいろな設定をする作業
【やること】

  • VPC領域を作る
  • ルーティング情報を設定する
  • デフォルトゲートウェイを設定する

サーバー構築とは、サーバーを用意して、安全かつ安定したサーバーになるようにいろいろな設定をする作業
【やること】

  • EC2インスタンスを作る
  • サーバーにセキュリティを設定する

セキュリティ強化のために行われる当たり前のサーバー構築手法

  • 踏み台サーバーを作る
  • NAT(Network Address Translation)サーバーを作る

前提知識

今回利用するサービスは、VPCとEC2です。2つだけ。
VPCはネットワーク構築、EC2はサーバー構築に関するサービスです。
はじめに、AWSの専門用語2つと、IPアドレス、サーバーについて整理します。

リージョン(Region)

これはAWSの専門用語。
世界で10か所のデータセンター群があり、その一つ一つのデータセンター群の事をリージョンという。
たとえば、「オレゴンリージョン」「東京リージョン」がある。
実際に運用する時は、エンドユーザに近いリージョンを選ぶとよい(レスポンスがよくなる)。
2020年5月現在、日本のリージョンは「東京リージョン」のみ。
AWS公式によると、「大阪リージョン」が近日開始するとのこと。1

アベイラビリティゾーン(Availability Zone:AZ)

これもAWSの専門用語。
リージョンがさらに分割された区域のこと。耐障害性のために、リージョンの中に分散している。
たとえば、「ap-northeast-1(アジアパシフィックの東京)」「ap-northeast-2(アジアパシフィックのソウル)」「us-east-1(米国東部のバージニア北部)」などがある。
実際に運用する時は、耐障害性を高めるために、複数のアベイラビリティゾーンに同じサーバーを置いて負荷分散するとよい(AWS公式が推奨している)。

IPアドレス

ネットワークに繋がれているコンピュータやネットワーク機器に割り振られる、一意の番号のこと。インターネット上の住所ともいえるよ。
IPアドレスは大きく2種類。

パブリックIPアドレス(グローバルIPアドレス)

  • インターネットに接続するときにつかうIPアドレスのこと
  • ICANN(Internet Corporation for Assigned Names and Numbers)という団体が管理している
  • AWSでは「パブリックIPアドレス」という名称がつかわれているよ

プライベートIPアドレス

  • インターネットで使われないIPアドレスのこと
  • だれも管理してないから、自由に使っていい
  • 例えば、社内LANを構築する時に使ったり、個人の学習用として使える
  • だいたいは、10, 172, 192 のどれかからはじまる

サーバー

LinuxとかWindows ServerとかのサーバーOSがインストールされたコンピューターのこと。
サーバーOSとは、サーバー用に作られたOSのこと。
たくさんのユーザ(=クライアント)からの接続要求に答えたり、常時安定した稼働を実現するなど、クライアントに対してサービスを提供することに特化している。
サーバーに専用のソフトウェアをインストールすることで、「Webサーバー」とか「DBサーバー」が出来上がる。
もう少し具体的な例を図にしてみた。

ちなみに、Webサーバー用のソフトとDBサーバー用のソフトをインストールすることで、「Webサーバー兼DBサーバー」も作れるよ。

ネットワーク構築って何をするの

ネットワーク構築とは、ざっくりいうと、コンピュータ同士を安全に接続するための設定をいろいろすること

VPC領域を作る

実世界でいうと、ルータやハブなどを用意して環境を整える作業にあたる。

VPC(Amazon Virtual Private Cloud)

ひとことで言うと、AWS上のネットワークの範囲のこと。
パブリックサブネット(インターネットに接続することを目的としたサブネット)と、プライベートサブネット(インターネットから隔離したサブネット)の2種類を作ることが多い。
こうすることで、セキュリティを高めることができる。
たとえば、DBサーバーをプライベートサブネットに配置することで、外部から攻撃を受けにくくなる。
(プライベートサブネットはインターネットから隔離してあるから)

VPC領域を作った直後は、デフォルトのルートテーブルが作られる。
サブネットを作った時も、そのサブネットのデフォルトルートテーブルが作られる。

少し踏み込んだ内容になりますが…
はじめてサブネットを作成するとき、[Availability Zone]は「No Presence」でよい。
 →ランダムなアベイラビリティゾーンが自動で割り当てられるから
2つめ以降を作るときは、1つめに作ったアベイラビリティゾーン以外のアベイラビリティゾーンを選択するとよい。
 →片方のアベイラビリティゾーンに障害があったときに、影響が出にくくなるから

ルーティング情報を設定する

ネットワークにデータを流すために、ルーティング情報を設定する。
この設定を、「ルートテーブル」や「ルーティングテーブル」という。
具体的には、宛先IPアドレスの値がいくつのときに、どのネットワークに流すべきかを設定する。

上の設定値の意味は、

送信先が「10.0.0.0/16」に含まれるIPアドレスのパケットであれば、VPC領域のルーターに接続されている相手への通信と判断するよ。
だから、VPC領域のルータ(今回はlocal)にパケットを転送するよ。

デフォルトゲートウェイを設定する

デフォルトゲートウェイとは、転送先が設定されてないときのデフォルトの転送先のこと。
「0.0.0.0/0」は、すべてのIPアドレス範囲を表す。
つまり、「0.0.0.0/0」に対するターゲットの設定は、デフォルトゲートウェイとして機能する。
このデフォルトゲートウェイを、インターネットゲートウェイに設定すれば、インターネットに接続できる。

先ほどの2工程、「ルーティング情報を設定」と「(インターネットゲートウェイとしての)デフォルトゲートウェイを設定」をすることで、インターネットに接続できる状態になる。

サーバー構築って何をするの

サーバー構築とは、ざっくりいうと、サーバーを用意して、安全かつ安定したサーバーになるように設定をいろいろすること
ただ作ればいいってもんじゃないの。

EC2インスタンスを作る(立てる)

つまりサーバーを立てるってこと。

EC2(Amazon Elastic Compute Cloud)

平たく言うと、サーバーのこと。
もう少し詳しくいうと、AWSの仮想サーバーのこと。
だからインスタンスのことは仮想サーバーと読み替えても問題ない。
AWSで作ったサーバーのことをインスタンスという。
「AWSで作ったサーバー」とざっくり言った理由は、EC2の他にもRDS(DB構築&管理できるサービス)やEB(Elastic Beanstalk:アプリのデプロイや管理を自動でしてくれるサービス)などからもインスタンスが作成できるから。
インスタンスを作るときは、
 ・CPUのスペック
 ・ディスクの容量
 などが決められる。
高性能なインスタンスを作る場合は課金が必要。

サーバーにセキュリティを設定する

AWSでは、「セキュリティグループ」で設定する
「Inbound」「Outbound」の2種類設定できる

  • Inbound・・・外から、このインスタンス(仮想サーバ)に接続するときの設定
    →誰かが接続しようとしているのを排除するために設定する

  • Outbound・・・このインスタンス(仮想サーバ)から、外側に出ていくときの設定
    →サーバーから、他のコンピュータに接続しようとするのを防ぐために設定する

踏み台サーバーを作る

踏み台サーバーとは、インターネット接続されていないサーバーにアクセスするための方法のひとつ。
これは、セキュリティ強化のための、クラウド・オンプレ環境の両方にある概念というか手法。
よくある構造は以下。

言葉にすると、

ローカル環境やインターネットから、Webサーバーにアクセスする
そして、WebサーバーからDBサーバーにアクセスして処理が行われる

このときのWebサーバーは、DBサーバーの「踏み台サーバー」になる。
どうしてわざわざ踏み台サーバーを作るか、というと、セキュリティを強化できるから。
→たとえば、踏み台サーバー以外のところからのアクセスは全て不正アクセスとする、とかできる。

でも、必要なアプリをインストールとかアップデートするときも、わざわざ踏み台サーバー経由するの手間かかるな、、、
そこでつかえる方法が、NATサーバー!
NATサーバーを利用すれば、プライベートサブネット内のサーバーからインターネットに接続できる。

NAT(Network Address Translation)サーバーを作る

NATサーバーの役割は、IPアドレスを変換すること。
IPアドレスを変換することで、「プライベートサブネット→インターネット」の向きのみ許可する通信を実現できる。

もう少し具体的にいうと、2つの仕事をしている。

① プライベートサブネット内ホストのIPアドレスを自分(NATサーバー)のIPアドレスに変換して、プライベートサブネットからの要求を接続先へに伝える
② 接続先からの応答を受け取り、宛先をプライベートサブネット内ホストのIPアドレスに変換して、インターネットからの応答をプライベートサブネット内のホストに伝える

図解もしてみた。

プライベートサブネット側からの送受信はできるが、インターネット側からの送受信はできない。
プライベートサブネットにパブリックIPアドレスを割り当ててインターネット接続する(つまりインターネット側からも送受信できる状態)よりも、セキュリティを高めることができる。

参考文献と註