AWS LightsailのWordPressのApacheでIPアドレスによるアクセス制限

 本記事は、AWS LightsailのWordPressにて、IPアドレスによるアクセス制限をApache HTTP Serverの設定ファイル『httpd.conf』で行う手順のメモになります。

 IPアドレス制限は、アクセス元のIPアドレスによってアクセスを許可/拒否することをいいます。全てのアクセス元からの通信を拒否してから指定したIPアドレスからのみ接続を許可するパターン(ホワイトリスト方式)と、原則全てのアクセス元からの通信を許可しつつ、指定したIPアドレスからの接続は拒否するパターン(ブラックリスト方式)に分けられます。今回は後者のパターンで行います。

 今回はIP制限をApache HTTP Serverで実現します。Apache HTTP Server(以下、Apacheと表記)はWebサーバソフトウェアで、クライアントからの要求をアプリケーションに渡し、アプリケーションからの応答をクライアントに返す役割を担います。このWebサーバにて設定ファイルを編集し、IPアドレス制限を実現します。


こちらのサイト様によるとLightsailのWordPressに含まれるApacheは2023年7月現在でバージョン2.4となり、Requireディレクティブを使うのが良いようですが、本サイトでは2.2の方式(Allow,Denyディレクティブ)で行っています。

※ 本記事ではApache HTTP ServerをApacheと表記していますが、ApacheはHTTP Server以外にも様々なソフトウェアが存在するのでご注意ください。


◆ LightsailのWordPressのApacheでIPアドレス制限 (2023年7月時点)

1.
AWS Lightsail管理コンソールにアクセスし、対象インスタンスのコンソールアイコンをクリックします。

2.
以下のようにコピーコマンド “cp” を管理者で実行 “sudo” して、Apacheの設定ファイル『httpd.conf』のコピーを取得してバックアップとします(バックアップファイル名は任意で構いません)。
 sudo cp -ip /opt/bitnami/apache/conf/httpd.conf /opt/bitnami/apache/conf/httpd.conf_[日付].bak
 (sudo cp [オプション] [コピー元] [コピー先])
 ※ 以下、オプションの説明
  -i : コピー先が既に存在する場合、上書きするかどうかを確認する。
  -p : コピー元のパーミッション、所有者、タイムスタンプを保持する。

3.
以下の “vi” コマンドを管理者で実行 “sudo” して、Apacheの設定ファイル『httpd.conf』を標準テキストエディタで開きます。
 sudo vi /opt/bitnami/apache/conf/httpd.conf
 (sudo vi [開きたいファイル])

4.
『httpd.conf』が開くので、末尾まで移動します。

5.
末尾まで移動したら、キーボードの[i]キーを押してInsertモードに入ります。

6.
以下の内容を挿入します。
今回はWordPressに対してIPアクセス制限をかけるので、対象ディレクトリは ”/opt/bitnami/wordpress” となります。
基本的にはどのIPアドレスからもアクセスを受け付けつつ、一部IPアドレスからのアクセスは拒否するような流れの記載となります。

7.
記載が完了したらキーボードの[esc]キーを押してInsertモードを終了し、 ”:wq” と入力することで編集した内容を保存してテキストエディタを終了します。

8.
apachectl configtest” コマンドを管理者で実行 “sudo” して、Apacheの設定ファイル『httpd.conf』の構文に問題がないかのチェックを行います。
”Syntax OK” と出れば構文エラーはありません。
 sudo apachectl configtest

9.
apachectl graceful” コマンドを管理者で実行 “sudo” して、Apacheの設定ファイルを再読み込みすることで、設定ファイルにきさいされたIPアクセス制限を有効化します。
gracefulはそれまでにApacheに来たリクエストを処理してから再読み込みをするので、Webサイトへのアクセスへの影響をなくすことができます。
本コマンド実行後にもWordPressへのアクセスが正常にできれば問題ございません、お疲れさまでした。
 sudo apachectl graceful


◆ 参考文献

Apacheでip制限をする方法|httpd.confとhtaccessでのやり方を解説する (code-bug.net)
【 cp 】コマンド――ファイルをコピーする:Linux基本コマンドTips(17) – @IT (itmedia.co.jp)
viコマンドについて詳しくまとめました 【Linuxコマンド集】 (eng-entrance.com)
Apacheのrestartやgraceful、stopなどの違い | ⬢ Appirits spirits

AWS Lightsailのインスタンス手動バックアップ

 本記事は、AWS Lightsail管理コンソール上からLightsailインスタンスのバックアップを手動で取得する手順のメモとなります。

 Lightsailインスタンスは作成時に指定した時刻にて自動でバックアップが取得され、7日間保存されます。不測の事態に対するバックアップとしてはこの自動バックアップでも十分かもしれませんが、インスタンス上のアプリケーションの設定を変更する場合など、作業前に手動でバックアップしたい場合はこちらの手順を参考にしていただければと思います(私も本ブログのベースとなっているWordPressのバージョンアップを行う際に、本手順でバックアップを取得しています)。

 なおバックアップからのリストアに関し、既存インスタンスをバックアップで上書きするようなことはできず、新規インスタンスを作成する、別リージョンにコピーする、Amazon EC2(IaaSの仮想マシンサービス)にエクスポートする、の中からリストア方法を選択することとなります。このリストア手順については記事にしておりませんのでご了承ください。


◆ Lightsailインスタンス手動バックアップ手順 (2023年8月時点)

1.
AWS Lightsail管理コンソールにアクセスし、対象のインスタンス名をクリックします。

2.
「スナップショット」タブを選択し、手動スナップショットの下にある「+ スナップショットの作成」をクリックします。

3.
スナップショット名はデフォルトで「インスタンス名+ランダム数字」となっているかと思います。任意のスナップショット名に編集して、「作成」をクリックします。

4.
『スナップショット作成中』となるのでしばらく待ちます。

5.
スナップショットが作成されると、スナップショット取得時刻が表示されます。スナップショットに対して可能なアクションを「…」をクリックして確認してみます。

6.
スナップショットに対するアクションとしては本記事冒頭で記載したように「新規インスタンスの作成」「別リージョンへのコピー」「Amazon EC2(IaaSの仮想マシンサービス)にエクスポート」が選択できます。またスナップショットが不要になった際は削除もこちらで行えます。

恐らくリストア時は ①バックアップから新規にインスタンスを作成、 ② Lightsail用CDNのオリジナル元を①で作成した新規インスタンスに変更(※)、 ③ 動作確認後、古いインスタンスを削除 といった流れになるかと思います)。

※) Lightsail用CDNを利用している場合。利用していない場合に②は 静的IPアドレスの付け替えとDNSの書き換えになるかと思います。

以上が手動バックアップの手順となります、お疲れさまでした。

AWS LightsailでWordPress起動 (4:WordPressでSSL対応の設定)

 本手順では、AWS Lightsailで動作しているWordPressにて、SSLに対応するための設定を行う手順です。SSL証明書の設定は、Lightsail用CDNと合わせてこちらの記事で設定していますが、WordPress側でSSL通信に対応しないと、たとえばWordPressの管理者ログイン画面が以下のような画面となってしまいます。

SSL通信においても画面を正常に表示させるために、WordPressの設定ファイルにてSSL通信に対応する設定を行います。こちらのサイト様の手順に則っています。


◆ LightsailのWordPressでSSL対応設定 (2023年2月時点)

1.
AWS Lightsail管理コンソールにアクセスします。Lightsailインスタンスのターミナルアイコンをクリックします。

2.
ターミナルが開きます。以下のコマンドを実行し、カレントディレクトリをWordPressの設定ファイルがあるディレクトリに移動します。

cd /bitnami/wordpress/

3.
続いて以下のコマンドを実行し、所有グループへWordPressの設定ファイル (wp-config.php) に対する書き込み権限を与えます。

chmod g+w wp-config.php

4.
No.3の手順で書き込み権限が与えられたことを確認するには、以下コマンドを実行します。

ls -l wp-config.php

実行結果の最初にて、「-rw-rw—-」となっていればよいです。最初の「-」はファイルを表し、2~4文字目がファイル所有者、5~7文字目がファイル所有グループ、8~10文字目がその他グループが持つ権限を表します。「r」が読み取り、「w」が書き込み、ここにはありませんが「x」が実行を表します。そのためこの場合は、ファイル所有者とファイル所有グループに読み取りと書き込みの権限があることになります。

5.
それでは設定ファイルに対して、SSL設定の追記・変更を行います。ファイル内容の編集のため下記コマンドを入力し、Vimテキストエディタで設定ファイルをを開きます。

vim /bitnami/wordpress/wp-config.php

6.
まずは赤枠内の部分を探します。Vimテキストエディタでは [/] を押すことで検索モードに入ることができます。「/{検索したい文字列}」で対象個所を見つけたら [i] を押してインサートモードに入ります。『http』となっている部分を『https』に変更したら、 [esc] キーを押してインサートモードを抜けます。

7.
続いて、以下赤枠部分を追記します。追記には [i] を押してインサートモードに入ります。追記が完了したら [esc] キーを押してインサートモードを抜け、「:wq」と入力して [Enter] キーを押すことで変更を保存してVimテキストエディタを終了します。

8.
設定ファイルを変更したら、設定読み込みのためにWordPressの入り口となるWebサーバの再起動を、以下のコマンドで行います。

sudo /opt/bitnami/ctlscript.sh restart apache

実行結果に「Restarted apache」と出たら、WordPressを開きなおしてみてください。本記事冒頭のような画面ではなく正常にWordPressが表示されたら成功です。お疲れさまでした。


◆ 参考文献

Lightsail WordPressを常時SSL(https)にする方法 | たこぼ〜log (takoboolog.com)
【 chmod 】 ファイルやディレクトリのアクセス権を変更する | 日経クロステック(xTECH) (nikkei.com)
Linuxの権限確認と変更(chmod)(超初心者向け) – Qiita
【初心者必見】最強エディタVimの使い方/コマンド30種まとめ | 侍エンジニアブログ (sejuku.net)

AWS LightsailでWordPress起動 (3:Lightsail用CDN設定、SSL設定、Route53設定変更)

 本記事は、WordPressが設定されたLightsailにContent Delivery Network(CDN)を設定し、そこにSSL証明書を追加、Route53によるドメイン名の名前解決先をCDNに変更します。

 今まで行った内容は以下の通りです。
LightsailでWordPressの起動からIPアドレスでのアクセス
Route53で新規.comドメインの取得
Route53で取得した.comドメインをLightsailに割り当て

 SSLを設定するにはApplication Load BalancerやAWS CloudFrontが必要になりますが、今回はLightsail用CDNを利用します。Lightsail用CDNはCloudFrontと異なりAWS WAFを有効化できないようなので、AWS WAFによるセキュリティ対策を行いたい場合はCloudFrontを設定いただければと思います(そのうちやりたい)。

※ 設定実施から記事化まで時間を空けてしまったので手順がうろ覚えの部分がございます。ご了承ください。


◆ Lightsail用CDN・SSL設定 (2023年2月時点)

1.
AWS Lightsail用管理コンソールを開きます。AWSマネジメントコンソールから「Lightsail」サービスを選択すると本ページにアクセスできます。
「Networking」をクリックし、「Create distribution」をクリックします。

2.
CDNの配信元となるオリジナルの選択を、「Choose an origin」プルダウンをクリックして選択します。

3.
WordPressの設定されたLightsailインスタンスを選択すると、WordPress向けのキャッシュ配信設定があるようで、これを有効化するのに「Yes, apply」をクリックします。

4.
Lightsailインスタンスを選択します。Lightsailインスタンスに固定IPアドレスを割り当てていた場合は、こちらもoriginの一覧に表示されます。

5.
No.3にてWordPress向けのキャッシュ配信を「Yes, apply」としたので、こちらで「Best for WordPress」になっているようです。

6.
CDNサービスのプランを選択します。月当たりのデータ転送量の上限に応じた金額となっており、超過すると別途追加料金が発生します。ここでは50GB/月(初年度無料、次年度以降 $2.50 USD/月)を選択します。

7.
CDNサービスの管理コンソール上での名前を入力し、「Create distribution」をクリックします。

8.
作成したLightsail用CDNに対してSSLの設定を行います。作成したLightsail用CDNのページにて「Custom domains」をクリックします。

9.
画面を下にスクロールし、「I understand, continue」をクリックします。

10.
「Create certificate」をクリックします。

11.
作成するSSL証明書のLightsail管理コンソール上での名前を入力し、「Continue」をクリックします。

12.
Route53で予め取得したドメインを入力します。ここでは「kageroulab.com」となります。またwww付きの「www.kageroulab.com」も追加し、「Create certificate」をクリックします。

13.
「Continue」をクリックします。

14.
「Attach certificate(1 available)」をクリックします。その下にて、作成したSSL証明書を選択し、「Attach」をクリックします。

15.
「I understand」をクリックします。

16.
AWS Lightsail管理コンソールのトップから「Domains & DNS」をクリックし、今回編集するDNS zoneの名前リンクをクリックします。

17.
「Assignments」をクリックします。
以前の記事で行った、ドメイン名にWordPressのLightsailインスタンスに割り当てた固定IPアドレスが紐づいているので、これを削除します。その後「+ Add assignment」をクリックします。

18.
ドメイン名について取得したドメイン(サブドメインを含まない)を選択し、リソースの指定で作成したLightsail用CDNを選択し、「Save」をクリックします。

19.
Domain assignmentsの一覧に、設定したメインのドメインと作成したLightsail用CDNが紐づいた行が表示されることを確認します。

20.
画面を下にスクロールし、「+ Add assignment」をクリックして、サブドメインを選択、「www.{取得したドメイン}」を指定してLightsail用CDNを紐づけに指定し、「Assign」をクリックします。

21.
メインのドメインとLightsail用CDNの紐づけの下に、「www.{ドメイン名}」とLightsail用CDNの紐づけの行が追加されたことを確認します。

22.
AWS Lightsail管理コンソールのトップに戻り、「Networking」をクリックします。作成したLightsail用CDNの名前リンクをクリックします。

23.
「Custom domains」をクリックします。

24.
画面を下にスクロールし、作成したSSL証明書の「Validation details」を開きます。メインドメインと「www.{ドメイン名}」のそれぞれについて、『Name』『Value』をコピーし、メモ帳にペーストしておきます。後ほどの手順でCNAMEレコードの登録に利用します。

25.
AWS Lightsail管理コンソールのトップに戻り、「Domains & DNS」をクリックします。DNS zonesの、今回設定したドメイン名リンクをクリックします。

26.
「DNS records」をクリックし、「+ Add record」をクリックします。

27.
追加するレコードに「CNAME record」を選択し、No.24で確認したメインドメインの『Name』『Value』の組み合わせをレコードとして登録します。各テキストボックスに入力後、「Save」をクリックします。

28.
No.27と同様に、「www.{ドメイン名}」についての『Name』『Value』をCNAMEレコードとして登録します。

29.
最終的に、メインドメインと「www.{ドメイン名}」それぞれに対するAレコードが1つずつと、CNAMEレコードが1つずつの計4レコードが登録されたことを確認します。

これでAWS Lightsail管理コンソール上の設定は完了です、お疲れさまでした。
ただしWordPress側でSSL通信に対応するための設定が別途必要となりますので、そちらは次回の記事で解説いたします。

AWS LightsailでWordPress起動 (2:Route53で取得したドメインをLightsailに割り当て)

 本記事は、WordPressが設定されたLightsailに対して、Route53で新規に取得した.comドメインを割り当てて、ドメイン名でWordPressにアクセスすることを行います。

 WordPressが設定されたLightsailの構築はこちらの記事で行っています。こちらの記事ではWordPressへのアクセスは、Lightsailに割り当てられた動的IPアドレスで行っています。

 また、Route53での.comドメインの新規取得はこちらの記事で行っています。この記事で構築したLightsailに固定IPアドレスを割り当て、取得した.comドメインについてLightsailの固定IPアドレスを対応させることで、Lightsail上のWordPressにドメイン名でアクセスができます。

※ 設定実施から記事化まで時間を空けてしまったので手順がうろ覚えの部分がございます。ご了承ください。


◆ AWS Lightsailへのドメイン割り当て手順 (2023年2月時点)

1.
AWS Lightsail用管理コンソールを開きます。AWSマネジメントコンソールから「Lightsail」サービスを選択すると本ページにアクセスできます。
「Domains & DNS」をクリックします。

2.
画面を下にスクロール、Domain configuration内のDomain sourceについて「Use a domain that is registered with Amazon Route 53」を選択します。
Route53で取得したドメインが表示されますので、利用したいドメインを選択して最下部の「Create DNS zone」をクリックします。

3.
画面が切り替わり、選択したドメインでのDNS zoneが作成されます。「Go to domain」ボタンをクリックします。

4.
DNSの設定が行われます。

5.
『Assignments』タブを開き、「+ Add assignment」をクリックします。
Select a domain nameにてメインのドメイン名を利用するのか、特定のサブドメインを利用するのか、すべてのサブドメインを利用するのかを選択します。ここではメインドメイン(kageroulab.com)を選択します。
Select a resourceにてドメインを対応させるリソースを選択します。ここではすでに立てていたWordPress設定済みのLightsailインスタンスを選択します。
Select the addressにて「Attach static IP」のリンクをクリックします。

6.
固定IPアドレスをAWS Lightsailコンソール上で管理する上での名前を入力し、「Create and attach」を入力します。

7.
固定IPアドレスの作成が完了したら「Continue」ボタンをクリック後、元の画面で「Assign」をクリックします。

8.
Assignmentの一覧に選択したドメイン及び対応する固定IPアドレス、Lightsailインスタンスが表示されたことを確認します。

9.
『DNS records』タブを開き、A RECORDS欄に選択したドメインと対応する固定IPアドレスが表示されることを確認します。

10.
AWS Lightsail管理コンソールのHome画面に戻り、『Instances』タブを開きます。
作成した固定IPアドレスが設定対象のLightsailインスタンスに割り当てられていることを確認します。

11.

Microsoft EdgeやGoogle Chromeのブラウザにて

http://{設定したドメイン名}

を入力してアクセスします。以下の通りページがでれば成功です。お疲れさまでした!
次回はSSLの有効化と、それに伴うLightsail用のCDN(Content Derivery Network)の設定を行います。

AWS LightsailでWordPress起動 (1:Lightsail起動からIPアドレスでのアクセスまで)

 本記事では、あらかじめWordPressが設定されたAWS Lightsailを起動して、IPアドレス指定によるアクセスまでを行います。

 AWS LightsailはAWSが提供する仮想のプライベートサーバー(VPS)です。仮想サーバーサービスのEC2とは異なり、従量課金ではなく月額固定の料金で利用できます。WordPressやLAMP、Redmineなどがあらかじめ設定されたインスタンスを利用することもできます。
 今回はAWSの東京リージョン・アベイラビリティゾーンA上に、WordPressがあらかじめ設定されたLightsailを起動し、IPアドレスを指定してアクセスするところまでを行います。図示すると以下のような構成になると思います。


◆ AWS LightsailでのWordPress起動手順 (2023年1月時点)

1.
① AWSマネジメントコンソールの右上でリージョンを選択します。
② 検索ボックスで「lightsail」と検索します。
③ 表示されるサービス「Lightsail」をクリックします。

2.
「Let’s get started」をクリックします。

3.
右下でLightsail用コンソールの表示言語を変更できます。
※ 以降の手順も参考画像はEnglishのままでした、ご了承ください。

4.
画面を下にスクロールし、Select a platform欄にて利用するOSを選択します。今回は「Linux/Unix」を選択しました。

5.
画面を下にスクロールし、Select a blueprint欄にて「Apps + OS」を選択し、アプリについては「WordPress」を選択します。

6.
黄緑色背景の部分の文章はWordPressを構成するBitnami・Automatticのライセンスに関する説明書きのようです。
Optional欄の「+ Add launch script」を開いてみます。

7.
先の「+ Add launch script」をクリックして展開された① 欄にシェルスクリプトを記載することで、インスタンスの初回起動時にシェルスクリプトが実行されるようです。インスタンス起動時に必ず入れる設定があるようなプロジェクトでは、インスタンス複製時に役に立つと思われます。今回は特に何も入れないこととします。
② 「Change SSH key pair」をクリックしてみます。

8.
① インスタンスに接続する際のSSH Keyをデフォルトのものから本画面で新たに作成するもの、または自分であらかじめ用意したものへ変更できるようです。今回はDefault keyのままとします。
② 「Enable Automatic Snapshots」のチェックを入れてみます。

9.
スナップショットの取得時間とタイムゾーンを選択します。毎日指定した時刻にスナップショットが取得され、最大7日間保存されます。

10.
金額とスペックを参考に、インスタンスプランを選択します。今回は最も安い「$3.5」のプランを選択します。

11.
① インスタンスの名前を設定し、作成するインスタンス数を入力します。
② 「+ Add key-only tags」をクリックすることで、マネジメントコンソール上でのソートに利用可能なキー値のみのタグを追加できます。また「+ Add key-value tag」をクリックすることで、金額請求にてプロジェクトごとの金額を出したり、アクセス制御に利用可能なキーと値のタグを追加できます。

12.
① Key-only tagsの入力欄、Key-value tagsの入力欄は以下のようになります。Key-value tags の方は複数のKey-valueタグを追加できます。
② 「Create instance」ボタンをクリックします。

13.
インスタンスが作成されます。「Pending」となっている間は起動中ですのでしばらく待ちます。

14.
① 「Running」となれば起動しており、インスタンスにアクセス可能な状態となります。
② コンソールアイコンをクリックするとコンソールが開き、インスタンスを操作できます。
③ グローバルIPアドレスが表示されます。本アドレスでインスタンス(今回はWordPress)にアクセスができます。なおこのIPアドレスは動的IPアドレスとなり、Lightsailインスタンスを再起動するたびにアドレスが変わります。固定IPアドレスの割り当ては、こちらの記事にて行います。

15.
WordPressの管理ページにアクセスするための初期パスワードを確認します。手順No.14の②でコンソールアイコンをクリックすると以下のコンソール画面が開きます。こちらにて以下コマンドを実行します。

cat $HOME/bitnami_application_password

実行して表示される文字列がWordPress管理ページのパスワードとなります。

16.
Microsoft EdgeやGoogle Chromeのブラウザにて

http://{LightsailのグローバルIPアドレス}

を入力してアクセスします。以下のようなページが表示されるはずです。

17.
Microsoft EdgeやGoogle Chromeのブラウザにて

http://{LightsailのグローバルIPアドレス}/wp-login.php

を入力してアクセスします。以下のようなページがでれば成功です。Username of Email Address欄に「user」、Password欄に手順No.15で確認したパスワードを入力し、「Log In」ボタンをクリックします。

18.
以下の通り管理ページが表示されれば成功です、お疲れさまでした!
次回はドメインを取得、DNS設定を行いドメイン名でWordPressにアクセスできるように設定を実施していきましょう。