データベース

Cloud SQL for MySQL での IAM データベース認証がリリース

#databases

※この投稿は米国時間 2021 年 7 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。

企業の IT 管理者がデータシステムを設計する際、検討する数々の項目の中でもセキュリティは最も重要です。データの保管場所やユーザーのアクセス方法を定義する際に鍵となるのはセキュリティです。従来、IT 管理者はユーザーに専用のユーザー名とパスワードを個別に発行することで、SQL データベースのようなシステムへのユーザー アクセスを管理してきました。設定はシンプルですが、アクセス制御が分散するため、複雑なパスワードのポリシーやローテーション ポリシーを適用するなど、管理者が各システムのセキュリティを確保するためにかなりの時間を費やすことが避けられません。SOX 法や PCI-DSS の要件に対応する必要がある一部の企業などでは、規則を遵守するために各システムでこうした対策が必須となることがあります。多くの場合、IT 管理者は管理上の手間と過失リスクを最小限に抑えるために、単一のハブを使用して SQL データベースを含むあらゆるシステムのアクセス権を付与および取り消しできる一元化されたアクセス制御を好みます。

このたび、この一元化されたアクセス制御を実現する Cloud SQL for MySQL 用の IAM データベース認証の一般提供が開始されました。IAM データベース認証により、管理者は Google Cloud の集中型アクセス管理システムである Cloud Identity and Access Management(Cloud IAM)を使用して、管理者権限だけでなく MySQL データベースへの接続アクセス権限も管理できます。また、Cloud IAM を使用して、各 Cloud SQL データベースのパスワード管理にまつわる作業を軽減できます。さらに、Cloud Identity の堅牢なパスワード セキュリティ システムを活用して、統合された強力なセキュリティ体制を確立し、Cloud SQL を含むすべての Google Cloud システムでコンプライアンスを維持できます。

IAM データベース認証により、エンドユーザーは自身の Cloud Identity 認証情報を使って Cloud SQL データベースにログインできます。まず、ユーザーが Google Cloud にログインし、データベースにアクセスする準備ができたら gcloud か Google Cloud API を使用してアクセス トークンをリクエストします。次に、Google のユーザー名とアクセス トークンをデータベース インスタンスに提示してログインします。Cloud IAM は、ユーザーがデータベースにログインする前に、接続権限を持っていることを確認します。ユーザーにとっては、IAM データベース認証の場合、データベースに組み込まれた認証方法の場合と比べて管理が必要なパスワードが 1 つ減ることになります。エンドユーザーとアプリケーションの双方が、IAM データベース認証を使用してデータベースに接続できます。

IAM データベース認証の設定方法

 具体例を挙げてご説明します。BuyLots という小売業者の IT 管理者チームが、データ アナリスト チームの Prashanth さんに、Cloud SQL で稼働している新しい US Reporting MySQL データベース インスタンスへのアクセス権限を付与するとします。Prashanth さんは、すでに Cloud Identity アカウントを持っています。

まず、管理者は Cloud IAM に移動して、Prashanth さんの Cloud Identity アカウントに Cloud SQL インスタンスのユーザーロールを付与します。これにより、Cloud SQL が Prashanth さんのデータベース アクセス許可があるかを確認する際に、Cloud IAM が肯定的な回答を返すようになります。

Set Up IAM Database Authentication.jpg

次に、管理者は Cloud SQL を使用して US Reporting データベース インスタンスの構成を編集し、「cloudsql_iam_authentication」フラグをオンにします。これで IAM データベース認証が有効になります。

cloudsql_iam_authentication.jpg

その後、管理者が US Reporting データベース インスタンスで Prashanth さんの新しい MySQL ユーザー アカウントを作成します。認証方法には Cloud IAM を選択します。管理者が指定するのは Prashanth さんの完全な Cloud Identity ユーザー名「prashanth@buylots.com」ですが、MySQL の文字数制限により、Prashanth さんの MySQL ユーザー名はドメインを省いた Cloud Identity ユーザー名「prashanth」に注意してください。

Cloud IAM for the authentication method.jpg

最後に、管理者は MySQL を開き、Prashanth さんが適切な権限レベルで正しいテーブルにアクセスできるように、適切な権限を明示的に付与する必要があります。Cloud IAM による認証の処理中、Cloud SQL は引き続き MySQL の権限システムを使用して、ユーザーが実行を認可されるアクションを判断します。新しい IAM データベース認証の MySQL ユーザーは、作成された時点では権限を一切持っていません。管理者は、US Reporting データベース インスタンスの sales データベース内にあるすべてのテーブルへの読み取りアクセス権を Prashanth さんに付与します。

  mysql > GRANT SELECT ON sales.* TO ‘prashanth’ ;
mysql > FLUSH PRIVILEGES;

これで、Prashanth さんが IAM データベース認証を使用して Cloud SQL for MySQL インスタンスに接続できるよう設定されました。

IAM データベース認証を使用してログインする方法

 ここでは、Prashanth さんが US Reporting データベース インスタンスにログインし、月次レポート用のデータを抽出します。Prashanth さんはノートパソコンから Cloud SDK を使用して Google Cloud にアクセスします。MySQL クエリについては、MySQL コマンドライン クライアントを使用して、Cloud SQL Auth Proxy 経由で BuyLots データベースに接続します。Prashanth さんが Cloud SQL Auth Proxy を使用する理由は、接続が簡単になるためです。このプロキシは、US Reporting が Prashanth さんの MySQL コマンドライン クライアントに対してローカルに見えるように接続リクエストを転送します。さらに、Cloud SQL Auth Proxy は SSL 暗号化を自動的に処理するため、Prashanth さんは自己署名 SSL 証明書について心配する必要がありません。

まず、Prashanth さんは Cloud SDK を使用して Google Cloud にログインし、ウェブブラウザで Cloud Identity の認証情報を入力します。

  $ gcloud auth login

You are now logged in as: [prashanth@buylots.com].

次に、Prashanth さんは Cloud SQL Auth Proxy を起動し、MySQL 接続リクエスト用のインスタンス接続名とポート番号を渡します。Prashanth さんはすでに Google Cloud にログイン済みであるため、Cloud SQL Auth Proxy は Prashanth さんの Cloud SDK の認証情報を使用してインスタンスへの接続を認可します。

  &./cloud_sql_proxy -instances=buylots:us-central1:us-reporting=tcp:3306

最後に、Prashanth さんはオペレーティング システムのコマンドライン インターフェースからコマンドを使用して MySQL に接続します。MySQL のユーザー名として、BuyLots ドメイン名を省略した Cloud Identity ユーザー名を渡します。従来の MySQL パスワードの代わりに、Cloud SDK から Prashanth さんの Cloud Identity アクセス トークンが返されるようにするコマンドを渡します。接続リクエストにクリアテキスト オプションを指定する必要もあります。Cloud SQL Auth Proxy を使用しているため、ホストがローカルであると指定できます。

  $ mysql --user=prashanth --password=`gcloud auth print-access-token` --enable-cleartext-plugin --host=127.0.0.1 --port=3306

これで、Prashanth さんは IAM データベース認証を使用して Cloud SQL for MySQL データベースに接続できました。

詳細

IAM データベース認証を使用すると、企業の IT 管理者は Cloud SQL データベースへのアクセスのセキュリティを強化し、Cloud IAM を介してアクセスを一元管理できます。Cloud SQL for MySQL の IAM データベース認証についての詳細は、こちらのドキュメントをご参照ください。

 - プロダクト マネージャー Akhil Jariwala