0
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?

DB接続時の認証・通信経路の違いを整理してみた

0
Posted at

DB接続について調べていると、

  • SSHトンネル
  • 踏み台サーバー
  • パスワード認証
  • 秘密鍵認証

など様々な用語が出てきます。

最初は「SSHトンネルと踏み台サーバーって何が違うの?」、「秘密鍵はDBの認証なの?」と混乱したので、ChatGPT に整理してもらいました。


最初に結論

DB接続は大きく分けて

  • 通信経路(どうやってDBまで到達するか)
  • DB認証(DBへログインする方法)

の2つを考える必要があります。

PC
 │
 │ ①通信経路
 │
 ├──直接接続
 ├──SSHトンネル
 ├──VPN
 └──踏み台サーバー経由
 │
 │ ②DB認証
 │
 ├──ユーザー名 + パスワード
 ├──SSL証明書
 ├──IAM認証
 ├──Kerberos
 └──OS認証
 │
 ▼
Database

ポイントは

  • SSHトンネル = 通信経路
  • 秘密鍵 = SSH認証
  • DBパスワード = DB認証

ということです。


通信経路

① 直接接続

一番シンプルな構成です。

PC
 │
 │ TCP
 │
 ▼
Database

接続情報は

  • Host
  • Port
  • Database
  • User
  • Password

だけです。

開発環境ではよく見かけます。


② SSHトンネル

DBをインターネットへ公開せず、

SSHだけ公開します。

PC
 │
 │ SSH
 ▼
踏み台サーバー
 │
 ▼
Database

実際には

localhost:5432

へ接続すると

localhost:5432
      ↓
SSHトンネル
      ↓
踏み台サーバー
      ↓
Database

へ転送されます。

DBeaverやDataGripなどのDBクライアントでは

「Use SSH Tunnel」

という設定があるのはこのためです。


③ VPN

会社のネットワークへVPN接続してからDBへ接続する方法です。

PC
 │
VPN
 │
 ▼
社内ネットワーク
 │
 ▼
Database

VPN接続後は

192.168.x.x

などの社内IPが割り当てられ、

そのままDBへ接続できます。


踏み台サーバー(Bastion)とは?

ここが一番混乱しました。

実は

**踏み台サーバーは通信方式ではなく、「中継用のサーバー」**です。

PC
 │
SSH
 │
 ▼
踏み台サーバー
 │
 ▼
Database

役割としては

  • 外部からSSHできる
  • DBが存在するネットワークへアクセスできる

という中継地点になります。


SSHトンネルと踏み台サーバーの違い

最初は

  • SSHトンネル
  • 踏み台サーバー

は別物だと思っていました。

実際には

SSHトンネルは踏み台サーバーを利用する通信方法の一つです。

            踏み台サーバー
                  │
      ┌───────────┴───────────┐
      │                       │
SSHトンネルを張る       SSHログインだけする
(DBeaverなど)          (踏み台でpsql実行)

例えば

パターン① SSHトンネル

PC
 │
SSHトンネル
 │
 ▼
踏み台
 │
 ▼
Database

PCから直接DBへ接続しているように見えますが、

実際にはSSHが通信を転送しています。


パターン② 踏み台へSSHログイン

PC
 │
SSH
 ▼
踏み台
 │
 └── psql

踏み台サーバーへログインし、

psql
mysql

などを実行してDBへ接続します。

こちらはSSHトンネルではありません。


SSH認証

SSH自体にも認証があります。

パスワード認証

ssh user@server
Password:

簡単ですが、

総当たり攻撃に弱いため本番環境ではあまり使われません。


公開鍵認証(秘密鍵)

現在はこちらが主流です。

PC

id_rsa
(秘密鍵)

↓

Server

authorized_keys
(公開鍵)

サーバーは公開鍵を保持し、

PCは秘密鍵を保持します。

一致すればSSH接続できます。

メリット

  • パスワード不要
  • 非常に安全
  • 本番環境で一般的

DB認証

SSHとは別に、

DB自身にもログインする必要があります。

代表的なのは

ユーザー名 + パスワード

User
Password

最も一般的です。


SSL証明書認証

client.crt
client.key
ca.crt

などの証明書を使います。

金融系などでよく使われます。


IAM認証

AWSのRDSなどで利用できます。

一時的な認証トークンを発行して接続するため、

DBパスワードを管理する必要がありません。


Kerberos認証

WindowsのActive Directoryと連携し、

WindowsへログインしていればDBへもログインできます。


OS認証

Linuxユーザーと連携して認証します。

例えば

sudo -u postgres psql

などです。


一番混乱しやすいポイント

例えばDBeaverで接続する場合

PC
 │
SSH
 │
 ▼
踏み台
 │
 ▼
Database

認証は実は2回あります。

① SSHログイン

  • パスワード
  • または秘密鍵

② DBログイン

  • DBユーザー
  • DBパスワード

つまり

SSH秘密鍵とDBパスワードは全く別物です。


実務で一番よく見る構成

個人的に一番イメージしやすかったのがこれです。

PC
 │
 │ SSH(秘密鍵認証)
 ▼
踏み台サーバー
 │
 │ SSHトンネル
 ▼
PostgreSQL
 │
 │ DBユーザー + パスワード
 ▼
ログイン

つまり

  • SSH秘密鍵でサーバーへ入る
  • SSHトンネルで通信する
  • DBユーザー・パスワードでDBへログインする

という3段階になっています。


まとめ

項目 役割
SSHトンネル DBまでの通信経路
踏み台サーバー 通信を中継するサーバー
パスワード認証 SSHへログインする方法の一つ
公開鍵認証(秘密鍵) SSHへログインする方法の一つ
DBユーザー・パスワード DBへログインする認証
VPN 社内ネットワークへ接続する通信経路

最初は「SSHトンネル」と「踏み台サーバー」を別物だと思っていましたが、

  • 踏み台サーバー = 中継用のサーバー
  • SSHトンネル = そのサーバーを利用して通信する方法

という関係を理解すると、全体像がかなりスッキリしました。

0
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
0
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?