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」
接続できました。
これでアクセス制御の設定も完了です。
AWSを触る ~プライベートサブネットとDBサーバの構築~
前回は名前解決をやりました。
今回はプライベートサブネットの構築とDBサーバの構築をやっていきます。
今まではパブリックサブネットを構築して、そこにwebサーバーを立てていました。
プライベートに構築することで、よりセキュアな構成にすることができます。
プライベートサブネットの作成
サブネット画面より、「サブネットの作成」を押下します。
サブネット名は「プライベートサブネット」にしました。
VPCは作っておいたものを選択し、アベイラビリティーゾーンは先に作っていたパブリックサブネットと同じものを選択します。
パブリックサブネットは下記で確認できます。
CIDRブロックには「10.0.2.0/24」を入力します。
入力できたら「作成」ボタンを押下します。
「閉じる」ボタンを押下します。
DBサーバー構築
EC2ののインスタンス画面を開きます。
「インスタンスの作成」を開きます。
AMIとして、「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択します。
無料のt2.microを選択します。
「次のステップ」を押下します。
インスタンスの詳細の設定します。
ネットワークに作ってあるVPCを選択します。
サブネットに先程作った「プライベートサブネット」を選択します。
ネットワークインターフェースのプライマリIPに「10.0.2.10」を入力します。
入力できたら「次のステップ」を押下します。
ストレージはそのまま「次のステップ」を押下します。
タグを追加します。
キーに「Name」、値に「DBサーバー」を入力し、「次のステップ」を押下します。
セキュリティグループの設定を入力します。
セキュリティグループ名を「DB-SG」としました。
「ルールの追加」ボタンを押下し、タイプを「MYSQL」、「ソース」に自宅のIPアドレスを入力して「確認と作成」を押下します。
内容に問題がなければ「起動」ボタンを押下します。
キーはWebサーバーの時に作成したキーを利用しました。
「インスタンス作成」ボタンを押下します。
これで、サーバーができました。
インスタンスの表示を押下します。
今回はプライベートのみ公開するように作成しました。
下ペインの設定をみるとパブリックに情報はなく、プライベートにのみ設定されています。
これで、外部からアクセス不可能なセキュアなサーバーが作成できました。
これでプライベートサブネットの作成とDBサーバーの構築ができました。
次回はwebサーバーとdbサーバーへのアクセスをより詳細に設定していく予定です。
AWSを触る ~名前解決~
今回は名前解決をやります。
前回はこちら。
前回最後にApacheにアクセスしました。
その時のアクセス先はEC2に立てたWebサーバーのパブリックIPアドレスでした。
これを、「ドメイン名」を利用してアクセスできるようにします。
「https://www.google.com/」←ドメイン名はこんな感じのやつです。
VPCの画面で作ってあるVPCを選択し、アクションの「ホスト名の編集」を選択する。
DNSホスト名の有効化にチェックを入れて保存を押下します。
閉じるを押下します。
インスタンス画面を開いて、下ペインにある「パブリックDNS(IPv4)」の文字列を確認します。
これが、アクセスできる名前です。
矢印のところに「クリップボードにコピーする」のコピー機能があるため、コピーしておきます。
コピーしたURLを貼り付けてアクセスします。
「Amazon Linux AMI Test Page」の画面が表示されれば成功です。
AWSを触る ~ファイアーウォールの設定~
前回EC2に用意したwebサーバにApacheを導入しました。
今回は、その導入したApacheで立てたwebサーバーへアクセスするために、ファイアーウォールの設定を変更していきます。
ポートの開放
awsでセキュリティグループの画面を開きます。
前に作ってある「WEB-SG」を選択し、下ペインの「インバウンドルール」タブを開き、「インバウンドのルールの編集」を押下します。
「ルールを追加する」を押下し、ルールを入力します。
タイプに「カスタムTCP」、ポート範囲に「80」、ソースに「自分のPC」を入力し、「ルールの保存」ボタンを押下します。
アクセス確認
これでApacheへアクセスできるようになったはずです。
確認します。
EC2へ構築したwebサーバのパブリックIPアドレスをブラウゼに入力します。
「Amazon Linux AMI Test Page」というページが表示されたら成功です。
この記事は以上です。
次は名前解決をやります。
AWSを触る ~作ったサーバへApacheを入れる~
前回はteratermの接続確認をやりました。
今回はEC2のサーバーにApacheを導入します。
接続方法は前回の記事を参照してください。
接続しました。
Apacheインストール
yumでインストールします。
インストールできたら「Complete!」が表示されます。
Apache起動
「sudo service httpd start」
自動起動設定
サーバー再起動時にApacheが自動起動されるように設定します。
「sudo chkconfig httpd on」
設定できたら確認します。
「sudo chkconfig --list httpd」
3がonになっていたら自動起動設定できています。
Apacheプロセスの確認
Apacheのプロセスの状態を確認します。
httpデーモンが確認できているのでApacheが起動されていることが確認できました。
ポート状況の確認
httpデーモンのポート状況を確認します。
「sudo lsof -i -n -P | grep httpd」
80番ポートでListenしていることが確認できました。
これでApacheの導入も完了です。
しかし、VPC側でファイアーウォールがポートをフィルタしているので、このままではApacheへアクセスすることはできません。
次回にファイアーウォールのポート開放をやっていきます。
AWSを触る ~作ったサーバへのSSH接続~
前回はサーバーの構築をやりました。
今回は前回作ったサーバーへの接続を試してみようと思っています。
自身のクライアントがWindowsなので、接続クライアントとしてはTeratermを利用します。
まず、Teratermの導入から始めていきます。
Teratermの導入
まず、導入用の資材をダウンロードしてきます。
自分は、「「Tera Term」定番のターミナルエミュレーター - 窓の杜」からダウンロードしてきました。
ダウンロードできたらexeを実行します。
特殊なことはしないので、全部デフォルトのままです。
導入できたらデスクトップにパソコンマークのアイコンができました。
起動して、awsで構築したサーバーのパブリックIPアドレスを指定します。
前回の記事では「自動割り当てパブリックIP」を「有効化」したので、起動のたびにIPアドレスは変動しています。
サービスはSSHを選択し、「OK」を押下します。
セキュリティ警告が表示されますが、そのまま「続行」を押下します。
ユーザ名に任意の文字列を入力します。
「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、秘密鍵にサーバ構築時にダウンロードしたkeyを指定します。
「OK」を押下します。
接続できたらこんな感じになります。
これで接続確認もOKですね。
AWSを触る ~サーバーの構築~
前回はVPC領域の構成をやりました。
今回はサーバーの構築をやっていきます。
前回はこちら
AWSの仮想サーバーのサービスはEC2、Elastic Compute Cloudと呼ばれます。
ここの仮想サーバーのことを「インスタンス」と呼びます。
では、インスタンスを作成していきます。
AWSマネジメントコンソールの「EC2」を開きます。
インスタンス画面を開き、「インスタンスの作成」を押下します。
awsでAMIと呼ばれるイメージファイルを選択します。
インスタンスタイプを選びます。
当然無料枠の「t2.micro」を選びます。
「インスタンスの詳細の設定」を押下します。
インスタンスの詳細を設定します。
ネットワークに前回作っておいたVPCを選択します。
また、自動割り当てパブリックIPを「有効化」にして、下部のプライマリIPを「10.0.1.10」に設定します。
設定できたら「ストレージの追加」を押下します。
AWSでは仮想ハードディスクをEBS、Elastci Block Storeといいます。
デフォルトのまま8GBのEBSを設定しますので、そのまま「タグの追加」を押下します。
インスタンスに名前をつけます。
「タグの追加」を押下します。
キーを「Name」とし、値を「Webサーバー」とします。
設定できたら「セキュリティグループの設定」を押下します。
セキュリティグループを設定します。
名前を「WEB-SG」としました。
デフォルトでは、ソースが0.0.0.0/0となっており、どこからでもアクセスできると警告が出るので、ソースは自身のグローバルIPを指定しておきました。
「確認と作成」を押下します。
内容に問題がなければ、そのまま起動を押下します。
(関係ないけど、以前は作成ボタンだったようですが、バージョンが上がって起動ボタンになったようです。たしかに起動するのであれば作成ボタンより起動ボタンのほうがいいですね。細かい良い修正です。)
キーペアを作成します。
「新しいキーペアの作成」を選択し、名前を決めます。
「キーペアのダウンロード」ボタンでkeyを任意の場所に保存しておきます。
保存できたら「インスタンスの作成」を押下します。
「インスタンスの表示」を押下します。
インスタンスが起動されていることを確認します。
起動されていれば、インスタンスの状態がrunningになっているはずです。
ここまででサーバーの構築ができました。
さて、今回はテスト用でサーバを構築したので、使わない時はサーバを停止しておいたほうが無難です。
特に、AWSでは使った分だけ課金されますので、停止しておきます。
停止の方法ですが、EC2のインスタンス画面より、アクションボタンの「インスタンスの状態-停止」を実行します。
確認メッセージが出ます。
「エフェメラルストレージ上のデータが失われます」というメッセージが出ます。
あまりよくわかってませんが、特に触ってないので、そのまま「停止」ボタンを押下しました。
停止できたらステータスが「stoped」になりました。
サーバ作って起動停止できました。
次回は作ったサーバへのアクセスをやります。