AWS

AWSのEC2で無料でhttps化する方法(ELBなし)

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

AWS の EC2 で LetsEncrypt を使って https 化させるときの方法についてまとめました。

はじめに

世の中の EC2 で無料で https 化する記事は

Elastic Load Balancing

という、月約2000円のサービスや

Amazon CloudFront

という、従量課金制のサービスを使ったものばかりだったので、AWS のドキュメントにも書かれている

Let’s Encrypt

という無料で SSL 証明書を発行してくれているサービスを使って実装したいと思います。

前提条件

  1. Amazon Linux2
  2. Elastic IP で固定 IP を設定済み
  3. 独自ドメインで http での公開が完了している
  4. httpd でアパッチを起動している状態

関連記事 PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

参考文献

公式ドキュメント

実装方法

Certbot というツールを使用して実装します。

Lets Encrypt は3ヶ月間という有効期限をもった SSL 証明書の発行をしてくれます。

EC2 のインスタンスに ssh 接続します

秘密鍵.pem ファイルがあるディレクトリで

$ ssh -i "*****.pem" ec2-user@12.345.678.910

EC2 に入ったら、コマンドで必要な準備をします。

sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
sudo yum-config-manager --enable epel*
sudo yum repolist all

上記のコマンドで EPEL というリポジトリパッケージを EC2 にインストールします。

4つめのコマンドは repolist が入ったかを確認するためのコマンドです。

アパッチの設定ファイルの編集をする前にバックアップを取る

アパッチの編集ファイルは初期状態だと、

/etc/httpd/conf/httpd.conf

ここにあります。

設定ファイルを編集するときには必ずバックアップを取りましょう。

cd /etc/httpd/conf
sudo cp httpd.conf httpd_bak.text
ls

cp コマンドで、バックアップファイルをコピーしておきます。

cp はコピーのこと。1つめのファイルを2つ目のファイル名でコピーするというコマンドです。

ls でリストを表示、コピーされてるか確認しましょう。

アパッチの設定ファイルの編集をする

では編集していきます。

vim コマンドを使って、ファイルを編集していきます。

sudo vim httpd.conf

(Listen 80 の下に)

<VirtualHost *:80>
DocumentRoot "/var/www/html/<<Laraveのプロジェクト名>>/public"
ServerName "取得したドメイン"
ServerAlias "www.取得したドメイン"
</VirtualHost>

を追記します。

DocumentRoot には、Laravel プロジェクトの public フォルダを指定します。

これは環境によって変わるので、コピペでは動かないので注意してください。

DocumentRoot "/var/www/html/<<Laraveのプロジェクト名>>/public"

ServerName や ServerAlias はそれぞれの環境に合わせて書き換えてください.

ServerName "<<取得したドメイン>>"
ServerAlias "www.<<取得したドメイン>>"

アパッチを再起動して、エラーが出ないか確認する

コマンドで、

sudo systemctl restart httpd

エラーが出る場合は間違っているので、一旦元のファイルに戻しましょう。

//エラーが出たら戻す。
sudo cp httpd_bak.text httpd.conf

バックアップファイルを編集してミスったファイルに上書きして戻すことができます。

Certbot のインストールをする

sudo yum install -y certbot python2-certbot-apache

依存パッケージも一緒にインストールしてます。

起動します。

sudo certbot

あとは質問に答えるだけで実装されます。

質問の内容は下記の通り。

① メールアドレスは?  → 自分のメールアドレス入れる

② 規約に同意しますか?  →   A

③ メーリングリストに登録しますか?  →   Y or N

④ どっちの名前で https する?  →  空欄で Enter

⑤HTTP クエリを HTTPS にリダイレクトするどうかの確認  →   HTTP 経由でサーバーに接続するには、「1」、HTTPS 経由の暗号化接続のみ受け入れる場合は、「2」(自分は2にしました)

⑥Congratulations! You have successfully  とでたら成功です。

以下のコマンドでアパッチを再起動してエラーがでないか確認してみましょう。

sudo systemctl restart httpd

セキュリティグループのインバウンドを設定する

最後に、セキュリティグループの設定をします。

このインバウンド設定をしないと、URL を叩いても更新マークがクルクル回っていっこうに表示されません。

インバウンドの設定に443ポートを追加します。

https inbound

この設定が完了したら、実際に URL を叩いて表示できるかどうか、確認してみてください。

自動更新の設定

今実装したのは無料の3ヶ月が有効期限の証明書です。

3ヶ月後に自動的に新しい証明書を取りに行く設定をします。

sudo vim /etc/crontab

下の方に追記

39 1,13 * * * root certbot renew --no-self-upgrade

これで OK です。

sudo systemctl restart crond

再起動して反映させます。

この設定で自動更新が完了しました。

AWS のドキュメントによれば、このあとテストと強化を推奨しているので、ぜひやってみてください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html#ssl_test

【関連記事】

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

まとめ

以上です!

慣れない作業な上に、微妙に間違えたらエラーでるのでトラウマになる人もいると思います。

作業前のバックアップは必ずとっておいて損はないと思います。