1/99スタックエンジニアの適当記録

適当なことを書きます。関西で転職したいです。

AWSを触る ~アクセス制御~

前回はプライベート領域にDBサーバを構築しました。

roku28632.hatenablog.com

 

今回は、パブリック領域のWebサーバ、プライベートのDBサーバ、自宅のPC、これらのアクセスを適切に設定していきます。

 

WebサーバーからDBサーバーへのICMP通信

まず、現在ICMP通信が可能か確認してみます。

WebサーバーからDBサーバーへpingを飛ばしてみます。

pingを飛ばすためにWebサーバーへSSHでログインします。

前回DNS設定したので、FQDNでアクセスしてみます。

f:id:roku28632:20200504120129p:plain

Teratermの詳しいやり方はこちら

roku28632.hatenablog.com

ちなみに、このTeratermの記事を書いたときは意識せずにやってましたが、接続ユーザの「ec2-user」はEC2で作ったサーバーにデフォルトで割り当てられるデフォルトユーザのようです。

本来こういうデフォルトユーザーはセキュリティ的に無効化しておいて、別のユーザーを作っておくべきだと思います。

 

接続できたらpingを飛ばします。

まったく返答がありませんので、これを返答されるように設定していきます。

f:id:roku28632:20200504122017p:plain

 

セキュリティグループの画面を開いて、作ってあるDBサーバーを選択し、「インバウンドのルールの編集」を押下します。

f:id:roku28632:20200504123204p:plain

 

「ルールの追加」を押下し、タイプに「すべてのICMP」を選択します。

また、送信元は「任意の場所」を指定しておきます。

設定できたら「ルールの保存」を押下します。

f:id:roku28632:20200504123822p:plain

 

設定できたので、再度pingを飛ばしてみます。

今度は戻りがありました。

f:id:roku28632:20200504125120p:plain

 

外部からWebサーバーへのICMP通信

次はWebサーバーへの通信です。

Webサーバーはもともと、外部からアクセスできるパブリックセグメントに設置していました。

そのため、自宅のクライアントから疎通できるはずです。

しかし、実際やってみると、DBサーバーと同じくpingの応答がありません。

セキュリティグループを見てみるとわかりますが、HTTPとSSHしか設定していないためです。

よって、こちらにもICMPを許可します。

やり方はDBサーバーのセキュリティグループと同じです。

しかし、こちらはパブリック環境のため念の為、アクセス元を自宅のIPアドレスに設定しておきました。

設定前は飛ばなかったpingが設定後は飛ぶようになりました。

f:id:roku28632:20200504130729p:plain

 

WebサーバーからDBサーバーへのSSH接続

次はDBサーバーへSSH接続するための設定をします。

DBサーバーはプライベート領域に構成したため、外部からはSSH接続できません。

そのため、構築したWebサーバーを踏み台にしてアクセスするようにします。

この構成はよくある構成で、いわゆるDMZに置いてある外部からアクセス可能なサーバーを経由して内部のサーバーへアクセスするという仕組みです。

また、SSH接続するためには、キーペアの設定が必要です。

AWSのキーペアは、公開鍵暗号方式です。

EC2にサーバーを構成するときに、キーペアの設定があったかと思います。

(ちなみにこれです。)

f:id:roku28632:20200504202529p:plain

 

 この段階で構成サーバーに公開鍵を保持しているわけなので、あとはダウンロードしてある秘密鍵をアクセス元に設定します。

今回はWebサーバーがアクセスするので、Webサーバーへ秘密鍵を保持させます。

Teraterm秘密鍵をWebサーバーへ送ります。

Webサーバーへ秘密鍵のファイルを送るのにはTeratermのSCP機能を利用します。

TeratermでWebサーバーへ接続した後、ファイルから「SSH SCP」を選択します。

f:id:roku28632:20200505151419p:plain

 

上ペインの方で、fromに秘密キーを指定し、Toには「~/」でWebサーバーのホームディレクトリを指定して「Send」を押下します。

f:id:roku28632:20200505151756p:plain

 

ファイルが遅れたか確認しておきます。

lsで配下のファイルを出力します。

*.pemファイルの存在が確認できます。

f:id:roku28632:20200505152656p:plain

 

次に、不正にアクセスされることを回避するために、秘密キーファイル*.pemファイルの権限を変更しておきます。

「chmod 400 my-key.pem」コマンドを実行します。

これでこのファイルは「所有者のみ読み取り権限」が付与できます。

実行できたらls -l コマンドで設定内容を確認します。

-r--------」と表示されているので、readのみの設定になっています。

f:id:roku28632:20200505153709p:plain

 

これで秘密鍵の設定は完了したので、接続してみます。

今やろうとしていることは、WebサーバーからDBサーバーへのssh接続です。

ssh -i my-key.pem ec2-user@10.0.2.10」

接続できました。

f:id:roku28632:20200505154142p:plain

 

これでアクセス制御の設定も完了です。

 

 

 

AWSを触る ~プライベートサブネットとDBサーバの構築~

前回は名前解決をやりました。

roku28632.hatenablog.com

 

今回はプライベートサブネットの構築とDBサーバの構築をやっていきます。

今まではパブリックサブネットを構築して、そこにwebサーバーを立てていました。

プライベートに構築することで、よりセキュアな構成にすることができます。

 

プライベートサブネットの作成

サブネット画面より、「サブネットの作成」を押下します。

f:id:roku28632:20200503163532p:plain

 

サブネット名は「プライベートサブネット」にしました。

VPCは作っておいたものを選択し、アベイラビリティーゾーンは先に作っていたパブリックサブネットと同じものを選択します。

パブリックサブネットは下記で確認できます。

f:id:roku28632:20200503164938p:plain

 

CIDRブロックには「10.0.2.0/24」を入力します。

入力できたら「作成」ボタンを押下します。

f:id:roku28632:20200503165114p:plain

 

「閉じる」ボタンを押下します。f:id:roku28632:20200503165218p:plain

 

DBサーバー構築

EC2ののインスタンス画面を開きます。

インスタンスの作成」を開きます。

f:id:roku28632:20200503170343p:plain

 

AMIとして、「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択します。

f:id:roku28632:20200503171104p:plain

 

無料のt2.microを選択します。

「次のステップ」を押下します。

f:id:roku28632:20200503171126p:plain

 

インスタンスの詳細の設定します。

ネットワークに作ってあるVPCを選択します。

サブネットに先程作った「プライベートサブネット」を選択します。

ネットワークインターフェースのプライマリIPに「10.0.2.10」を入力します。

入力できたら「次のステップ」を押下します。

f:id:roku28632:20200503174014p:plain

f:id:roku28632:20200503174030p:plain

 

ストレージはそのまま「次のステップ」を押下します。

f:id:roku28632:20200503174457p:plain

 

タグを追加します。

キーに「Name」、値に「DBサーバー」を入力し、「次のステップ」を押下します。

f:id:roku28632:20200503174746p:plain

 

セキュリティグループの設定を入力します。

セキュリティグループ名を「DB-SG」としました。

「ルールの追加」ボタンを押下し、タイプを「MYSQL」、「ソース」に自宅のIPアドレスを入力して「確認と作成」を押下します。

f:id:roku28632:20200503175301p:plain

 

内容に問題がなければ「起動」ボタンを押下します。

f:id:roku28632:20200503180053p:plain

 

キーはWebサーバーの時に作成したキーを利用しました。

インスタンス作成」ボタンを押下します。

f:id:roku28632:20200503180417p:plain

 

これで、サーバーができました。

インスタンスの表示を押下します。

f:id:roku28632:20200503180620p:plain

 

今回はプライベートのみ公開するように作成しました。
下ペインの設定をみるとパブリックに情報はなく、プライベートにのみ設定されています。
これで、外部からアクセス不可能なセキュアなサーバーが作成できました。

f:id:roku28632:20200503181212p:plain

 

これでプライベートサブネットの作成とDBサーバーの構築ができました。
次回はwebサーバーとdbサーバーへのアクセスをより詳細に設定していく予定です。

AWSを触る ~名前解決~

今回は名前解決をやります。

前回はこちら。

roku28632.hatenablog.com

 

前回最後にApacheにアクセスしました。

その時のアクセス先はEC2に立てたWebサーバーのパブリックIPアドレスでした。

これを、「ドメイン名」を利用してアクセスできるようにします。

https://www.google.com/」←ドメイン名はこんな感じのやつです。

 

VPCの画面で作ってあるVPCを選択し、アクションの「ホスト名の編集」を選択する。

f:id:roku28632:20200503125207p:plain

 

DNSホスト名の有効化にチェックを入れて保存を押下します。

f:id:roku28632:20200503125144p:plain

 

閉じるを押下します。

f:id:roku28632:20200503125310p:plain

 

インスタンス画面を開いて、下ペインにある「パブリックDNS(IPv4)」の文字列を確認します。

これが、アクセスできる名前です。

矢印のところに「クリップボードにコピーする」のコピー機能があるため、コピーしておきます。

f:id:roku28632:20200503130625p:plain

 

コピーしたURLを貼り付けてアクセスします。

Amazon Linux AMI Test Page」の画面が表示されれば成功です。

f:id:roku28632:20200503132241p:plain

 

 

 

 

AWSを触る ~ファイアーウォールの設定~

前回EC2に用意したwebサーバにApacheを導入しました。

roku28632.hatenablog.com

 

今回は、その導入したApacheで立てたwebサーバーへアクセスするために、ファイアーウォールの設定を変更していきます。

 

ポートの開放

awsでセキュリティグループの画面を開きます。

前に作ってある「WEB-SG」を選択し、下ペインの「インバウンドルール」タブを開き、「インバウンドのルールの編集」を押下します。

f:id:roku28632:20200502204219p:plain

 

「ルールを追加する」を押下し、ルールを入力します。

タイプに「カスタムTCP」、ポート範囲に「80」、ソースに「自分のPC」を入力し、「ルールの保存」ボタンを押下します。

f:id:roku28632:20200502205559p:plain

 

アクセス確認

これでApacheへアクセスできるようになったはずです。

確認します。

EC2へ構築したwebサーバのパブリックIPアドレスをブラウゼに入力します。

Amazon Linux AMI Test Page」というページが表示されたら成功です。

f:id:roku28632:20200502205825p:plain

 

この記事は以上です。

次は名前解決をやります。

 

AWSを触る ~作ったサーバへApacheを入れる~

前回はteratermの接続確認をやりました。

roku28632.hatenablog.com

 

今回はEC2のサーバーにApacheを導入します。

インスタンスSSHで接続します。

接続方法は前回の記事を参照してください。

接続しました。

f:id:roku28632:20200502120822p:plain

 

Apacheインストール

yumでインストールします。

「sudo yum -y install httpd

インストールできたら「Complete!」が表示されます。

f:id:roku28632:20200502121036p:plain

 

Apache起動

「sudo service httpd start」

f:id:roku28632:20200502121650p:plain

 

自動起動設定

サーバー再起動時にApache自動起動されるように設定します。

「sudo chkconfig httpd on」

f:id:roku28632:20200502122004p:plain

 

設定できたら確認します。

「sudo chkconfig --list httpd

3がonになっていたら自動起動設定できています。

f:id:roku28632:20200502122320p:plain

 

Apacheプロセスの確認

Apacheのプロセスの状態を確認します。

「ps -ax | grep httpd

httpデーモンが確認できているのでApacheが起動されていることが確認できました。

f:id:roku28632:20200502122753p:plain

 

ポート状況の確認

httpデーモンのポート状況を確認します。

「sudo lsof -i -n -P | grep httpd

80番ポートでListenしていることが確認できました。

f:id:roku28632:20200502123322p:plain

 

これでApacheの導入も完了です。

しかし、VPC側でファイアーウォールがポートをフィルタしているので、このままではApacheへアクセスすることはできません。

 

次回にファイアーウォールのポート開放をやっていきます。

 

AWSを触る ~作ったサーバへのSSH接続~

前回はサーバーの構築をやりました。

roku28632.hatenablog.com

 

今回は前回作ったサーバーへの接続を試してみようと思っています。

自身のクライアントがWindowsなので、接続クライアントとしてはTeratermを利用します。

まず、Teratermの導入から始めていきます。

 

Teratermの導入

まず、導入用の資材をダウンロードしてきます。

自分は、「「Tera Term」定番のターミナルエミュレーター - 窓の杜」からダウンロードしてきました。

f:id:roku28632:20200502105423p:plain


ダウンロードできたらexeを実行します。

f:id:roku28632:20200502105853p:plain


特殊なことはしないので、全部デフォルトのままです。

f:id:roku28632:20200502110659p:plain

f:id:roku28632:20200502110711p:plain

f:id:roku28632:20200502110723p:plain

f:id:roku28632:20200502110740p:plain

f:id:roku28632:20200502110752p:plain

f:id:roku28632:20200502110804p:plain

f:id:roku28632:20200502110817p:plain

f:id:roku28632:20200502110831p:plain

f:id:roku28632:20200502110844p:plain

 

導入できたらデスクトップにパソコンマークのアイコンができました。

f:id:roku28632:20200502110857p:plain

 

起動して、awsで構築したサーバーのパブリックIPアドレスを指定します。

前回の記事では「自動割り当てパブリックIP」を「有効化」したので、起動のたびにIPアドレスは変動しています。

IPアドレスインスタンスの画面から確認できると思います。

 

サービスはSSHを選択し、「OK」を押下します。

f:id:roku28632:20200502112552p:plain

f:id:roku28632:20200502112605p:plain

 

セキュリティ警告が表示されますが、そのまま「続行」を押下します。

f:id:roku28632:20200502113446p:plain

 

ユーザ名に任意の文字列を入力します。

RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、秘密鍵にサーバ構築時にダウンロードしたkeyを指定します。

「OK」を押下します。

f:id:roku28632:20200502114026p:plain

 

接続できたらこんな感じになります。

f:id:roku28632:20200502114412p:plain

 

これで接続確認もOKですね。

 

AWSを触る ~サーバーの構築~

前回はVPC領域の構成をやりました。

今回はサーバーの構築をやっていきます。

 

前回はこちら

roku28632.hatenablog.com

 

AWSの仮想サーバーのサービスはEC2、Elastic Compute Cloudと呼ばれます。

ここの仮想サーバーのことを「インスタンス」と呼びます。

 

では、インスタンスを作成していきます。

AWSマネジメントコンソールの「EC2」を開きます。

f:id:roku28632:20200430103428p:plain

 

インスタンス画面を開き、「インスタンスの作成」を押下します。

f:id:roku28632:20200430104013p:plain

 

awsでAMIと呼ばれるイメージファイルを選択します。

今回は画面2番目のAmazon Linuxを選びました。

f:id:roku28632:20200430104906p:plain

 

インスタンスタイプを選びます。

当然無料枠の「t2.micro」を選びます。

インスタンスの詳細の設定」を押下します。

f:id:roku28632:20200430105236p:plain

 

インスタンスの詳細を設定します。

ネットワークに前回作っておいたVPCを選択します。

また、自動割り当てパブリックIPを「有効化」にして、下部のプライマリIPを「10.0.1.10」に設定します。

設定できたら「ストレージの追加」を押下します。

f:id:roku28632:20200430110150p:plain

f:id:roku28632:20200430110259p:plain

 

AWSでは仮想ハードディスクをEBS、Elastci Block Storeといいます。

デフォルトのまま8GBのEBSを設定しますので、そのまま「タグの追加」を押下します。

f:id:roku28632:20200430110903p:plain

 

インスタンスに名前をつけます。

「タグの追加」を押下します。

キーを「Name」とし、値を「Webサーバー」とします。

設定できたら「セキュリティグループの設定」を押下します。

f:id:roku28632:20200430111526p:plain

 

セキュリティグループを設定します。

名前を「WEB-SG」としました。

デフォルトでは、ソースが0.0.0.0/0となっており、どこからでもアクセスできると警告が出るので、ソースは自身のグローバルIPを指定しておきました。

「確認と作成」を押下します。

f:id:roku28632:20200430114637p:plain


内容に問題がなければ、そのまま起動を押下します。

(関係ないけど、以前は作成ボタンだったようですが、バージョンが上がって起動ボタンになったようです。たしかに起動するのであれば作成ボタンより起動ボタンのほうがいいですね。細かい良い修正です。)

f:id:roku28632:20200430115251p:plain

 

キーペアを作成します。

「新しいキーペアの作成」を選択し、名前を決めます。

「キーペアのダウンロード」ボタンでkeyを任意の場所に保存しておきます。

保存できたら「インスタンスの作成を押下します。

f:id:roku28632:20200430120831p:plain

 

インスタンスの表示」を押下します。

f:id:roku28632:20200430121259p:plain

 

インスタンスが起動されていることを確認します。

起動されていれば、インスタンスの状態がrunningになっているはずです。

f:id:roku28632:20200430122203p:plain

 

ここまででサーバーの構築ができました。
さて、今回はテスト用でサーバを構築したので、使わない時はサーバを停止しておいたほうが無難です。
特に、AWSでは使った分だけ課金されますので、停止しておきます。
停止の方法ですが、EC2のインスタンス画面より、アクションボタンの「インスタンスの状態-停止」を実行します。

f:id:roku28632:20200430124207p:plain

 

確認メッセージが出ます。
エフェメラルストレージ上のデータが失われます」というメッセージが出ます。
あまりよくわかってませんが、特に触ってないので、そのまま「停止」ボタンを押下しました。

f:id:roku28632:20200430124502p:plain

 

停止できたらステータスが「stoped」になりました。

f:id:roku28632:20200430124811p:plain

 

サーバ作って起動停止できました。
次回は作ったサーバへのアクセスをやります。