Cloud SQL IAM データベース認証

このページでは、IAM データベース認証が Cloud SQL インスタンスでどのように機能するか、またユーザー アカウントとサービス アカウントの作成やこれらのアカウントからのログインにどのように影響するかについて説明します。

はじめに

Cloud SQL は Identity and Access Management(IAM)と統合されており、データベースに対するユーザーとサービス アカウントのログイン アクセスを適切に管理できます。この機能を IAM データベース認証と呼びます。

認証とは、インスタンスにアクセスを試みるユーザーの身元を確認するプロセスです。Cloud SQL は、データベース ユーザーに対して次の種類の認証が使用されます。

  • データベースの組み込み認証。ユーザー名とパスワードを使用してデータベース ユーザーを認証します。
  • IAM データベース認証。アクセス トークンと IAM を使用してユーザーの認証を行います。

Cloud SQL 用 IAM 認証

IAM 認証を使用する場合、リソース(Cloud SQL インスタンス)へのアクセス権はエンドユーザーに直接付与されません。代わりに、複数の権限をロールにまとめて、プリンシパルに付与します。詳細については、IAM の概要をご覧ください。

IAM データベース認証を使用してログインする管理者は、IAM ポリシーを使用してインスタンスへのアクセス制御を一元管理できます。IAM ポリシーには、次のエンティティが含まれます。

  • プリンシパル。Cloud SQL では、ユーザー アカウントとサービス アカウント(アプリケーション用)という 2 種類のプリンシパルを使用できます。その他のプリンシパル タイプ(Google グループ、Google Workspace ドメイン、Cloud Identity ドメインなど)は、IAM データベース認証ではサポートされていません。詳細については、ID に関するコンセプトをご覧ください。
  • ロール。IAM データベース認証では、ユーザーがインスタンスにログインするために cloudsql.instances.login 権限が必要です。この権限を取得するには、事前定義ロールの Cloud SQL インスタンス ユーザーか、権限を含むカスタムロールのいずれかにユーザー アカウントまたはサービス アカウントをバインドします。IAM ロールの詳細については、ロールについてをご覧ください。
  • リソース。プリンシパルがアクセスするリソースは Cloud SQL インスタンスです。デフォルトでは、IAM ポリシー バインディングはプロジェクト レベルで適用されるため、プリンシパルはプロジェクト内のすべての Cloud SQL インスタンスのロール権限を受け取ります。

IAM データベース認証のオプション

Cloud SQL for PostgreSQL には、IAM データベース認証に 2 つのオプション(自動と手動)があります。

IAM データベースの自動認証

IAM データベースの自動認証を使用すると、Cloud SQL Auth Proxy などの中間の Cloud SQL コネクタにアクセス トークンのリクエストと管理を任せることができます。IAM データベースの自動認証では、ユーザーは、クライアントからの接続リクエストで IAM データベースのユーザー名のみを渡す必要があります。コネクタは、クライアントに代わってパスワード属性のアクセス トークン情報を送信します。IAM データベース認証は現在、Cloud SQL Auth ProxyJava コネクタPython コネクタでサポートされています。IAM データベースの自動認証は現在、Cloud SQL for PostgreSQL のみでサポートされています。

IAM データベースの自動認証では、Cloud SQL コネクタを使用する必要があります。

安全性と信頼性を確保するには、IAM データベース自動認証を使用することをおすすめします。IAM データベース認証では OAuth 2.0 アクセス トークンを使用します。OAuth アクセス トークンは有効期間が短く、1 時間のみ有効です。Cloud SQL コネクタは、これらのトークンをリクエストして更新できます。これにより、有効期間が長いプロセスや接続プールに依存するアプリケーションの接続を安定させることができます。アプリケーションの認証では、IAM データベースの自動認証を行うことを強くおすすめします。

詳細については、IAM データベースの自動認証によるログインをご覧ください。

IAM データベースの手動認証

IAM データベースの手動認証では、IAM プリンシパルは、クライアント接続リクエストでパスワード属性のアクセス トークンを明示的に渡す必要があります。プリンシパルはまず Google Cloud にログインし、IAM からのアクセス トークンを明示的にリクエストする必要があります。

gcloud を使用すると、データベースにログインするために使用される Cloud SQL Admin API スコープで OAuth 2.0 トークンを明示的にリクエストできます。IAM データベース認証でデータベース ユーザーとしてログインする場合は、メールアドレスをユーザー名として使用し、アクセス トークンをパスワードとして使用します。この方法は、データベースへの直接接続または Cloud SQL コネクタで使用できます。

IAM データベース認証を使用したログインは、SSL 接続経由でのみ実行できます。

詳しくは、IAM データベースの手動認証によるログインをご覧ください。

ユーザーとサービス アカウントの管理

IAM データベース認証を使用してインスタンスのデータベースに対するユーザー アカウントとサービス アカウントのアクセスを許可するには、そのユーザーをインスタンスに追加する必要があります。詳しくは、IAM を使用するユーザーまたはサービス アカウントの追加をご覧ください。

Google Cloud Console を使用してユーザーまたはサービス アカウントを追加する場合、Cloud SQL から「Cloud SQL ユーザー」ロールを追加するよう求められます。このロールは、ユーザーがインスタンスにログインするために必要です。

gcloud または API を使用してユーザーを追加する場合は、ログイン権限を手動で付与する必要があります。PostgreSQL GRANT コマンドを使用してデータベース権限を付与します。

Cloud SQL IAM データベース認証のインスタンス構成

インスタンスで IAM データベース認証を有効にするには、cloudsql.iam_authentication フラグを使用します。このフラグを有効にすると、インスタンスで IAM データベース認証用に構成されたアカウントのログインが有効になります。

このフラグを設定した場合でも、IAM を使用しない既存のユーザーは、ユーザー名とパスワードを使用してログインできます。ただし、このフラグをインスタンスで無効にすると、以前に IAM データベース認証を使用して追加したユーザーはインスタンスにアクセスできなくなります。詳しくは、IAM データベース認証のインスタンスの構成をご覧ください。

さまざまなインスタンス シナリオに対する Cloud SQL IAM データベース認証

リードレプリカ プライマリ インスタンスで IAM データベース認証が有効になっている場合でも、リードレプリカでは自動的に有効になりません。作成したリードレプリカに IAM データベース認証を追加する必要があります。詳細については、IAM データベース認証のリードレプリカ ログインの構成をご覧ください。
復元されたインスタンス 以前にバックアップされたインスタンスを同じプロジェクト内の同じインスタンスまたは別のインスタンスに復元した場合、現在のユーザー ログイン認証が適用されます。別のプロジェクトの新しいインスタンスにバックアップを復元する場合は、新しいインスタンスのユーザー認証を設定する必要があります。詳細については、IAM データベース認証を使用するユーザーまたはサービス アカウントの追加をご覧ください。

Cloud Audit Logs を使った操作

監査ログを使用すると、ログインなどのデータアクセスの記録を保持できます。デフォルトでは、Cloud Audit Logs は無効になっています。ログインをトラッキングするには、データアクセスの監査ログを有効にする必要があります。この目的で監査ロギングを使用すると、データロギングの費用が発生します。詳細については、監査ログデータアクセス監査ログの構成データロギングの料金をご覧ください。

制限事項

  1. セキュリティ上、IAM データベース認証を使用したログインは SSL 接続でのみ使用できます。暗号化されていない接続は拒否されます。
  2. 各インスタンスには分単位のログイン割り当てがあります。これには、成功したログインと失敗したログインの両方が含まれます。割り当てを超過すると、一時的にログインできなくなります。頻繁にログインするのではなく、承認済みネットワークを使用してログインを制限することをおすすめします。ログインの承認の割り当ては、インスタンスごとに 1 分あたり 3, 000 です。

次のステップ