4️⃣
Azure VMにNeo4jをセットアップして、IP制限+SSLでNeo4j Browserに安全にアクセスする方法
はじめに
Azure上にNeo4jを構築する際、VMを作成してインストールしますが
- 社内ネットワークや特定IPからのみアクセスしたい
- Neo4j BrowserをHTTPS(SSL)で安全に使いたい
最低限のセキュリティ要件として上記があります。
本記事では、
Azure VM + Neo4j + IPアクセス制限 + SSL(HTTPS)でNeo4j Browserに接続する構成
の設定手順を記載します。
想定構成
- Azure VM(Linux / Ubuntu)
- Neo4j Community or Enterprise
- Azure Network Security Group(NSG)によるIP制限
- Neo4jのSSL設定(Bolt + HTTPS)
- ブラウザから https://<VMのFQDN>:7473 で Neo4j Browserにアクセス
VM作成
Azure Portalから仮想マシンを作成します。


最小構成気味で作成します。
pemファイルをダウンロードします。
VM接続
chmod 600 xxx.pem
ssh -i xxx.pem azureuser@パブリックIP
VM設定
Neo4jをVMにインストール
sudo apt update
sudo apt install -y openjdk-17-jre
wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
echo 'deb https://debian.neo4j.com stable latest' | sudo tee /etc/apt/sources.list.d/neo4j.list
sudo apt update
sudo apt install -y neo4j
sudo systemctl start neo4j
sudo systemctl status neo4j
Neo4jのListen設定
sudo vi /etc/neo4j/neo4j.conf
設定
# 全インターフェースで待ち受け
server.default_listen_address=0.0.0.0
# HTTPS(Neo4j Browser)
server.https.enabled=true
server.https.listen_address=:7473
# Bolt
server.bolt.enabled=true
server.bolt.listen_address=:7687
Neo4j.confを再設定
# Https SSL configuration
dbms.ssl.policy.https.enabled=true
dbms.ssl.policy.https.base_directory=certificates/https
dbms.ssl.policy.https.private_key=private.key
dbms.ssl.policy.https.public_certificate=public.crt
sudo systemctl restart neo4j
Azure NSGでIPアクセス制限を設定

Azureポータルで、Neo4jがインストールされているVMのNSGを開きます。
「受信セキュリティ規則」を選択します。
「追加」をクリックし、以下のルールを追加します。
ソース: Any または特定のIP(セキュリティのため、あなたの会社のIPなどを推奨)
ソースポート範囲: *
宛先: Any
サービス: Custom
宛先ポート範囲: 7687, 7473
プロトコル: TCP
アクション: Allow
優先度: 1000など(他のルールより優先される値)
名前: AllowNeo4
FQDNを設定

Azure Portal → Public IP → 「DNS 名ラベル」を設定します。
証明書を作成します(自己証明書)
# 例: FQDNを変えて使ってください
FQDN="myneo4j-jp.eastasia.cloudapp.azure.com"
sudo mkdir -p /var/lib/neo4j/certificates/https
cd /var/lib/neo4j/certificates/https
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout private.key \
-out public.crt \
-subj "/CN=${FQDN}" \
-addext "subjectAltName=DNS:${FQDN}"
sudo chown -R neo4j:neo4j /var/lib/neo4j/certificates
sudo chmod 600 /var/lib/neo4j/certificates/https/private.key
sslの設定
sudo vi /etc/neo4j/neo4j.conf
dbms.ssl.policy.https.enabled=true
dbms.ssl.policy.https.base_directory=certificates/https
dbms.ssl.policy.https.private_key=private.key
dbms.ssl.policy.https.public_certificate=public.crt
server.default_advertised_address=myneo4j-jp.eastasia.cloudapp.azure.com
server.https.advertised_address=:7473
server.bolt.advertised_address=:7687
sudo systemctl restart neo4j
ブラウザでアクセス

保護されていない通信と出ますが、自己証明書でsslでアクセスできていそうです。
bolt+sでアクセスするための設定
そのまま、DBへアクセスしようとしたら、websocketのエラーで接続できませんでした。
sudo vi /etc/neo4j/neo4j.conf
server.bolt.tls_level=REQUIRED
# Bolt SSL configuration
dbms.ssl.policy.bolt.enabled=true
dbms.ssl.policy.bolt.base_directory=/var/lib/neo4j/certificates/bolt
dbms.ssl.policy.bolt.private_key=private.key
dbms.ssl.policy.bolt.public_certificate=public.crt
dbms.ssl.policy.bolt.client_auth=NONE
sudo mkdir -p /var/lib/neo4j/certificates/bolt
# public.crt / private.key をここに置く(ファイル名を合わせる)
sudo chown -R neo4j:neo4j /var/lib/neo4j/certificates
sudo chmod 700 /var/lib/neo4j/certificates/bolt
sudo chmod 600 /var/lib/neo4j/certificates/bolt/private.key
sudo chmod 644 /var/lib/neo4j/certificates/bolt/public.crt
# “neo4jユーザーで読めるか”を確認
sudo -u neo4j ls -la /var/lib/neo4j/certificates/bolt
sudo -u neo4j head -n 1 /var/lib/neo4j/certificates/bolt/public.crt
sudo systemctl restart neo4j
上記設定を入れて、無事neo4jブラウザーからシステムにneo4j+s:xxxx:7687でアクセスできました。

neo4jのパスワードの変更
初期パスワードがpasswordとかになっているので、下記のようにパスワードを変更します。
sudo systemctl stop neo4j
sudo neo4j-admin dbms set-initial-password '何かパスワード'
sudo systemctl start neo4j
まとめ
本記事では、下記の手順を記載しました。
- Azure VM上でNeo4jを構築
- IP制限で外部アクセスを制御
- SSL(HTTPS)でNeo4j Browserを安全に利用
※VMの停止起動設定は忘れずに入れましょう。
Discussion