Bastion/Jumpbox を使った MySQL への接続
プライベートネットワーク内の MySQL Flexible Server へローカルから安全に接続するため、Azure Bastion と Jumpbox VM を経由した接続方法を説明します。
構成
ローカルマシン → Azure Bastion (gx-bastion) → Jumpbox VM (gx-jumpbox) → MySQL Flexible Server
用語説明
- Azure Bastion: Azure のマネージド踏み台サービス。ブラウザや CLI 経由で VM へ安全に SSH/RDP 接続できる。
- Jumpbox: プライベートサブネット内の作業用 VM。Bastion 経由でアクセスし、内部リソース(DB 等)への接続やポートフォワードを行う。
前提条件
- SSH 鍵の取得(1Password): Jumpbox へのアクセスに使用する SSH 秘密鍵は、1Password の Production 保管庫に保存されています。1Password で Production 保管庫を開く → gx_jumpbox_ed25519 アイテムを検索 → 秘密鍵をダウンロードして
~/.ssh/gx_jumpbox_ed25519として保存 →chmod 600 ~/.ssh/gx_jumpbox_ed25519で鍵のパーミッションを設定
1Password CLI を使う場合: op read 'op://Production/gx-jumpbox SSH Key/private key' > ~/.ssh/gx_jumpbox_ed25519 → chmod 600 ~/.ssh/gx_jumpbox_ed25519
- Azure CLI のインストールと認証:
brew install azure-cli(未インストールの場合)、az login --tenant generativex.onmicrosoft.com、az account set --subscription e3143cb2-4707-4614-bbba-3ddeb66669c2
接続手順
ステップ 1: Bastion トンネルの開始
ターミナル 1 で以下を実行し、トンネルを維持します(このターミナルは開いたままにしてください)。
az network bastion tunnel \
--name gx-bastion \
--resource-group shared-rg \
--target-resource-id "/subscriptions/e3143cb2-4707-4614-bbba-3ddeb66669c2/resourceGroups/shared-rg/providers/Microsoft.Compute/virtualMachines/gx-jumpbox" \
--resource-port 22 \
--port 50022
ステップ 2: SSH ポートフォワードの設定
ターミナル 2 で以下を実行し、ローカルの 3307 番ポートを MySQL サーバーの 3306 番にフォワードします。
ssh -i ~/.ssh/gx_jumpbox_ed25519 \
-L 3307:mysql-pj-japan-dev.mysql.database.azure.com:3306 \
azureuser@127.0.0.1 \
-p 50022
パラメータ説明:
-i ~/.ssh/gx_jumpbox_ed25519: 秘密鍵のパス-L 3307:...: ローカルの 3307 番をリモート MySQL の 3306 番へフォワードazureuser@127.0.0.1: Jumpbox のユーザー名と Bastion トンネル経由のアドレス-p 50022: Bastion トンネルのポート番号
注意: この SSH 接続も維持したままにしてください。
ステップ 3: MySQL への接続
方法 A: コマンドラインから接続
ターミナル 3 で以下を実行:
mysql -h 127.0.0.1 -P 3307 -u dbadmin -p
パスワードを入力すると接続できます。
方法 B: Sequel Ace などの GUI ツールから接続
接続設定:
| 項目 | 値 |
|---|---|
| Host | 127.0.0.1 |
| Username | dbadmin |
| Password | (管理者パスワード) |
| Database | (省略可) |
| Port | 3307 |
重要: ポート番号は 3307 です(デフォルトの 3306 ではありません)。
トラブルシューティング
エラー: "Defined port is currently unavailable"
ポート 50022 が既に使用中です。別のポート番号を使用してください。
# 例: 50023番を使用
az network bastion tunnel \
--name gx-bastion \
--resource-group shared-rg \
--target-resource-id "..." \
--resource-port 22 \
--port 50023
# SSH接続時もポート番号を変更
ssh -i ~/.ssh/gx_jumpbox_ed25519 -L 3307:... azureuser@127.0.0.1 -p 50023
エラー: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"
Jumpbox VM を作り直した場合、SSH ホストキーが変わるため警告が出ます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
解決方法: known_hosts から古いエントリを削除してください。
ssh-keygen -R "[127.0.0.1]:50022"
別のポート番号を使用している場合は、それに合わせて変更してください:
ssh-keygen -R "[127.0.0.1]:50023"
エラー: "Permission denied (publickey)"
SSH 鍵が正しく設定されていません。
-
terraform.tfvars に登録されている公開鍵を確認:
cd terraform/environments/shared
grep jumpbox_ssh_public_key terraform.tfvars -
ローカルの公開鍵と一致するか確認:
cat ~/.ssh/gx_jumpbox_ed25519.pub -
一致しない場合、terraform apply で再適用:
terraform apply
エラー: "Can't connect to MySQL server on '127.0.0.1:3307'"
- Bastion トンネル(ターミナル 1)が起動しているか確認
- SSH ポートフォワード(ターミナル 2)が接続されているか確認
- Jumpbox から直接 MySQL へ接続できるか確認:
# ターミナル2のSSH接続内で実行
mysql -h mysql-pj-japan-dev.mysql.database.azure.com -u dbadmin -p
Bastion SKU の確認
トンネル機能を使用するには、Bastion SKU が Standard 以上である必要があります。
az network bastion show \
--name gx-bastion \
--resource-group shared-rg \
--query "sku.name" -o tsv
Standard と表示されれば OK です。Basic の場合はアップグレードが必要です。
代替方法: Portal 経由の接続
CLI を使わず、Azure Portal からも接続できます。
- Azure Portal にアクセス
gx-jumpboxVM を検索して開く- 左メニューから「接続」→「Bastion」を選択
- ユーザー名(
azureuser)と SSH 秘密鍵を指定して接続 - ブラウザ上のターミナルで直接
mysqlコマンドを実行
参考情報
- Azure Bastion ドキュメント
- SSH ポートフォワード
- ネットワークアーキテクチャ - ネットワーク構成の詳細