はじめに
EC2、RDSをプライベートサブネットに配置した場合のセキュアなウェブサイト構築のメモ
一旦HTTPアクセスのみでオリジナルドメインでは無くELBのDNS名でのアクセスを想定しています。
作成の流れ
ネットワーク周り
VPC
10.0.0.0/16
インターネットゲートウェイをアタッチ。
サブネット
パブリック用:
10.0.1.0/24
10.0.2.0/24
プライベート用:
10.0.3.0/24
10.0.4.0/24
ルートテーブル
パブリックサブネット用:
ローカル向け
デフォルトルートにインターネットゲートウェイを指定
プライベートサブネット用:
ローカル向け
セキュリティグループ
・Webサーバ用
IN
ポート:22、ソース:EICのSG
ポート:80、ソース:ELBのSG
OUT
全て許可
・RDS用
IN
ポート:3306、ソース:Webサーバ用のSG
OUT
全て許可
・ELB用
IN
ポート:80、ソース:全て
OUT
全て許可
・EC2 Instance Connect Endpoint(EIC)用
OUT
ポート:22、ソース:Webサーバ用のSG
IN
無し
NATGateway
EIPを事前に取得。
パブリックサブネットに作成。
これはプライベートサブネットからwgetでwordpressのサイトにhttpアクセスやyumコマンドを実行する為に必要。
作成後、プライベートサブネットのデフォルトルートのNAT-GWにする。
EICエンドポイント作成
プライベートサブネットに作成。
これはプライベートサブネットのEC2にSSH接続する為のもの
EC2
・プライベートサブネットに作成。EIC経由で接続
・apacheインストール
・MySQLクライアントインストール
・WordPressインストール
#パッケージアップデート
sudo yum update -y
#Apacheインストール
sudo yum -y install httpd
#Apacheサービス確認、起動
sudo systemctl status httpd.service
sudo systemctl start httpd.service
sudo systemctl status httpd.service
#サービス自動起動設定確認
sudo systemctl enable httpd.service
#サービス自動起動にする。(enableと出ればOK)
sudo systemctl is-enabled httpd.service
#MySQLインストール
sudo yum -y install mysql
#amazon-linux-extras ツールを使用して、PHP 7.2 とその依存関係をインストール
$ sudo amazon-linux-extras install -y php7.2
#PHPライブラリインストール
$ sudo yum install -y php php-mbstring
#最新のWordPressファイルをダウンロードして解凍
$ cd ~
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar xzvf latest-ja.tar.gz
#解凍したファイルをApacheの見える場所へコピー
$ cd wordpress/
$ sudo cp -r * /var/www/html/
#権限を変更
$ sudo chown apache:apache /var/www/html/ -R
#サービスを再起動
$ sudo systemctl restart httpd.service
RDS
・作成後にEC2から接続し、DB、専用ユーザ作成
以下で接続可能。
$ mysql -h <RDSエンドポイント名> -u <ユーザ名> -p
Enter password: <パスワード>
接続する
$ mysql -h my-rds.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.34 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
以下コマンドでデータベース作成
MySQL [(none)]> CREATE DATABASE <データベース名> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
今回のデータベース名はwp_db
#データベース作成
MySQL [(none)]> CREATE DATABASE wp_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
#確認
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wp_db |
+--------------------+
5 rows in set (0.00 sec)
MySQL [(none)]>
ユーザ作成、権限付与
以下コマンドで作成、権限付与
#ユーザ作成
MySQL [(none)]> CREATE USER '<ユーザ名>'@'%' IDENTIFIED BY '<パスワード>';
#権限付与
MySQL [(none)]> GRANT ALL ON <データベース名>.* TO '<ユーザ名>'@'%';
#反映
MySQL [(none)]> FLUSH PRIVILEGES;
やってみる。
#ユーザ作成
MySQL [(none)]> CREATE USER 'wp_user'@'%' IDENTIFIED BY 'wp_user_password';
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]>
#権限付与
MySQL [(none)]> GRANT ALL ON wp_db.* TO 'wp_user'@'%';
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]>
#反映
MySQL [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]>
作成したユーザで接続する
$ mysql -h my-rds.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u wp_user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.34 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
ELB
・ALBを指定
・インターネット向け
・サブネットはパブリックを指定。
WordPress設定
ALBのDNS名にアクセス。
<ALBのDNS名>/wp-admin/setup-config.php
に遷移しWordPressのログイン設定が開始される。事前に設定した内容を入力してインストール。
残作業
NATGatewayは作成の時のみ必要なので削除でもOK
プライベートサブネット用RTのデフォルトルートのNAT-GWを削除
AMIにて冗長化する。