【AWS超入門】セキュリティーグループを作る【Webサーバー構築①】

#本稿について
**「読みながら技術を大まかに掴んで、とにかく手を動かす」**ことを目指して書いています。
AWSに全く触れたことのない人が画面の操作などの感覚を掴めるように書いたつもりです！
非常にざっくりした説明になっているのは悪しからず。ご指摘歓迎です。

今回は第一弾です！

#AWSとは
言わずと知れたクラウドサービスです。
無料期間があり、この連載の内容は全て無料で構築できます！

ただし、今回の構築内容を放置した場合に発生する課金については責任を負いかねます。
あくまでAWSの練習ということで、継続的な運用のことは置いておきます。

#仮想という言葉
×実在がない
○ユーザーの手の届かない所にある（見えない）が実在している物理リソース

仮想インスタンス、仮想ネットワークなどよく出てくる言葉ですが"仮想"という言葉のイメージに引っ張られないようにしましょう。

仮想ネットワーク⇒クラウドでのネットワーク
仮想インスタンス⇒クラウドでのサーバー
くらいのイメージで大丈夫です。

#環境・準備するもの
- ブラウザ（なんでも）
- AWSアカウント（要クレジットカード登録）
- SSH接続のためのリモートクライアント（Windows ⇒ [Tera Term](https://forest.watch.impress.co.jp/library/software/utf8teraterm/)、MAC ⇒ [ターミナル](https://www.google.com/search?q=mac+%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB&rlz=1C1GCEU_jaJP858JP858&oq=mac+%E3%81%9F&aqs=chrome.1.69i57j0l5.4637j0j4&sourceid=chrome&ie=UTF-8)）

私がAWSのチュートリアルにはじめて突撃した際に乗り越えられなかった壁。。。
それはEC2へのSSH接続です。

AWSの画面はあくまで**仮想マシンを管理する**ためのものです。
**仮想マシンにログインする**ためには上に挙げたリモートクライアントが必要です。
私はTera Termを使っています。さくっとダウンロードしちゃいましょう。

##今回使用するAWSサービスは

###VPC (Virtual Private Cloud)
AWS内で構築されるネットワークのことです。
仮想ネットワークといわれます。

###EC2 (Elastic Compute Cloud)
いわゆるIaaSで、仮想サーバーのサービスです。
今回はEC2にLAMP環境を構築します。
LAMP環境とはWeb開発の定番になっている4つのオープンソース(Linux, Apache, MySQL, PHP)
で出来上がった環境のことです。
ちなみに、EC2の2は「Cが2回続いている」という意味とのこと。
###RDS (Relational Database Service)
AWSの代表的なデータベースサービスです。
SQLを利用するものです。
今回は特にデータを置くところまでは行いませんのでSQLが書けなくても問題ないです。

#目標とする構成はこちら
![構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/8b9f2cc2-15f7-9859-fe2a-a69b8dea7284.png)
細かい説明は省きますが、こういうものを作るんだな程度に思ってくれればオッケーです。
##第一弾での構成
第一弾ではwebsgとdbsg、二つのセキュリティグループを作成します。
なので、今回は次の画像のような構成ができます。
![構成_第一弾.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/df17896c-22d7-3744-e66d-4c402c784cf4.png)
今回リージョンとアベイラビリティーゾーンを設定することはないのですが、便宜上描いておきました。

##リージョンとアベイラビリティーゾーン
![aws_regions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/60d4e220-d563-3c66-b80b-1e4521329a9f.png)
*[リージョンとアベイラビリティーゾーン](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions)
リージョンはアメリカ東部、EUなどの地域で、アベイラビリティーゾーンはリージョン内のいくつかの拠点というイメージです。



#AWSを開いてみると
早速ですが、AWSの操作に移りましょう。
ログインすると、以下のような画面が出てくるかと思います。
この最初の画面をAWSマネジメントコンソールのホームページといいます。
![1AwsStart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/1f700de9-df44-b114-5897-929cb2962e70.png)
大切なのは！左上に赤丸で囲んである**【サービス】**の部分です。
ここでEC2やRDSなど各サービスの構成や設定ができます。

![2ServiceEC2Choice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/c4033e81-b9a8-9cef-d84b-eaaf203a1862.png)
今後、EC2やRDSの操作をそれぞれ行いますが、その画面の切り替えに何度も使う部分です！
試しにEC2を開いてみましょう。上の画像の赤丸部分にあります。

#EC2から始めよう
##0.EC2の概観
![3EC2Start.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/1c29fb11-a778-3efb-32d9-8217f5c978c9.png)
この画面をサービスコンソールといいます。
画面上の黒い部分が*ナビゲーションバー*、画面左側が*ナビゲーションペイン*です。

バーの【Services】から選んだサービス、ここではEC2の操作項目がナビゲーションペインに現れます。
EC2のナビゲーションペインをざっと整理すると、以下のような階層構造になっています。
斜体は操作するタイミング等についての簡単なコメントです。

- インスタンス
    - インスタンス　*サーバーをたてる*
    - 起動テンプレート
    - .....
- イメージ
    - AMI　*同じ仕様のサーバーをたてる（複製するときに）*
    - バンドルタスク
    - .....
- Elastic Block Store
    - ボリューム　*サーバーのディスクを拡張するときなど*
    - スナップショット
    - .....
- ネットワーク＆セキュリティ
    - セキュリティグループ　*EC2に必ず設定するセキュリティ設定を作る*
    - .....
    - キーペア　*EC2にTera Termなどから接続するときに使うパスワードデータ*
    - .....

##1.セキュリティグループ
###説明
AWSはインターネットからアクセスできます。つまり、インターネット経由での攻撃の可能性が常にあります。
当たり前ですが、AWSとしてはその攻撃はブロックしたいわけです。
そこで**EC2への通信はデフォルトでブロックする**ように設定されています。（仮想ファイヤーウォール）

今回の目標はWebサーバーを構築することです。
EC2にアクセスできなければWebサーバーとしてインターネット上にhtmlなどを公開できません。
つまり、**必要な通信（今回だとデータベースとの通信）を許可**しなければいけません。
その通信の許可はセキュリティグループで行います。
グループというだけあって、一度作れば**複数のインスタンスに適応できるテンプレート的な役割を果たすのでとても便利です。

###操作1（Webサーバーのセキュリティグループ作成）
セキュリティグループはEC2の画面から設定することになっています。
####●【Services】からEC2を開く
####●【ナビゲーションペイン】のセキュリティグループを開く
####●【開いた画面の上の方】にあるセキュリティグループの作成を開く
このボタンです。
![4SecurityGroupSakusei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/f125d643-2c15-a0c5-021b-2c9eb266116b.png)
####●以下のように入力
![5SecurityGroupSakuseiDetail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/a45ed184-a693-9a99-9fe9-a086fc7486b0.png)
websgはウェブサーバーのセキュリティグループの略記です。
VPCはネットワークのことです。デフォルトで問題ありません。
####●ルールの追加を開いて、タイプをSSH、ソースを任意の場所とする
Tera TermやターミナルからEC2にアクセスするためにSSHを許可します。
任意の場所とするのはセキュリティ的には良くないのですが簡易的に行うために設定しています。
####●もう一度ルールの追加を開いて、タイプをHTTP、ソースを任意の場所とする
WebサーバーとしてアクセスしてもらうためにHTTPのアクセスを許可します。
####●以下のようになっていることを確認して作成を開く
![6SecurityGroupSakuseiRule.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/b5936d55-b798-24e8-b57a-02ce2a12b194.png)
####●セキュリティグループの一覧から今作ったものを確認（グループ名がwebsg）
【画面下半分】にその詳細が表示されます。隠れていることもあるので上に引き伸ばしてあげましょう。
【インバウンドのタブ】に、先程許可したHTTPとSSHが表示されます。
前述のようにデフォルトではEC2インスタンスへの通信はブロックされます。しかし、HTTPとSSHの外部からのアクセス（インバウンド）は任意のソースから許可する設定になっています。
![7SecurityGroupShow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/04916702-0374-729f-5a19-cb24a1c01b1e.png)
この表示形式はインスタンスでも同じようになっています。
上の一覧からクリックすると、下半分で詳細の確認ができることをイメージしておきましょう。
####●【websgの説明タブ】からグループIDをコピーする
![8SecurityGroupShowGroupID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/0b5ea58c-2bc6-e051-e126-81d9ae365509.png)
文字列の隣にあるマークをクリックするとそれだけでコピーできます。
今後もよく使用します。

###操作2（データベースのセキュリティグループ作成）
操作1と同様の手順で、後から作るRDSのためのセキュリティグループを作ります。
####■【Services】からEC2を開く
RDSのためのセキュリティグループですが、EC2のServicesから作ることになっています。
####■【ナビゲーションペイン】のセキュリティグループを開く
####■【開いた画面の上の方】にあるセキュリティグループの作成を開く
![4SecurityGroupSakusei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/f125d643-2c15-a0c5-021b-2c9eb266116b.png)
####■以下のように入力。ルールの追加を開いて、タイプをMySQL/Aurora、ソースのカスタムを選択してテキストボックスにwebsgのグループIDを入力
![9DBSecurityGroupSakusei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/2710cf48-f1ba-8744-2216-6b8f6114b43c.png)
dbbsgはデータベースサーバー（今回だとRDS）に使うセキュリティグループの略記です。
VPCはネットワークのことです。デフォルトで問題ありません。
ソースはタイプで選んだ方法（ここではMySQL/Aurora）でアクセスできるクライアントを指定（ここではwebsgを指定)する項目です。
「dbsgに所属するRDS」にアクセスできるのは、「websgに所属するEC2インスタンスのみ」になるように設定しています。
####■作成を開く
####■セキュリティグループの一覧から今作ったものを確認（グループ名がdbsg）
【画面下半分】にその詳細が表示されます。隠れていることもあるので上に引き伸ばしてあげましょう。
【インバウンドのタブ】に、先程許可したMySQL/Auroraが表示されます。
![9DBSecurityGroupSakusei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230192/ccd31773-fe9a-c005-dd46-ec339f95357c.png)

#まとめ
今回はAWSでWebサーバーをたてる足がかりとして以下の事を行いました！
- AWSマネジメントコンソールを操作
- EC2の設定画面を理解
- セキュリティグループの理解
- セキュリティグループの作成

第二弾は鋭意作成中です。。。