Bytebase導入記：コミュニティプランでのRDS接続の壁 - SSHトンネルとSecrets Manager認証の制約


現在、EC2インスタンスにポートフォワードを設定し、そこを経由してRDSにアクセスしていますが、毎回ポートフォワードの設定を行うのが煩わしいと感じています。そこで、より簡単にRDSにアクセスできる方法を模索する中で、データベーススキーマの変更管理ツールとして注目されている [Bytebase](https://www.bytebase.com/) の導入を検討しました。

Bytebaseにはクラウド版とセルフホスト版の2つの導入方法があり、それぞれに異なるメリットとデメリットがあります。

## **クラウド版のメリット:**

* 導入が容易で、アカウントを作成するだけですぐに利用を開始できる。
* インフラの運用・管理の負担が少なく、Bytebaseの利用に集中できる。
* 常に最新バージョンを利用でき、メンテナンスの手間が不要。

## **クラウド版のデメリット:**

* 利用量に応じて料金が発生し、長期的に見るとコストがかかる可能性がある。
* カスタマイズの自由度が低く、提供される機能に限定される。
* データはBytebaseの管理する環境に保存されるため、セキュリティポリシーによっては制約を受ける可能性がある。

## **セルフホスト版のメリット:**

* データ管理を完全にコントロールでき、セキュリティポリシーに柔軟に対応できる。
* 自社のニーズに合わせて設定や機能をカスタマイズできる。
* 長期的に見ると、クラウド版よりもコストを抑えられる可能性がある。

## **セルフホスト版のデメリット:**

* 導入に手間と時間がかかり、サーバーの準備やソフトウェアのインストールが必要。
* サーバーのメンテナンス、ソフトウェアのアップデートなどの運用・管理の負担が大きい。
* 初期費用として、サーバー費用やソフトウェアライセンス費用が発生する場合がある。

これらのメリット・デメリットを比較検討した結果、まずは手軽にBytebaseの機能を試してみるため、**クラウド版のコミュニティプラン**を選択しました。目標は、Bytebaseを利用してEC2へのポートフォワードなしにRDSへ簡単にアクセスできるようにすることです。

## RDSへの接続で直面したHTTP 502エラー

Bytebaseの画面からRDSインスタンスへの接続設定を試みたところ、以下のようなエラーメッセージが表示され、接続に失敗しました。

```
Transport error: /bytebase.v1.InstanceService/CreateInstance UNAVAILABLE: Received HTTP 502 response: <!DOCTYPE html>
~以下略~
```

この `HTTP 502 Bad gateway` エラーは、Bytebase CloudがRDSへの接続を確立しようとした際に、何らかの問題が発生したことを示唆しています。

## 試行錯誤：セキュリティグループ、ユーザー作成

エラーの原因を探るため、以下の点を中心に調査と設定変更を試みました。

* **RDSのセキュリティグループ:** Bytebase Cloudの送信元IPアドレスをRDSのセキュリティグループのインバウンドルールに追加し、接続を許可しました。
* **データベースユーザーの作成:** Bytebaseがデータベース操作を行うための専用ユーザー (`bytebase`) を作成し、必要な権限を付与しました。

```sql
CREATE USER bytebase@'%' IDENTIFIED BY 'YOUR_DB_PWD';

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE VIEW,
DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, PROCESS, REFERENCES,
SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE, USAGE,
RELOAD, LOCK TABLES, REPLICATION CLIENT, REPLICATION SLAVE
/*!80000 , SET_USER_ID */
ON *.* to bytebase@'%';
```

しかし、これらの対策を講じても、HTTP 502エラーは解消されませんでした。

### コミュニティプランの制約：SSHトンネルとAWS Secrets Manager認証

様々な調査の結果、Bytebaseクラウド版**コミュニティプラン**には、セキュアな接続方式である **SSHトンネル接続** と、AWSの認証情報管理サービスである **AWS Secrets Manager を利用した認証** が提供されていないことが分かりました。これらの機能は、エンタープライズプランでのみ利用可能とのことです。

セキュリティ要件を考慮すると、これらのセキュアな接続方式を利用できない**コミュニティプラン**での運用は難しいと判断しました。

### コミュニティプランとセルフホスト版(OSS)の機能比較

| 機能項目                     | クラウド版 (コミュニティ)                                  | セルフホスト版 (OSS)                                 | 備考                                                                                                                               |
|------------------------------|----------------------------------------------------|------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| スキーマ変更管理             | 〇                                                 | 〇                                                   | データベーススキーマの変更、レビュー、適用                                                                                                  |
| 承認ワークフロー             | ×                                                 | 〇                                                   | データベース変更の承認プロセス                                                                                                        |
| SQLエディタ                  | 〇                                                 | 〇                                                   | SQLの実行、編集                                                                                                                      |
| 環境管理                     | ×                                                 | 〇                                                   | 開発、ステージング、本番などの環境管理                                                                                                    |
| ロールベースアクセス制御      | 既存のロールのみ                                         | カスタムポリシーを使用可能                                  | ユーザー権限管理                                                                                                                    |
| 監査ログ                     | ×                                                 | 〇                                                   | 操作ログの記録                                                                                                                      |
| 利用ユーザー数               | 20ユーザー                                             | 無制限 (インフラの許容範囲内)                          |                                                                                                                                 |
| 管理データベース数             | 10インスタンス                                            | 無制限 (インフラの許容範囲内)                          |                                                                                                                                 |
| サポート                     | コミュニティサポート                                 | コミュニティサポート                                 | Bytebase社からの直接的なサポートは期待できない                                                                                             |
| アップデート                 | 自動 (常に最新バージョン)                            | 手動 (自身でアップデート作業が必要)                    |                                                                                                                                 |
| バックアップ                 | Bytebase Cloudが提供 (Freeプランでの保持期間に制限がある場合あり) | 自身でバックアップ戦略を構築・運用する必要あり        |                                                                                                                                 |
| インフラ管理                 | Bytebase Cloudが管理                                 | 自身でサーバー、ネットワークなどのインフラを管理する必要あり |                                                                                                                                 |
| 初期設定                     | 簡単 (アカウント作成のみ)                            | 複雑 (サーバー構築、ソフトウェアインストールなどが必要) |                                                                                                                                 |
| カスタマイズ性               | 限定的                                             | 高い (ソースコードレベルでのカスタマイズも可能)          |                                                                                                                                 |
| インターネット接続           | 必須                                               | 不要 (プライベートネットワーク内での運用も可能だがAWSなら必要)        |                                                                                                                                 |
| セキュリティ                 | Bytebase Cloudのセキュリティポリシーに準拠             | 自身でセキュリティ対策を実施する必要あり              |                                                                                                                                 |

## まとめ

今回の経験から、Bytebaseクラウド版**コミュニティプラン**は、手軽にBytebaseの機能を試したい場合には非常に有効です。しかし、RDSなどのクラウドデータベースへのセキュアな接続を求める場合は、**コミュニティプラン**では厳しい事が分かりました。

特に、SSHトンネル接続やAWS Secrets Managerを利用した認証を検討している場合は、エンタープライズプランを検討するか、セルフホスト版の導入を視野に入れることをお勧めします。