Cloud SQL コネクタについて
Google Cloud Japan Team
※この投稿は米国時間 2023 年 2 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。
データベースへの接続は、新しいアプリケーションを設定するうえで最も難しい部分のひとつです。Google 以外にも、正しい接続文字列を作成しようと何日も費やした後に、「ここにデータベースのパスワードを平文で入れればいいのか?」と自問したデベロッパーがたくさんいるはずです(ちなみに質問の正解はノーです)。
Cloud SQL は、Google Cloud Platform で提供される MySQL、PostgreSQL、SQL Server 用のフルマネージド リレーショナル データベース サービスです。これを使用すれば、Cloud SQL コネクタを使用して簡単に接続できます。
コネクタの導入前
Google Cloud では、新しい Cloud SQL データベースを数分で作成できます。
次はどうすればよいでしょうか。一般的に、次のステップはアプリケーションをデータベースに接続することです。もちろん、アプリケーションの重要なデータが守られ、ネットワーク上ですべてのトラフィックが確実に暗号化されるよう、安全に接続する必要もあります。
データベースへ安全に接続するための従来のアプローチでは、次のような作業が必要になります。
SSL 証明書をプロビジョニングする
アプリケーションで安全に証明書が使用できるようにする
SSL 証明書を定期的にローテーションする方法を考案する
データベースのユーザー名とパスワードを作成する
ユーザーのパスワードを定期的にローテーションする方法を考案する
許可されたアプリケーションしかデータベースに到達できないようなファイアウォールのルールまたは承認済みネットワークを設定する
ここまで読まれた方は、「セキュリティは大事だけど、大変だ」と思っていることでしょう。
ここで便利なのが Cloud SQL コネクタです。
Cloud SQL コネクタの登場
Cloud SQL コネクタはライブラリとバイナリ形式の両方で提供されるユーティリティで、これをアプリケーションと一緒に提供することで、データベースに安全に接続できるようになります。Cloud SQL には、Java、Python、および Go 用のコネクタがあります。このいずれかの言語でアプリケーションが作成されている場合は、その言語に固有のコネクタを利用することをおすすめします。それ以外の場合は、Cloud SQL Auth Proxy をお使いください。Auth Proxy はサイドカーまたはバックグラウンド プロセスとして実行可能なバイナリで、TCP または Unix ドメイン ソケットを介して接続する言語であればどれでも動作します。
いずれのコネクタも、プロキシ トンネルを使用してアプリケーションを Cloud SQL に接続する安全なアーキテクチャ パターンに沿って動作します。次の図で、そのアーキテクチャを簡単に説明します。
コネクタの働きについては今後の投稿でさらに詳しくお知らせしていきますが、コネクタを使用することの良い点のひとつは、アプリケーションの安全性を確保するために細かいところをひとつひとつ管理する必要がないことです。
コネクタを使用する理由
安全な接続にまつわるすべてのオーバーヘッドの管理にすでに慣れている方にとっては、従来のアプローチを続けてもまったく問題ないでしょう。しかし、できる限り多くの作業を Cloud SQL に任せたいとお考えなら、コネクタを使用することで、安全な接続にとどまらないメリットをすべて実感していただけます。
たとえば次のようなメリットがあります。
利便性 - 承認済みネットワークや SSL 証明書をあれこれ調整する必要がなくなります。
セキュリティの向上 - データベース プロトコルから独立した相互認証 TLS(v1.3)を使用します。
接続認証 - IAM ロールと権限を使うことで、データベースに接続できる(単純にログインするだけではない)ユーザーを管理します。
自動 IAM データベース認証 - パスワードを使用しない作業体験を選択することで、ソース管理にうっかり認証情報を送ってしまったのではないかと心配しなくてよくなります。
Cloud SQL での IAM Conditions の使用 - 接続する権限を特定の Cloud SQL インスタンスに絞り込みます。
コネクタの強制 - Cloud SQL コネクタを使用した接続のみを許可します。
オープン標準 - コネクタはデータベース ドライバで確立された既存の標準をベースに作られているため、数行のコードでアプリに依存関係を追加するだけでコネクタを使用できます。
オープンソース - コネクタはすべてオープンソースであり、GitHub 上で活発にメンテナンスが行われています。
コネクタを使用するということは、アプリケーションからデータベースに接続する部分のコードを Google のソフトウェア エンジニアに任せることを意味します。それによって、お客様はユーザーのためのより優れた製品を構築することに時間を使うことが可能になります。
今後の投稿では、それぞれのコネクタを詳しく取り上げ、コネクタの使い方や、裏でコネクタがどのように働くか、またここではお話ししなかった他の機能についてもご紹介します。
- デベロッパー プログラム エンジニア Eno Compton