メインコンテンツまでスキップ

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 等)への接続やポートフォワードを行う。

前提条件

  1. 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_ed25519chmod 600 ~/.ssh/gx_jumpbox_ed25519

  1. Azure CLI のインストールと認証: brew install azure-cli(未インストールの場合)、az login --tenant generativex.onmicrosoft.comaz 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 ツールから接続

接続設定:

項目
Host127.0.0.1
Usernamedbadmin
Password(管理者パスワード)
Database(省略可)
Port3307

重要: ポート番号は 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 鍵が正しく設定されていません。

  1. terraform.tfvars に登録されている公開鍵を確認:

    cd terraform/environments/shared
    grep jumpbox_ssh_public_key terraform.tfvars
  2. ローカルの公開鍵と一致するか確認:

    cat ~/.ssh/gx_jumpbox_ed25519.pub
  3. 一致しない場合、terraform apply で再適用:

    terraform apply

エラー: "Can't connect to MySQL server on '127.0.0.1:3307'"

  1. Bastion トンネル(ターミナル 1)が起動しているか確認
  2. SSH ポートフォワード(ターミナル 2)が接続されているか確認
  3. 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 からも接続できます。

  1. Azure Portal にアクセス
  2. gx-jumpbox VM を検索して開く
  3. 左メニューから「接続」→「Bastion」を選択
  4. ユーザー名(azureuser)と SSH 秘密鍵を指定して接続
  5. ブラウザ上のターミナルで直接 mysql コマンドを実行

参考情報