1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure × LAMP】Webアプリをアプリ・DB分離+Key Vaultでセキュアに構築

Posted at

1. はじめに

1-1 ご挨拶

初めまして、井村と申します。

以前Azure VM(仮想マシン)にLAMP構成で日記アプリを作成しました。今回はアプリサーバ、データベースを分離し、Azure Key Vaultにデータベースのログインユーザ、パスワードを格納する構成でアプリを動作させます。

1-2 前回記事

前回記事は以下リンクです。

【Azure × LAMP】Bicepで構築する日記Webアプリケーション

2. 構築

インフラはBicepで構築します。アプリサーバのミドルウェアのインストールはcloud-init_web.txt、データベースサーバのミドルウェアのインストールはcloud-init_db.txtを利用します。
※main.bicepと同じフォルダに格納すれば自動的に読み込まれます。

009.png

1 . 資材をダウンロードします。

2 . Azureへログインします。

Azure CLI
az login

3 . リソースグループを作成します。

Azure CLI
az group create --name rg-diary-dev --location japaneast
# az group create --name <your resource group name> --location <location>

4 . Azureリソースをデプロイします。

Azure CLI
az deployment group create --template-file main.bicep --resource-group rg-diary-dev --parameters adminPassword='P@ssw0rd1234!' dbPassword='P@ssw0rd1234!'
# az deployment group create --template-file main.bicep --resource-group <your resource group name> --parameters adminPassword='<login password for the Azure VM>' dbPassword='<login password for Database>'

以下リソースがデプロイされます。

002.png

ここでAzure Key VaultとデータベースサーバのプライベートIPアドレスを確認します。

5 . Azureリソースのデプロイ後、terratermの[SSH SCP...]等でアプリサーバのホームディレクトリにdiary-app.tar.gzをアップロードします。

6 . アプリケーションサーバ内で以下コマンドを実行します。

bash(アプリサーバ)

# アプリケーションを所定の位置に展開
sudo tar -xzvf ~/diary-app.tar.gz -C /var/www/html/

# サンプルページの削除
sudo rm /var/www/html/index.html

# config.phpの更新
# Azure key Vault名をセット
sudo sed -i "s/\$vaultName = 'kv-diary-dev-.*';/\$vaultName = 'kv-diary-dev-1fcf1';/" /var/www/html/diary-app/config.php
# データベースサーバのプライベートIPアドレスをセット
sudo sed -i "s/\$host = '.*';/\$host = '10.0.2.4';/" /var/www/html/diary-app/config.php

# Apacheサービスの再起動
sudo systemctl restart apache2

# データベースサーバへアクセス
ssh azureuser@10.0.2.4

7 . データベースサーバ内で以下コマンドを実行します。

bash(データベースサーバ)

# アプリケーションからの許可設定
sudo sed -i 's/^bind-address\s*=.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf 

# データベースサービスの再起動
sudo systemctl restart mysql

# データベースの操作
sudo mysql -u root

# 以下SQLコマンド
# rootユーザのパスワードをセット
CREATE USER 'root'@'%' IDENTIFIED BY 'P@ssw0rd1234!';

# アプリサーバからの許可設定
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

# ユーザー権限の変更を反映
FLUSH PRIVILEGES;

# データベースからログアウト
exit

# sshからログアウト(アプリサーバに戻る)
exit

8 . アプリケーションサーバ内で以下コマンドを実行します。

bash(アプリサーバ)

# データベースとテーブルの作成
mysql -h 10.0.2.4 -u root -p < /var/www/html/diary-app/db/init.sql

# データベースの確認
sudo mysql -h 10.0.2.4 -u root -p -D diary -e "SHOW DATABASES;"

# データベースの確認結果
+--------------------+
| Database           |
+--------------------+
| diary              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

9 . ブラウザからアプリケーションにアクセスします。

http://<パブリックIPアドレス>/diary-app

10 . 日記を書いてMySQLデータベースにデータが格納されるか確認します。

003.png

004.png

005.png

11 . テーブル内のデータを確認します。

bash(アプリサーバ)
# テーブルのデータを取得
mysql -h 10.0.2.4 -u root -p -D diary -e "SELECT * FROM entries;"

# テーブルのデータを取得結果
+----+-------+---------+---------------------+
| id | title | content | created_at          |
+----+-------+---------+---------------------+
|  1 | Hello | World!  | 2025-08-17 00:53:57 |
+----+-------+---------+---------------------+

無事にデータが確認されていることを確認できました。

12 . Azure Key Vaultに格納されているデータベースのログイン名、パスワードを確認します。自分のアカウントに閲覧権限がなかったため、Key Vaultのポリシーを設定して権限を付与します。

006.png

Azure CLI
# 変数宣言
myResourceGroup="rg-diary-dev"
myKeyVault="kv-diary-dev-1fcf1"
# myKeyVault="kv-diary-dev-<randomSuffix>"

# 自分のAzureアカウントIDを取得
myObjectId=$(az ad signed-in-user show --query id --output tsv)

# 自分のAzureアカウントIDを設定
az keyvault set-policy --name $myKeyVault --resource-group $myResourceGroup --object-id $myObjectId --secret-permissions get list

13 . 権限が付与されました。

007.png

ログインパスワードを確認できました。

008.png

3. 終わりに

本記事を最後まで読んで頂きましてありがとうございます。
次回はPaaS構成への移行を検討したいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?