こんにちは、ロリポップ・ムームードメイン事業部 第三事業開発チーム 兼 技術部 技術基盤チームプリンシパルエンジニアのじっぱー(@buty4649)です。 最近はもっぱらELDEN RING NIGHTREIGNだけをプレイしていて他のゲームや趣味に手を付けられない今日この頃です。
さて、私が携わっているロリポップ!ゼロトラストリンク(以下、ZTL)は、離れた場所にある機器同士をVPN機器なしで直接つなぐサービスです。接続したい機器に専用のクライアントアプリケーションをインストールし、GoogleアカウントやApple Account、MicrosoftアカウントといったサービスのアカウントでSSOすれば、すぐに利用できます。また、機器同士は暗号化された専用のネットワークを利用して通信するため盗聴や改ざんの心配はありません。 2026年9月28日には、企業向けの上位プランプレミアムプランの提供を始めました。アクセスルールで使えるグループ数の上限が300に広がり、部署や役割ごとに細かくアクセスを制御できます。10月15日からは、どの機器がいつどこへ接続したかを記録するフローログもプレミアムプラン向けに提供する予定です。あわせて、Microsoft Entra IDとのSSOとSCIMの連携、管理操作ログ、MDMを使った社用デバイスの接続先制限といった、組織向けの管理機能も追加しました。詳しくはプレミアムプランの提供開始と組織向け管理機能の拡充についてをご覧ください。
この記事では、ZTLの社内での活用事例として、パブリックエンドポイントを付けていないAmazon RDS(以下、RDS)へ、手元のPCから安全に接続する方法を紹介します。
RDSにどうやってつなぐか?
RDSは、インターネットから直接届かないようにプライベートサブネットへ置くのが基本です。一方で、データの調査やメンテナンスのために、開発者が手元のPCからRDSへつなぎたい場面はよくあります。手元のPCからRDSへつなぐ方法としては、次のようなものが考えられます。
- VPC内で起動したAWS CloudShellから接続する
- EC2などに踏み台サーバを置き、SSHトンネルを張る
- IP制限等を行ったうえでパブリックエンドポイントを付けて接続する
AWS CloudShellを使うのは環境を用意する必要がないためお手軽なのですが、ブラウザ操作になるためやや不便な場面もあります(Ctrl-Wを押してしまい何度タブを閉じてしまったか…)。また、踏み台サーバやパブリックエンドポイントを付与する場合、IP制限などが必要です。しかしながら、許可したIPアドレスの管理は煩雑です。 そこで、ZTLを利用することでこれらの管理をせずに手軽にRDSにアクセスする環境を用意します。
ZTLを利用してRDSに接続する
ZTLを使う場合は、RDSと同じVPCに中継用のEC2インスタンスを1台置き、中継用のEC2インスタンスと手元のPCをそれぞれ同じZTLのネットワークに参加させます。すると、手元のPCから中継用のEC2インスタンスを経由してRDSへ届くようになります。RDSにパブリックエンドポイントは要らず、中継用のEC2インスタンスにもインバウンドのポートを開ける必要はありません。構成は次のとおりです。

中継用のEC2インスタンスにはZTLのLinux版クライアント(ztld)を入れ、自身の3306番ポートへの通信をRDSへ転送するよう設定します。手元のPCにはZTLのクライアントを入れ、MySQLクライアントからは中継用のEC2インスタンスの3306番ポートを接続先に指定します。
事前準備
設定を始める前に手元のPCにはZTLのクライアントアプリケーションをインストールし、ZTLのネットワークに接続しておきます。詳しい手順はアプリの設定方法をご覧ください。 また、中継用のEC2インスタンスをRDSと同じVPCのプライベートサブネットに作成します。この記事ではOSはAmazon Linux 2023を使います。RDSに接続するためのデータベースユーザーとエンドポイントも準備します。これについてはこの記事では割愛いたします。
中継用EC2インスタンスの設定
まず、ZTLのクライアントアプリケーションをインストールします。Linux版クライアントはダウンロードページから.deb、.rpm、.tar.gzの形式で入手できます。Amazon Linux 2023には.rpmを入れます。パッケージを入れると、デーモンのztldと、それを操作するCLIのztlctlが入り、lolipopztl.serviceとしてsystemdに登録されます。
curl -fLO https://pkgs.ztna.lolipop.jp/linux/lolipopztl_latest_linux_amd64.rpm
sudo dnf install -y ./lolipopztl_latest_linux_amd64.rpm
次に、ztlctl loginでコントローラーに認証します。--hostnameには、ZTLのネットワーク上で識別するための名前を指定できます。--hostnameは省略でき、省略するとOSのホスト名がそのまま使われます。
$ sudo ztlctl login --hostname ztl-rds-relay
To sign in, use a web browser to open the following URL
and enter the code shown below.
URL: https://ztna.lolipop.jp/client/device
Code: XXXX-XXXX
Hostname: ip-xx-xx-xx-xx.ap-northeast-1.compute.internal
OS: Amazon Linux 2023.12.20260930
The approval screen will show the hostname / OS above. Verify
they match before approving.
The code expires in 900 seconds.
⠏ Waiting for approval in the browser...
表示されたURLを手元のPCのブラウザで開き、コードを入力します。承認画面にはOSのホスト名とOSが表示されるので、中継用のEC2インスタンスのものであることを確かめてから承認します。--hostnameで指定した名前は、承認後にZTLのネットワーク上の名前として反映されます。承認すると、そのままZTLのネットワークに参加します。参加したら、ztlctl setでポート転送を設定します。--port-forwardは<ローカルポート>:<転送先アドレス>:<転送先ポート>の形式で指定します。
$ sudo ztlctl set --port-forward 3306:mydb.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306
Port forwarding: 100.64.0.66:3306 -> mydb.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306
転送先にはRDSのエンドポイント名をそのまま指定できます。
最後に、ztlctl statusで接続状態を確認します。hostnameに表示されている名前が、手元のPCからの接続先になります。
$ sudo ztlctl status
state: Connected
ip: 100.64.0.xx
hostname: ztl-rds-relay.example-com.internal
login: user@example.com
version: 1.2.0
(以下省略)
セキュリティグループは、RDS側で中継用のEC2インスタンスのセキュリティグループからの3306番ポートへの通信を許可します。中継用のEC2インスタンスのセキュリティグループには、インバウンドの許可を追加する必要はありません。
Tips:認証トークンでログインする
ブラウザでの認証の代わりに、認証トークンを用いてログインもできます。サーバの構築を自動化したい場合に便利です。なお、認証トークンでの接続に対応しているのはLinux版クライアントのみです。
認証トークンは、ZTLのダッシュボードの設定タブにある認証トークンから発行します。発行されたztl-auth-で始まるトークンを、--tokenオプションで渡します。--hostnameは、ブラウザで認証する場合と同じく省略できます。
sudo ztlctl login --token ztl-auth-xxxxxxxxxxxx --hostname ztl-rds-relay
認証が完了すると、ブラウザで承認したときと同じく自動でネットワークに参加します。--tokenの代わりに、環境変数ZTL_AUTH_TOKENでトークンを渡すこともできます。認証トークンはパスワードと同じく、第三者に知られないよう管理してください。詳しい手順は認証トークンを使いネットワークへ接続するにあります。
手元のPCから接続する
手元のPCがZTLのネットワークに参加していれば、中継用のEC2インスタンスにはztlctl statusで確認した名前を使って接続できます。あとは、MySQLクライアントの接続先にこの名前を指定し、事前に用意したデータベースユーザーでログインするだけです。
mysql -h ztl-rds-relay.example-com.internal -P 3306 -u <データベースユーザー> -p
まとめ
RDSにパブリックエンドポイントを付けずに、手元のPCからZTL経由で接続する構成を紹介しました。RDSと同じVPCに中継用のEC2インスタンスを1台置き、ZTLのポート転送でRDSへ通信を流しています。RDSにも中継用のEC2インスタンスにもインターネットからの窓口はなく、接続できる機器はZTLのダッシュボードで管理できます。
RDSに限らず、プライベートサブネットにあるDBや社内システムへ手元からつなぎたい場面で応用できるので、試してみてください。