SREチームの中原です。
今回は MCP を使ってコーディングエージェントから本番相当のデータベースに安全にアクセスできるようにした件について書いてみます。
TL;DR
- Aurora のクローン機能などを使って本番DBのデイリーコピーを作成し RDS Data API を許可
- Amazon Aurora MySQL/PostgreSQL MCP Server を使ってコーディングエージェントからDBにアクセス
- LLMとの連携でDBスキーマやデータを考慮したコード生成が可能に!
- 開発効率が劇的に向上するかも
経緯
弊社でもコーディングエージェントの普及が進んでおり、プログラムの作成そのものにおいては恩恵を受けられるようになっています。 ただ、データベース上のデータに対してはコーディングエージェントからアクセスできる状態にはなっていませんでした。 そこで、データも読めるようになれば既存のデータ構造を前提としたプログラムの生成などいろいろできるようになるんじゃないかと思い MCP でアクセスできるようにしてみました。
利用ツール
今回使用したのは、AWS が提供している
です。
これらの MCP Server を使うことで、MCPプロトコル経由で Aurora MySQL/PostgreSQL のデータベースにアクセスできるようになります。 RDS Data API 経由でのアクセスとなるので、AWS へのアクセス権が整理されていればセキュアな接続が簡単に実現できます。
運用
以下のような形態で運用しています。
アクセス制御
- IAMロールベースでの権限管理
- 本番AWS環境の開発者権限がある人のみアクセス可能
- 個人情報などの機微な情報は KMS で暗号化してテーブルに格納されており MCP 経由では参照不可
データベース環境
- 調査用DB(本番DBのデイリーコピー)を利用
- 本番環境への直接アクセスは一切なし
- リードオンリー権限の DB ユーザでアクセス
データフロー
- コーディングエージェントから Amazon Aurora MySQL/PostgreSQL MCP Server への問い合わせ
- MCP サーバから得られた出力を claude や gemini などの社内利用 OK な LLM に入力
- コーディングエージェントが上記のサイクルの中でDBの構造やデータを利用
といった感じで、安全性を確保しながらも開発効率を向上させる仕組みになっています。
導入
実際の導入は以下の手順で行いました:
1. 調査用DBの準備
MCP 接続先の調査用 DB として Aurora クラスターを構築します。 t シリーズインスタンスでは RDS Data API が利用できないので Serverless v2 インスタンスを利用しています。
2. 本番データの複製
弊社では MySQL ベースのユーザデータと、SQLiteベースのマスターデータがあります。 MySQL ベースのデータは本番の Aurora MySQL クラスターをクローンするだけですが、 SQLite ベースのデータはもともと redash で参照するために運用していた社内製の python スクリプトで Aurora PostgreSQL への取り込みを行っています。
3. RDS Data API の有効化
Aurora クラスターが available になったら RDS Data APIを有効化します。
aws rds modify-db-cluster \ --db-cluster-identifier research-db-cluster \ --enable-http-endpoint
2. 認証情報の設定
Secret ManagerにリードオンリーなDB接続情報を格納します。 username と password しか使わないので本番DBで作成済みのリードオンリーユーザのシークレットがあれば流用も可能です。
{ "username": "readonly_user", "password": "your_readonly_password", "engine": "mysql", "host": "research-db-cluster.cluster-xxxxx.ap-northeast-1.rds.amazonaws.com", "port": 3306, "dbname": "production_copy" }
3. MCP Serverの設定
Amazon Aurora MySQL MCP Serverを設定します。
{ "mcpServers": { "database_name": { "type": "stdio", "command": "uvx", "args": [ "awslabs.mysql-mcp-server@latest", "--resource_arn", "arn:aws:rds:ap-northeast-1:123456789012:cluster:research-db-cluster", "--secret_arn", "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:research-db-readonly", "--database", "database_name", "--region", "ap-northeast-1", "--readonly", "True" ], "env": { "AWS_PROFILE": "profile_name", "AWS_REGION": "ap-northeast-1", "FASTMCP_LOG_LEVEL": "ERROR" } } }
4. 接続テストと周知
設定完了後、実際に接続テストを行って動作確認します。 問題なければ開発チームに周知して利用開始です。
今後の展望
あとは、実際にプログラムを書く人たちに使い倒してもらえれば、ってかんじですが、 今後は以下のような拡張を検討しています:
更新系処理の対応
- 開発環境で更新系処理も可能にしてみる
- より安全なサンドボックス環境の提供
まとめ
MCPを使ってコーディングエージェントからDBにアクセスできるようにすることで、開発効率が大幅に向上するかもしれません。 皆さんの環境でも、適宜セキュリティポリシーに合わせて導入を検討してみてはいかがでしょうか?