APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

WEB3層のシステムをAWSで構築してみた(WordPress):セキュリティ向上

はじめに

こんにちは。クラウド事業部の山田です。

先日WordPressをホストする環境の構築を例にAWSの操作を学びました。
 WEB3層のシステムをAWSで構築してみた(WordPress):前編
 WEB3層のシステムをAWSで構築してみた(WordPress):後編
今回はその環境を流用し、セキュリティに関してより運用環境に近い構成に変更しました。

目次

構築済み環境と変更点

 ・ VPC上の2つのアベイラビリティゾーンにてそれぞれパブリックサブネットとプライベートサブネットを用意し、パブリックサブネットにはWordPressが起動するEC2インスタンス、プライベートサブネットにはマルチAZ構成のRDSインスタンスを配置します。
 ・EC2インスタンスはELBから負荷分散します。
 ・上記環境に下記変更を行いました。
   ・現行と同じEC2インスタンスをプライベートサブネットに再作成してELBの負荷分散対象として入れ替えます。
   ・暗号化を有効に指定してRDSインスタンスを再作成します。
   ・パブリックサブネットのEC2インスタンスをプライベートサブネットへの踏み台とするための設定を行います。
 ※ 今回の設定変更により一から再作成するEC2インスタンスとRDSインスタンスの冗長化は省きました。
   したがってサブネットへの設定変更などは任意の片方のアベイラビリティゾーンで実施します。
 ※ 新規作成するリソースと既存環境から流用するリソースが混在していますが、
   サービス種別により他にも新規作成または流用できるものがあります。

・前回作成の既存環境
 

・セキュリティ向上
 

構築にあたり事前確認と決定を要する事項

※ リソース名は案件ごとのネーミングルールに基づいて指定してください。
  今回は社内検証のため「syamada-<サービス略称>-<番号>」としました。

・ネットワークについて
 アベイラビリティゾーンを指定する事項については統一して構築済みの片方を指定します。

・リソース名の確認を要する既存リソース
 ・パブリックサブネットEC2のセキュリティグループ
 ・ELBのセキュリティグループ
 ・パブリックサブネットで作成したEC2のAMI
 ・サブネットグループ
  現行RDSのデータベース配置先サブネットを定義する情報。

・設定変更を要する既存リソース
 ・プライベートサブネット
  新規作成するルートテーブルを指定します。
 ・ターゲットグループ
  ELBの負荷分散対象として指定されているパブリックサブネットのEC2を除外し、
  新規作成するプライベートサブネットのEC2を指定します。

・新規作成のためにリソース名などを確定しておくサービス
 ・NAT ゲートウェイ
  プライベートサブネットのEC2インスタンスがインターネットに接続するためのゲートウェイ。
 ・ルートテーブル
  サブネット内のインスタンスがNATゲートウェイに通信するための設定。
 ・プライベートサブネットEC2用のセキュリティグループ
 ・キーペア
  新規作成するEC2にSSH接続するためのキーファイル。
 ・EC2インスタンス
  前回の設定で作成したAMIをもとにプライベートサブネットに作成します。
 ・キー
  RDSの暗号化に使用するキー。
 ・RDSインスタンス

 

環境構築

共通操作

 前回同様の下記操作でリソース作成などを進めます。
  各AWSサービス画面の表示とリソース作成
  検証環境特有の操作:作成したリソースをリソースグループに登録

1.プライベートサブネットにEC2を作成

NAT ゲートウェイ作成

 プライベートサブネットのEC2インスタンスがインターネット接続するための設定。
 1.[NAT ゲートウェイ]作成画面を開きます。
 2.下記設定値でリソースを作成します。
  ・名前: <リソース名を指定>
  ・サブネット: <パブリックサブネット>
  ・接続タイプ: パブリック
 3.作成したNATゲートウェイの画面にてNATゲートウェイのIDを控えます。
  

ルートテーブルの作成

 プライベートサブネットのEC2インスタンスがNATゲートウェイを利用するように指定する設定。
 1.[ルートテーブル]作成画面を開きます。
 2.指定したリソース名でリソースを作成します。
 3.ルートテーブルの接続先にNAT ゲートウェイを登録します。
   作成したルートテーブルの設定画面下部[ルート]右端の[ルートを編集]ボタンをクリックします。
 4.左下[ルートを追加]ボタンをクリックし、下記設定を追加したのち画面下部右端[変更を保存]ボタンをクリックします。
  ・送信先: 0.0.0.0/0
  ・ターゲット:
    NATゲートウェイ - <作成したNATゲートウェイのIDを指定>
  

プライベートサブネットにルートテーブルを登録

 1.プライベートサブネットの画面を開き、画面下部[ルートテーブル]タブを選択して右[ルートテーブルの関連付けを編集]ボタンをクリックします。
 2.[サブネットルートテーブル設定] - [ルートテーブルID]プルダウンにてルートテーブルを指定して下部右端の[保存]ボタンをクリックします。
  

プライベートサブネットEC2用のセキュリティグループ作成

 パブリックサブネットEC2からのSSH通信とELBからのHTTP通信を許可します。
 1.[セキュリティグループ]作成画面を開きます。
 2.下記設定値でリソースを作成します。
   ・セキュリティグループ名: <リソース名を指定>
   ・説明: <任意の文字列(必須)>
   ・VPC: <VPC名>
   ・インバウンドルール
    ・タイプ: SSH
    ・ソース: <パブリックサブネットのEC2のセキュリティグループを指定>
    ・タイプ: HTTP
    ・ソース: <ELBのセキュリティグループを指定>
 3.作成したセキュリティグループの画面にてセキュリティグループのIDを控えます。

キーペア作成

 1.AWSサービス[EC2]設定画面左ペインの[ネットワーク & セキュリティ]項 - [キーペア]を選択し、右ペインからリソース作成画面を開きます。
 2.下記設定値でリソースを作成します。
   設定後に[キーペアを作成]ボタンをクリックするとキーファイルのダウンロードが始まるので操作端末に保存します。
   ・キーペア名: <リソース名を指定>
   ・キーペアのタイプ: RSA
   ・プライベートキーファイル形式: .pem

EC2再作成

 1.AWSサービス[EC2]設定画面左ペインの[イメージ]項 - [AMI]を選択します。
 2.表示される[Amazon マシンイメージ (AMI)]画面右上[AMI からインスタンスを起動]ボタンをクリックします。
 3.下記設定でEC2インスタンスを作成します。
   ・名前とタグ
    名前: <リソース名を指定>
   ・アプリケーションおよび OS イメージ (Amazon マシンイメージ)
    [自分の AMI] - [自己所有]: <AMIを指定>
   ・インスタンスタイプ
    ・インスタンスタイプ: t2.micro
   ・キーペア(ログイン)
    ・キーペア名: <キーペアを指定>
   ・ネットワーク設定
    ・VPC - 必須: <VPC名>
    ・サブネット: <プライベートサブネットを指定>
    ・パブリック IP の自動割り当て: 無効化
    ・ファイアウォール(セキュリティグループ)
     既存のセキュリティグループを選択する: <プライベートサブネットEC2用のセキュリティグループを指定>

ターゲットグループの編集

 ELBの負荷分散対象を変更します。
 1.ターゲットグループの設定画面を開きます。
 2.画面下部[ターゲット]タブを選択して、登録済みのターゲットを全て選択したうえ右[登録解除]ボタンをクリックします。
 3.右[ターゲットを登録]ボタンをクリックします。
 4.画面上部[使用可能なインスタンス]項に表示されるEC2インスタンスを選択し、画面中段[保留中として以下を含める]ボタンをクリックして画面下部[ターゲットを確認]項に登録します。
 5.画面右下[保留中のターゲットの登録]ボタンをクリックします。  6.ターゲットグループの設定画面に戻り、画面下部の一覧に指定したEC2インスタンスが表示されることを確認します。
    

2.暗号化を指定したRDSインスタンスを作成

キー作成

 1.[Key Management Service (KMS)] - [カスタマー管理型のキー] の [キーの作成]ボタンをクリックします。
 2.下記設定値でリソースを作成します。
  ・キーのタイプ: 対象
  ・キーの使用法: 暗号化および復号化
  ・詳細オプション
   ・キーマテリアルオリジン: KMS-推奨
   ・リージョンごと: 単一リージョンキー
  ・エイリアス: <リソース名を指定>
  ・キーの使用法: 暗号化および復号化
  ・詳細オプション
   ・キーマテリアルオリジン: KMS-推奨
   ・リージョンごと: 単一リージョンキー

DB用セキュリティグループの再作成

 接続元としてプライベートサブネットのEC2のみを許可します。
 1.[セキュリティグループ]作成画面を開きます。
 2.下記設定値でリソースを作成します。
   ・セキュリティグループ名: <リソース名を指定>
   ・説明: <任意の文字列(必須)>
   ・VPC: <作成したVPC名>
   ・インバウンドルール
    ・タイプ: MYSQL/Aurora
    ・ソース: <プライベートサブネットEC2用のセキュリティグループを指定>

RDSインスタンスとDBの作成

 1.AWSサービス[RDS]設定画面左ペインの[データベース]を選択し、右ペインからリソース作成画面を開きます。
 2.下記設定値でリソースを作成します。
   ・データベース作成方法の選択: 標準作成
   ・エンジンのオプション
    ・エンジンのタイプ: MySQL
    ・エンジンバージョン: MySQL 8.0.35
     ※ 参考サイトで指定されたバージョンは選択できなくなっていました。
   ・テンプレート: 無料利用枠
   ・設定
    ・DB インスタンス識別子: <リソース名を指定>
    ・認証情報の設定
     ・マスターユーザー名: admin
     ・マスターパスワード: <パスワードを指定>
   ・接続
    ・Virtual Private Cloud (VPC): <VPC名を指定>
    ・DB サブネットグループ: <既存のサブネットグループを指定>
    ・パブリックアクセス: なし
    ・VPC セキュリティグループ (ファイアウォール): 既存の選択
    ・既存の VPC セキュリティグループ: <DB用セキュリティグループを指定>
    ・アベイラビリティーゾーン: <任意のアベイラビリティゾーンを指定>
   ・データベース認証
    ・データベース認証オプション: パスワード認証
   ・モニタリング
    ・拡張モニタリングの有効化: □
   ・追加設定
    ・最初のデータベース名: wordpress
    ・DBパラメータグループ: default.mysql8.0
    ・オプショングループ: default.mysql8.0
    ・バックアップ: □
    ・ログのエクスポート(各項目): □
   ・暗号化
    ・暗号を有効化: ■
    ・AWS KMSキー: <作成したキーを指定>
 3.作成したリソースの設定画面を開き、[ステータス]項が"利用可能"に変わるまで待機します。
 4.[設定]タブ - [ストレージ]項 - [暗号化]が"有効"となっていることを確認します。

WordPress初期設定

 1.作成したRDSインスタンスの設定画面を開きます。
 2.画面下部[接続とセキュリティ]のエンドポイントの文字列を全て控えます。
  

 3.作成したELBのDNS名を確認します。
   作成したELBの画面を開きます。
 4.[DNS名]の文字列を全て控えます。
  

 5.操作端末のブラウザソフトを起動し、確認したDNS名でWordPressの初期設定画面が表示されることを確認します。
 6.下記設定値を入力後に下部[送信]ボタンをクリックします。
   ・データベース名: wordpress
   ・ユーザー名: admin
   ・パスワード: <DB作成時にadminアカウントに指定したパスワード>
   ・データベースのホスト名: <確認したDBエンドポイント>
  

 7.続いて表示される[ようこそ]画面にて下記設定値を入力後に下部[WordPressをインストール]ボタンをクリックします。
   ・サイトのタイトル: <任意のサイト名>
   ・ユーザー名: <任意のサイト管理者名>
   ・パスワード: <パスワードを指定>
   ・メールアドレス: <任意のメールアドレス>
   ・検索エンジンでの表示: ■
  

 8.表示されるログイン画面にて指定したユーザー名とパスワードを入力して[ログイン]ボタンをクリックします。
  

 9.WordPressの管理画面が表示されることを確認します。
  
 

3.踏み台を介したSSH接続

パブリックサブネットのEC2を踏み台サーバーとしてプライベートサブネットのEC2に接続する手順。

SSH接続

 1.パブリックサブネットのEC2インスタンスのパブリックIPアドレスを確認します。
   パブリックサブネットのEC2インスタンスの画面を開きます。
 2.[パブリック IPv4 アドレス]の値を確認します。
  

 3.新規作成したプライベートサブネットのEC2インスタンスのプライベートIPアドレスを確認します。
   作成したパブリックサブネットのEC2インスタンスの画面を開きます。
 4.[プライベート IPv4 アドレス]の値を確認します。
  

 5.操作端末のターミナルソフトを起動し、下記設定でパブリックサブネットのEC2インスタンスにログインできることを確認します。
   ・IPアドレス: <確認した[パブリック IPv4 アドレス]の値>
   ・ユーザー名: ec2-user
   ・秘密鍵: <パブリックサブネットのEC2インスタンスに接続するためのpemファイルを指定>
 6.初回接続時にはパブリックサブネットのEC2インスタンスのホームディレクトリに、
   プライベートサブネットのEC2インスタンスに接続するためのpemファイルをコピーします。
 7.下記コマンドでプライベートサブネットEC2インスタンスにログインできることを確認します。
   ssh -i <プライベートサブネットのEC2インスタンスに接続するためのpemファイル> ec2-user@<確認した[プライベート IPv4 アドレス]の値>
  ※ 下記エラーが表示される場合は chmod 600 <pemファイル> コマンド実行ののち再試行してください。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for '<pemファイル>' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "<pemファイル>": bad permissions
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

   
以上