IAM 認証

Google Cloud には Identity and Access Management(IAM)機能があり、特定の Google Cloud リソースに対するアクセス権を設定できるため、他のリソースへの不要なアクセスを防ぐことができます。このページでは、Cloud SQL を IAM と統合する方法と、IAM を使用してデータベース認証を行う方法について説明します。Google Cloud IAM の詳細については、IAM のドキュメントをご覧ください。

Cloud SQL リソースへのアクセス権を制御できるように、Cloud SQL には事前定義ロールが用意されています。事前定義ロールの中に必要な権限を付与するものがない場合は、独自にカスタムロールを作成することもできます。また、以前の基本ロール(編集者、閲覧者、オーナー)もまだ使用できますが、Cloud SQL ロールほど細かい制御はできません。特に、基本ロールは Cloud SQL だけではなく、Google Cloud 全体のリソースへのアクセス権を付与します。Google Cloud の基本ロールの詳細については、基本ロールをご覧ください。

IAM ポリシーは、リソース階層の任意のレベル(組織レベル、フォルダレベル、プロジェクト レベル)で設定できます。リソースは親リソースのポリシーをすべて継承します。

Cloud SQL 用 IAM リファレンス

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

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

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

データベース認証オプションを比較する

次の表は、Cloud SQL のさまざまなデータベース認証方法を比較したものです。

機能 組み込みデータベース認証 IAM データベース認証
認証方法 パスワード 一時的な認証トークン
ネットワーク トラフィックの暗号化 SSL 不要 SSL 必要
ユーザー管理 手動 IAM で一元化

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

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

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

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

IAM データベースの自動認証では、Cloud SQL コネクタを使用する必要があります。Cloud SQL Auth ProxyGo コネクタJava コネクタPython コネクタでサポートされています。

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

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

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

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

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

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

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

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

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

Google Cloud コンソールを使用してユーザーまたはサービス アカウントを追加する場合、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 データベース認証を使用するユーザーまたはサービス アカウントの追加をご覧ください。

IAM Conditions について

IAM Conditions を使用すると、さまざまな属性に基づいてロールを付与できます。たとえば、特定の日時にのみアクセスを許可することや、特定の名前の Cloud SQL リソースにのみアクセス権を付与することが可能です。

IAM Conditions の詳細については、IAM Conditions の概要をご覧ください。また、Cloud SQL での IAM Conditions の使用の詳細(例を含む)もご覧ください。

Cloud Audit Logs を使った操作

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

制限事項

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

次のステップ