AWSを触る ~アクセス制御~
前回はプライベート領域にDBサーバを構築しました。
今回は、パブリック領域のWebサーバ、プライベートのDBサーバ、自宅のPC、これらのアクセスを適切に設定していきます。
WebサーバーからDBサーバーへのICMP通信
まず、現在ICMP通信が可能か確認してみます。
WebサーバーからDBサーバーへpingを飛ばしてみます。
pingを飛ばすためにWebサーバーへSSHでログインします。
Teratermの詳しいやり方はこちら
ちなみに、このTeratermの記事を書いたときは意識せずにやってましたが、接続ユーザの「ec2-user」はEC2で作ったサーバーにデフォルトで割り当てられるデフォルトユーザのようです。
本来こういうデフォルトユーザーはセキュリティ的に無効化しておいて、別のユーザーを作っておくべきだと思います。
接続できたらpingを飛ばします。
まったく返答がありませんので、これを返答されるように設定していきます。
セキュリティグループの画面を開いて、作ってあるDBサーバーを選択し、「インバウンドのルールの編集」を押下します。
「ルールの追加」を押下し、タイプに「すべてのICMP」を選択します。
また、送信元は「任意の場所」を指定しておきます。
設定できたら「ルールの保存」を押下します。
設定できたので、再度pingを飛ばしてみます。
今度は戻りがありました。
外部からWebサーバーへのICMP通信
次はWebサーバーへの通信です。
Webサーバーはもともと、外部からアクセスできるパブリックセグメントに設置していました。
そのため、自宅のクライアントから疎通できるはずです。
しかし、実際やってみると、DBサーバーと同じくpingの応答がありません。
セキュリティグループを見てみるとわかりますが、HTTPとSSHしか設定していないためです。
よって、こちらにもICMPを許可します。
やり方はDBサーバーのセキュリティグループと同じです。
しかし、こちらはパブリック環境のため念の為、アクセス元を自宅のIPアドレスに設定しておきました。
設定前は飛ばなかったpingが設定後は飛ぶようになりました。
WebサーバーからDBサーバーへのSSH接続
次はDBサーバーへSSH接続するための設定をします。
DBサーバーはプライベート領域に構成したため、外部からはSSH接続できません。
そのため、構築したWebサーバーを踏み台にしてアクセスするようにします。
この構成はよくある構成で、いわゆるDMZに置いてある外部からアクセス可能なサーバーを経由して内部のサーバーへアクセスするという仕組みです。
また、SSH接続するためには、キーペアの設定が必要です。
EC2にサーバーを構成するときに、キーペアの設定があったかと思います。
(ちなみにこれです。)
この段階で構成サーバーに公開鍵を保持しているわけなので、あとはダウンロードしてある秘密鍵をアクセス元に設定します。
今回はWebサーバーがアクセスするので、Webサーバーへ秘密鍵を保持させます。
Webサーバーへ秘密鍵のファイルを送るのにはTeratermのSCP機能を利用します。
TeratermでWebサーバーへ接続した後、ファイルから「SSH SCP」を選択します。
上ペインの方で、fromに秘密キーを指定し、Toには「~/」でWebサーバーのホームディレクトリを指定して「Send」を押下します。
ファイルが遅れたか確認しておきます。
lsで配下のファイルを出力します。
*.pemファイルの存在が確認できます。
次に、不正にアクセスされることを回避するために、秘密キーファイル*.pemファイルの権限を変更しておきます。
「chmod 400 my-key.pem」コマンドを実行します。
これでこのファイルは「所有者のみ読み取り権限」が付与できます。
実行できたらls -l コマンドで設定内容を確認します。
「-r--------」と表示されているので、readのみの設定になっています。
これで秘密鍵の設定は完了したので、接続してみます。
今やろうとしていることは、WebサーバーからDBサーバーへのssh接続です。
「ssh -i my-key.pem ec2-user@10.0.2.10」
接続できました。
これでアクセス制御の設定も完了です。