スクリーンショット_2020-01-30_00

AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter3


こちらの書籍について学んだことです。

Chapter3 サーバーを構築する

Chapter2では、ネットワークの構築が終わった。
物理的な世界で言うところの
・インターネット接続の契約が済んだ
・ハブの配線が済んだ
・ハブの設定が済んだ
・ルーターの配線が済んだ
・ルーターの設定が済んだ

Chapter3ではネットワーク上に仮想サーバーを作成する

3-1 仮想サーバーを構築する

パブリックサブネットの中に、仮想サーバー(インスタンスという)を生成する。
次章になるが、仮想サーバーの中にWebサーバーソフトをインストールしてWebサーバーとして機能させる予定。

インスタンスには、パブリックサブネットで利用可能なプライベートIPアドレスを割り当てる。
パブリックサブネットのCIDRは10.0.1.0/24
10.0.1.0〜10.0.1.255まで行ける

プライベートIPアドレスはインターネットとの接続には利用できない。

インスタンスを起動する場合は、プライベートIPアドレスとは別にパブリックIPアドレスを設定するようにする。

ちなみにパブリックIPアドレスはAWSに割り当てられているIPアドレスブロックのうち、適当なものが使われる。

つまり、作成したインスタンスは「VPC内で通信するためのプライベートIPアドレス」と「インターネットで通信するためのパブリックIPアドレス」の2つを持つ。

■インスタンスを作成する
インスタンスを作成するには、AWSマネジメントコンソールのEC2タブから操作する。


【インスタンスを作成する手順】
AWSマネジメントコンソールからEC2をポチ

リージョンがオハイオになってる・・・。
東京に変更!

左のメニューからインスタンスをポチ

左上のインスタンスの作成をポチ

AMI amazon machine image
を選択する。どれ?
Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type
を選択しておく。

インスタンスタイプの選択をする画面に。
t2.microを選択して右下の次のステップ:インスタンスの詳細の設定をポチ

インスタンスの詳細の設定をする画面に。
ネットワークをVPC領域にする。Chapter2で作ったやつ。
サブネットをパブリックサブネットにする。Chapter2で作ったやつ。
自動割り当てパブリックIPを有効にする。
配置グループとキャパシティーの予約はなし
IAMロールもなし
シャットダウン動作は停止
終了保護は特に有効化しない
モニタリングもしない。
テナンシーは共有ハードウェアインスタンスの実行でおk
ElasticInterfaceもなしでおk
T2/T3無制限もなし
ファイルシステムもなし
ネットワーク・インターフェースは重要!
プライマリIPを10.0.1.10にする。
設定が終わったら次のステップ:ストレージの追加をポチ

インスタンスで利用する仮想ハードディスク(EBS:Elastic Block Store)を設定する。
ディスク設定をカスタマイズする必要がないため、デフォルト値のまま次の手順:タグの追加ボタンをポチ。
デフォルトだと8GiBになる。

タグの追加画面になる。
タグの追加をポチ
キーをNameに、値をWebサーバーにする
次のステップ:セキュリティグループの設定をポチ

セキュリティグループの設定画面になる
セキュリティグループ名をWEB-SGにする
ほかはいじらない。
タイプはSSHでプロトコルはTCPでポート範囲は22でソースはカスタム
確認と作成をポチ

インスタンス作成の確認画面になる

起動をポチ

既存のキーペアを選択するか新しいキーペアを作成する画面になる
これがないとインスタンスにログインできない。
必ず取得する必要がある。
1つ目のプルダウンから新しいキーペアの作成を選択
キーペア名をmy-keyにする
キーペアのダウンロードをポチ
my-key.pemを任意の場所に置く
絶対に紛失しないこと。
保存できたらインスタンスの作成をポチ

インスタンス作成中のメッセージが表示される。
インスタンスの表示をポチ

インスタンスの確認画面でインスタンスの状態がもしかしたらpendingになってるかも。
これがrunningになったらOK
また、ステータスチェックが2/2チェックに合格しましたとなったらOSと正しく通信できていることを確認できる。

完了!

Linuxを選択するってあるけど2つあるんだよなぁ・・・。
Amazon Linux 2 には 5 年間のサポートが含まれます。Amazon EC2、systemd 219、GCC 7.3、Glibc 2.26、Binutils 2.29.1 で最適なパフォーマンスを発揮できるように調整された Linux カーネル 4.14、および、追加の最新のソフトウェアパッケージを提供します。

Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-079e6fb1e856e80c1
Amazon Linux AMI は、AWS がサポートする EBS-backed イメージです。デフォルトのイメージには、AWS コマンドラインツール、Python、Ruby、Perl、および Java が含まれます。レポジトリには、Docker、PHP、MySQL、PostgreSQL、およびその他のパッケージが含まれます。

とりあえず普通のやつにした

自動割り当てパブリックIPは有効にすると自動で割り当ててくれる。

仮想サーバーのプライベートIPアドレスは10.0.1.10になる。

CIDRブロックの先頭と末尾はサーバーなどのホストに設定することはできない。
先頭10.0.1.0はネットワークアドレスと呼ばれ、ネットワーク全体を示す。
末尾10.0.1.255はブロードキャストアドレスと呼ばれ、ネットワーク上の全てのホストが応答を返してくるが、AWSではその機能はサポートされていない。

セキュリティグループの設定で警告が出る理由は、不正侵入を試みようとされる恐れがあるため。

2台目移行のインスタンスを作る時はその都度キーペアを作成するのではなく、既存のキーペアを使うこともできる。既存のキーペアを使いたいときは既存のキーペアの選択を選択し、使いたいキーペアを選ぶ。

インスタンスが容量確保中は課金対象となる。
インスタンスメニューから右クリックで削除(終了?)とすると課金対象から外れる。

3-2 SSHで接続する

起動したインスタンスに、インターネットからログインして操作してみる。
操作には、SSHを使う。

■パブリックIPアドレスを確認する
左のメニューのインスタンスをポチ
そしてさっき作ったインスタンスを選択
すると下の説明タブで、IPv4パブリックIPが確認できる。
13.115.250.35であることを確認。

■SSHで接続する
パブリックIPアドレスを使って、SSHで接続する。
WindowsだとTeraTermを使う。
Macだと標準のターミナルで行ける。

●WindowsのTeraTermで接続する
今回はパス

●MACのターミナルで接続する

【Macのターミナルで接続する手順】
Finderのアプリケーションのターミナル.appをポチ

書籍に書いてないけど、my-key.pemのおいてあるディレクトリに移動

以下のコマンドを入力する
ssh -i my-key.pem ec2-user@13.115.250.35

オプション-iで指定したmy-key.pemはダウンロードしたキーペア

セキュリティ警告に答える初回の接続に限ってなんやかんや言われるので
yes
と打ってreturn

なんかwarningが出る

どうやら鍵ファイルのパーミッションが他のユーザーも閲覧できる状態になっているかららしい。その場合は以下のコマンドを入力する
chmod 400 my-key.pem

もっかい
ssh -i my-key.pem ec2-user@13.115.250.35
とする

行けたあああああ!!!ウェルカムコマンドでた!

出てきたログは以下の通り。

----------------------------------------
Last login: Sat Jan 25 00:51:52 on ttys000
ナイショ ~ % 
ナイショ ~ % $ ssh -i my-key.pem ec2-user@13.115.250.35
zsh: command not found: $
ナイショ ~ % ssh -i my-key.pem ec2-user@13.115.250.35
Warning: Identity file my-key.pem not accessible: No such file or directory.
The authenticity of host '13.115.250.35 (13.115.250.35)' can't be established.
ECDSA key fingerprint is SHA256:4QfXIWYosZ9U6ggyJKNvxZFx1a1NVazvUmK4ibBwfOY.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.
ナイショ ~ % ls
Desktop		Downloads	Library		Music		Public
Documents	Dropbox		Movies		Pictures
ナイショ ~ % cd Dropbox
ナイショ Dropbox % ls
10分間思考法.txt
Document.docx
Icon?
Prototype
Pythonではじめる機械学習
VIEW
buildtest
graphic
test(破損).pptx
test.pptx
資料
毎日メモ.txt
はじめてのdepplearning
プログラム
スクリーンショット
情報処理技術者試験
プログラミング言語の違い.xlsx
【フリーランスエンジニアに必要なデータ】
ナイショ Dropbox % cd 【フリーランスエンジニアに 必要なデータ】
ナイショ 【フリーランスエンジニアに必要なデータ】 %cd 001\ ブログ 
ナイショ 001 ブログ % cd 001\ 未経験からWeb系エンジニアへ
ナイショ 001 未経験からWeb系エンジニアへ % cd 013\ AWS習得編                            
ナイショ 013 AWS習得編 % ls
00 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter.txt
000 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 目次.txt
001 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter1.txt
002 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter2.txt
003 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter3.txt
my-key.pem
my_key_pemは絶対に紛失しないこと。Chapter3で作った。
ナイショ 013 AWS習得編 % ssh -i my-key.pem ec2-user@13.115.250.35
The authenticity of host '13.115.250.35 (13.115.250.35)' can't be established.
ECDSA key fingerprint is SHA256:4QfXIWYosZ9U6ggyJKNvxZFx1a1NVazvUmK4ibBwfOY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '13.115.250.35' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'my-key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "my-key.pem": bad permissions
ec2-user@13.115.250.35: Permission denied (publickey).
ナイショ 013 AWS習得編 % chmod 400 my-key.pem
ナイショ 013 AWS習得編 % ssh -i my-key.pem ec2-user@13.115.250.35
      __|  __|_  )
      _|  (     /   Amazon Linux AMI
     ___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
No packages needed for security; 5 packages available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-10 ~]$ 
----------------------------------------

パブリックIPアドレスは起動/停止するたびに別のIPアドレスが割り振られる動的IPアドレスになっている。
サーバーを運用する場合、このIPアドレスを固定化したいことがあるかも。
その場合は、Amazon EC2のElastic IPという機能を使って次の手順で設定する。

【パブリックIPアドレスを固定化】
EC2の画面で左のメニューからElasticIPをポチ

左上の青いボタンの新しいアドレスの割り当てをポチ

Amazonプールかユーザー所有か選ぶが、自分は持ってないのでAmazonプールを選択した状態で割り当てをポチ

18.190.34.216が取得できた!
IPアドレスをメモメモして閉じる

ちょっとまった!!!右上のリージョンがオハイオになってたんだけど!!!
新しく作ったIPアドレスを消し、全部やり直してここまで戻る・・・。
新しく取れたIPアドレスは13.112.99.72

ちょっとまった!!!EC2じゃなくてVPCでやっちゃってた!!!
新しく作ったIPアドレスを消し、全部やり直してここまで戻る・・・。(デジャブ)
ちなみにVPCの時とは画面が全然違って困ったけど、
Elastic IPアドレスの割り当て、Amazonプールを選択するという操作自体は変わらない。
新しく取れたIPアドレスは54.249.78.248

これをインスタンスに割り当てる操作が必要。

IPアドレスをポチしてアクションをポチして
Elastic IPアドレスの関連付けをポチ

Elastic IPアドレスの関連付けの画面が表示されるので、
インスタンスにwebサーバーを選択して関連付けるをポチ

インスタンス画面でIPv4パブリックIPが変わったのを確認。

じゃあもう一度接続をやり直さないと行けない気がしてきたな。

ターミナルを再起動して
cd Dropbox/【フリーランスエンジニアに必要なデータ】/001\ ブログ/001\ 未経験からWeb系エンジニアへ/013\ AWS習得編
ssh -i my-key.pem ec2-user@54.249.78.248
と打つ

また警告出てきたのでyesと打つ

Amazon Linux AMIにログインできた!!!!!!

完了!

出てきたログは以下の通り


----------------------------------------
Last login: Sat Jan 25 01:54:15 on ttys000
ナイショ ~ % cd Dropbox/【フリーランスエンジニア に必要なデータ】/001\ ブログ/001\ 未経験からWeb系エンジニアへ/013\ AWS習得編
ナイショ 013 AWS習得編 % ssh -i my-key.pem ec2-user@54.249.78.248
The authenticity of host '54.249.78.248 (54.249.78.248)' can't be established.
ECDSA key fingerprint is SHA256:4QfXIWYosZ9U6ggyJKNvxZFx1a1NVazvUmK4ibBwfOY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '54.249.78.248' (ECDSA) to the list of known hosts.
Last login: Fri Jan 24 16:15:16 2020 from kd113158199015.ppp-bb.dion.ne.jp
      __|  __|_  )
      _|  (     /   Amazon Linux AMI
     ___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
No packages needed for security; 5 packages available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-10 ~]$ 
----------------------------------------

Clipyにcdホニャララコマンドとsshホニャララコマンドを覚えさせた
キーペアファイルの作成し直しが必要になる?!と思ったけど全然そんなことなくて、ログイン時のIPアドレスさえちゃんと変更してれば問題なしだった。

Elastic IPアドレスは使わなくなったらアクションからアドレスの開放ボタンをクリックすればOK

3-3 IPアドレスとポート番号

Tera Termやターミナルを使ってSSH接続をするとリモートからサーバー(インスタンス)にログインして各種コマンドを実行できる。
なぜこのようなことが実現できているか?

■パケットを相手に届けるためのルーティングプロトコル
なんか複雑そうでよく分からんので機会があればまた読もうかと思う。
EGP Exterior Gateway Protocol 外堀みたいなもん
IGP Internet Gateway Protocol 細かいとこ

AWSとかISPとかはある程度大きなネットワークなのでAS番号(Autonomous System)というのを持ってて、それをEGPで使うっぽい。

EGPで使うのは以下のものがあるっぽい。
BGP Border Gateway Protocol 最新はBGP-4

IGPで使うのは以下のものがあるっぽい。
OSPF Open Shortest Path First
RIP Routing Information Protocol

■サーバー側のサービスとポート番号の関係
サーバーを操作できるようになる理由
sshdというソフトがサーバーで動いてくれてるから。

sshdはssh接続を受け入れるプログラム。
Amazon Linuxでは、サーバーが起動する際に、自動的にsshdも起動するように構成されている。

ポート番号はデータの出入り口
0〜65535まである。

マンションで言うところの部屋番号みたいなもん。

●待ち受けているポート番号とプログラムを確認する
sshdも、ポート番号が決まってる。

どのポート番号でどのプログラムが待ち受けているかは、lsofコマンドで調べられる。
sudo lsof -i -n -P

DEVICEは

sudoは管理者権限レベルで実行しますよという意味。
superuser doの略

127.0.0.1はループバックアドレスと呼ばれ、自分自身を示す特別なIPアドレス。
NAMEの末尾がport番号

●ウェルノウンポート番号
なぜmacはポート番号を指定しなくても繋がったか?
ウェルノウンポート番号(Well Know Portよく知られているポート番号)だから

SSHは22
SMTPは25
HTTPは80
HTTPSは443

クライアントが接続先のポート番号を省略したときはこのウェルノウンポートが使われるので明示的に指定しなくてもよい。

lsofの右端の数字は自分のPCのポート番号で、ここは22とかではない。
クライアント側のため。ランダムに割り当てられる。この一時的なランダムなポート番号のことを「エフェメラルポート(ephemeral ports)」という。
サーバーと接続している間だけ使われ、切断すると開放される。

3-4 ファイアーウォールで接続制限する

ファイアーウォールは通してよいデータだけを通して、それ以外を遮断する機能の総称。
その最も簡単な構造のものが、パケットフィルタリング。

■パケットフィルタリング
パケットフィルタリングは、流れるパケットを見て、通過の可否を決める仕組み。
パケットには、「IPアドレス」のほか「ポート番号」も含まれている。
パケットフィルタリングは、「IPアドレス」と「ポート番号」など、パケットに付随する各種情報を見て、通過の可否を決める。

IPアドレスを判定して、「特定のIPアドレスを送信元とするパケット以外を除外するようにする」ように構成すれば、接続元を制限できる。
ポート番号を制限すれば、特定のアプリケーションを外部から接続できないように構成できる。

たとえばMySQLはポート番号3306で通過の可否を決める。

パケットフィルタリングでポート番号3306を除外するように構成できる。

■インスタンスのセキュリティグループ
実世界でパケットフィルタリングを構成するのは、ルーターやサーバー、もしくは専用のファイアウォール機器。
AWSではインスタンスに対して構成する「セキュリティグループ」が、この機能を担当する。本書では、インスタンスを構成するときにWEB-SGというセキュリティグループを作った。

左のメニューからセキュリティグループを選択して、WEB-SGをクリックし、下のインバウンドのタブをポチすると、何を通すか確認できる。

以降の章でWebサーバーソフトなどをインストールしていくが、デフォルトのセキュリティグループの設定ではたとえWebサーバーソフトをインストールしたとしても阻まれて通信できない。

以降は必要に応じてソフトウェアのインストールと共に、セキュリティグループの構成も変更していく。

インバウンドはサーバーに入ってくるやつ
アウトバウンドはサーバーから出てくやつ


3-5 まとめ

パブリックサブネットの中に1台のインスタンスを作った。
作成したインスタンスには、パブリックIPとプライベートIPができた。
ターミナルでssh接続できるようになった。
EGPとIGPでルーティング色々やってることがわかった。
TCP/IPではポート番号を使いますよということがわかった。
パケットフィルタリングについて学んだ。
パケットフィルタリングはEC2上ではセキュリティグループでポチポチ設定できることがわかった。

次の章でインスタンスをWebサーバーとして動作させる。


この記事が気に入ったらサポートをしてみませんか?