AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter6
こちらの書籍について学んだことです。
Chapter6 プライベートサブネットを構築する
万全の対策をしていても、インターネットに接続している限りは攻撃を受ける可能性が少なからずある。
セキュリティを高める方法として検討したいのが、インターネットから隔離したプライベートサブネット
データベースサーバーなどは、インターネットから隔離したプライベートサブネットに配置することで、安全性を高められる。
6-1 プライベートサブネットの利点
前章までで作成したWebサーバーにはパブリックIPアドレスを割り当て、パブリックサブネットに配置した。
パブリックサブネットは、インターネットゲートウェイを経由してインターネットに接続されている。
つまり、ここに配置したWebサーバーは、インターネットからSSHやWebブラウザでアクセスできる。
しかし、システムを構成するサーバー群の中には、インターネットから直接接続してほしくないものもある。
データベースなどのバックエンドシステムは、その典型的な例。
隠したいサーバーは、「インターネットから接続できないサブネット」に配置するようにする。
このようなサブネットのことをプライベートサブネットと呼ぶ。
プライベートサブネットを構築することでサーバーを隠すことができ、セキュリティを高められる。
この章では、プライベートサブネットを作って、そのサブネットにデータベースをインストールするためのサーバーを構築する。
インターネットからプライベートサブネット内のサーバーに接続できないたけでなく、逆にプライベートサブネット内のサーバーからインターネットに接続することもできない。これは、サーバーにソフトをインストールしたり、アップデートしたりするときに困る。それを解決する手法としてNATを使う手法が取れる。その詳細はChapter7
6-2 プライベートサブネットを作る
前章までのパブリックサブネットは10.0.1.0/24だった
この章で作成するプライベートサブネットは10.0.2.0/24
■アベイラビリティーゾーンを確認する
AZ
AWSのサービスは、いずれかのアベイラビリティーゾーン上で実行される。
Amazon VPCも例外ではない。
Amazon VPCを使ってサブネットを構築すると、そのサブネットはどこかのアベイラビリティーゾーン上に作られる。
サブネット内に配置したインスタンスは、そのサブネットと同じアベイラビリティーゾーンに属す。
これから構築するプライベートサブネットにはデータベース・サーバーを置き、パブリックサブネットに存在するWebサーバーと通信するように構成していく。
サブネットは別々のアベイラビリティーゾーンにあっても問題なく通信できる。
しかし、距離による遅延が増加したり、アベイラビリティーゾーン間の通信費用が発生したりするため、注意する必要がある。
パブリックサブネットが現在どのAZに属しているか確認する。
VPCのサブネットを開いてパブリックサブネットをポチしてしたの概要のアベイラビリティーゾーンで確認!
ap-northeast-1c (apne1-az1)
■プライベートサブネットを作る
【プライベートサブネットを構築する手順】
VPCの左のメニューからサブネットをポチ
↓
サブネットの作成をポチ
↓
名前タブをプライベートサブネット
VPCをVPC領域
AZをパブリックサブネットと同じにする
CIDRブロックは10.0.2.0/24
↓
右下の作成をポチ
↓
サブネットが作成されたので右下の閉じるをポチ
↓
完成!
■ルートテーブルを確認する
rtb-0d46f41b569e7f357
プライベートサブネットのルートテーブルは上のIDの通り。
左のメニューからルートテーブルをポチして同じIDのものを探し、クリックして下のタブのルートを開いて自身のネットワークに対するルーティングの設定だけがされていることを確認する。
インターネットに接続しないので、このままデフォルトの設定とする。
6-3 プライベートサブネットにサーバーを構築する
プライベートサブネットができたら、次にサーバーを構築する。
■サーバーを構築する
【サーバーを構築する手順】
EC2を開いて左のメニューからインスタンスをポチ
↓
左上の青いインスタンスの作成ボタンをポチ
↓
LINUXを選択して次のステップをポチ
↓
t2.microを選択して次のステップをポチ
↓
ネットワークをVPC領域に変更
サブネットをプライベートサブネットに
自動割り当てパブリックIPを無効化に
プライマリIPを10.0.2.10に変更
次へをポチ
↓
ストレージの追加は特に弄らず次へをポチ
↓
タグのキーをName,値をDBサーバーにして次へをポチ
↓
セキュリティはグループ名をDB-SGにする。
ルールを追加する。MYSQLを通したいので。
ソースは任意の場所にする。任意の場所だとどこからでも接続できるという意味になる。WebサーバーのIPアドレスだけ、パブリックサブネットのCIDRを指定して接続元を限定すればさらにセキュリティを高めることもできる。次章でNATを構築するから今はこのまま。
↓
確認と作成をポチ
↓
起動をポチ
↓
インスタンスの作成をポチ
↓
インスタンスの表示をポチ
↓
完成!ステータスが初期化していますになっている・・・
AWSのセキュリティグループでは、IPアドレスやCIDR指定のほかに、セキュリティグループも送信元として指定できる。MySQLに対するファイアウォール設定のSourceには、このWEB-SGを設定することもできる。
Sourceにセキュリティグループを指定する手法は、AWSを用いた設計でよく使われる。
以下のようになっていること。
①パブリックDNS名やパブリックIPアドレスを持たないこと。
②10.0.2.10のプライベートIPアドレスおよびそれに対応するプライベートDNS名を持っていること。
■pingコマンドで疎通確認できるようにする
サーバー間での疎通を確認するときによく用いるのがpingコマンド
pingコマンドではICMP Internet Control Message Protocolというプロトコルを用いる。
pingコマンドを実行すると、ネットワーク疎通を確認したいホストに対して「ICMP エコー要求(Echo Request)」というパケットを送信する。
それを受け取ったホストは送信元に対してICMPエコー応答を返信する。
pingコマンドでは、このICMPエコー要求とICMPエコー応答のやり取りから疎通を確認したり相手に届くまでの時間を計測したりする。
●ICMPが通るように構成する
AWSのデフォルトのセキュリティグループの構成では、ICMPプロトコルは許可されていない。
なので、いま作成したDBサーバーに対して、ICMPプロトコルが通るようにファイアウォールの構成を変更する。
【DBサーバーに対してICMPプロトコルが通るように構成する手順】
左のセキュリティグループを選択してDB-SGをポチ
↓
下のインバウンドをポチして編集をポチ
↓
ルールの追加をポチ
↓
タイプをすべてのICMPにしてソースを任意の場所にして保存をポチ
↓
完了!
●疎通を確認する
ICMPプロトコルを通るように構成したため、pingコマンドを使って疎通確認する。
ping ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com
54.249.78.248
WebサーバーからDBサーバーにpingを
----------------------------------------
Last login: Sat Jan 25 17:19:04 on ttys001
ナイショ % cd Dropbox/【フリーランスエンジニア に必要なデータ】/001\ ブログ/001\ 未経験からWeb系エンジニアへ/013\ AWS習得編
ナイショ 013 AWS習得編 % ssh -i my-key.pem ec2-user@54.249.78.248
Last login: Sat Jan 25 06:12:07 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 ~]$ ping 10.0.2.10
PING 10.0.2.10 (10.0.2.10) 56(84) bytes of data.
64 bytes from 10.0.2.10: icmp_seq=1 ttl=255 time=0.401 ms
64 bytes from 10.0.2.10: icmp_seq=2 ttl=255 time=0.433 ms
64 bytes from 10.0.2.10: icmp_seq=3 ttl=255 time=0.415 ms
64 bytes from 10.0.2.10: icmp_seq=4 ttl=255 time=0.432 ms
64 bytes from 10.0.2.10: icmp_seq=5 ttl=255 time=0.421 ms
64 bytes from 10.0.2.10: icmp_seq=6 ttl=255 time=0.446 ms
64 bytes from 10.0.2.10: icmp_seq=7 ttl=255 time=0.418 ms
64 bytes from 10.0.2.10: icmp_seq=8 ttl=255 time=0.500 ms
64 bytes from 10.0.2.10: icmp_seq=9 ttl=255 time=0.464 ms
64 bytes from 10.0.2.10: icmp_seq=10 ttl=255 time=0.415 ms
64 bytes from 10.0.2.10: icmp_seq=11 ttl=255 time=0.438 ms
64 bytes from 10.0.2.10: icmp_seq=12 ttl=255 time=0.559 ms
^C
--- 10.0.2.10 ping statistics ---
12 packets transmitted, 12 received, 0% packet loss, time 11266ms
rtt min/avg/max/mdev = 0.401/0.445/0.559/0.044 ms
[ec2-user@ip-10-0-1-10 ~]$
----------------------------------------
ローカル環境からWebサーバーにping
----------------------------------------
Last login: Sun Jan 26 04:42:12 on ttys000
ナイショ % ping ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com
PING ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com (54.249.78.248): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5
Request timeout for icmp_seq 6
Request timeout for icmp_seq 7
Request timeout for icmp_seq 8
Request timeout for icmp_seq 9
Request timeout for icmp_seq 10
Request timeout for icmp_seq 11
^C
--- ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com ping statistics ---
13 packets transmitted, 0 packets received, 100.0% packet loss
ナイショ %
----------------------------------------
疎通が確認できない。これはWebサーバーと接続不能な訳ではなく、Webサーバーに適用されているセキュリティグループにおいてICMPを許可していないため。
一般にpingコマンドが応答を返さないときはそのサーバーが停止していると判断するが、この例のようにファイアウォールでICMPプロトコルが阻まれているだけということもある
ping通らないようにしてもいいけど、今回は通るようにする。
【WEB-SGグループに対してもICMPを許可する手順】
EC2で左のメニューからセキュリティグループをポチ
↓
WEB-SGを選択して、下のインバウンドタブを選択して編集をポチ
↓
ルールを追加してすべてのICMP-IPv4で任意の場所を選択して保存をポチ
↓
完了!
再度ローカル環境からWebサーバーにping
----------------------------------------
ナイショ % ping ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com
PING ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com (54.249.78.248): 56 data bytes
64 bytes from 54.249.78.248: icmp_seq=0 ttl=236 time=20.881 ms
64 bytes from 54.249.78.248: icmp_seq=1 ttl=236 time=24.074 ms
64 bytes from 54.249.78.248: icmp_seq=2 ttl=236 time=23.402 ms
64 bytes from 54.249.78.248: icmp_seq=3 ttl=236 time=24.206 ms
64 bytes from 54.249.78.248: icmp_seq=4 ttl=236 time=23.295 ms
^C
--- ec2-54-249-78-248.ap-northeast-1.compute.amazonaws.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.881/23.172/24.206/1.200 ms
ナイショ %
----------------------------------------
ちなみにローカル環境からはDBサーバーへの疎通を確認することはできない。
6-4 踏み台サーバーを経由して
まだDBサーバーソフトをインストールしてない
SSHでログインして、MySQLをインストールする
どうやってDBサーバーにSSH接続するか?
解決方法のひとつが、踏み台サーバー
Webサーバーを踏み台にする。
■秘密鍵をアップロードする
インスタンスにSSHでアクセスするには秘密鍵が必要。
Webサーバーに鍵を置く必要がある。
●windowsの場合
省略
●macの場合
ターミナルからscpコマンドを使ってファイルを転送する。
scp -i my-key.pem my-key.pem ec2-user@54.249.78.248:~/
chmod 400 my-key.pem
●Webサーバーを踏み台にしてDBサーバーにSSH接続する
ssh -i my-key.pem ec2-user@10.0.2.10
exitでログアウトできる。
----------------------------------------
Last login: Sun Jan 26 05:18:30 on ttys000
ナイショ ~ % cd Dropbox/【フリーランスエンジニア に必要なデータ】/001\ ブログ/001\ 未経験からWeb系エンジニアへ/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
004 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter4.txt
005 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter5.txt
006 AWS習得編 Amazon Web Service 基礎からのネットワーク&サーバー構築 Chapter6.txt
my-key.pem
my_key_pemは絶対に紛失しないこと。Chapter3で作った。
ナイショ 013 AWS習得編 % scp -i my-key.pem my-key.pem ec2-user@54.249.78.248:~/
my-key.pem 100% 1696 91.2KB/s 00:00
ナイショ 013 AWS習得編 % ssh -i my-key.pem ec2-user@54.249.78.248
Last login: Sat Jan 25 20:22:28 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 ~]$ ls
my-key.pem
[ec2-user@ip-10-0-1-10 ~]$ chmod 400 my-key.pem
[ec2-user@ip-10-0-1-10 ~]$ ls
my-key.pem
[ec2-user@ip-10-0-1-10 ~]$ ssh -i my-key.pem ec2-user@10.0.2.10
The authenticity of host '10.0.2.10 (10.0.2.10)' can't be established.
ECDSA key fingerprint is SHA256:Y1WEr53K6FXRzoETsOP7I1IKCn0FbYzKPiiMkVJ8SYA.
ECDSA key fingerprint is MD5:f7:8f:c3:a2:70:5e:c7:3f:59:bf:1c:d0:6d:95:a7:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.10' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-10-0-2-10 ~]$ exit
ログアウト
Connection to 10.0.2.10 closed.
[ec2-user@ip-10-0-1-10 ~]$ exit
ログアウト
Connection to 54.249.78.248 closed.
ナイショ 013 AWS習得編 %
----------------------------------------
6-5 まとめ
インターネットから直接アクセスさせないプライベートサブネットの扱い方について学んだ。
DBサーバーにアクセスするときは踏み台サーバーを使う。
次の章でNATを構築してプライベートサブネット内のサーバーからインターネットに接続するための方法について学ぶ
この記事が気に入ったらサポートをしてみませんか?