IAM 認証を管理する

このページでは、Identity and Access Management(IAM)を介したデータベース認証を許可するように AlloyDB for PostgreSQL リソースを準備する方法について説明します。

この方法は、すべての AlloyDB クラスタがサポートする標準の PostgreSQL ユーザーロールによるデータベース認証を補完します。クラスタで IAM ベースの認証を有効にすると、IAM または PostgreSQL のユーザーロールを使用してそのクラスタで認証できます。

デフォルトでは、AlloyDB インスタンスで IAM ベースの認証は有効になっていません。IAM ログインを有効にして、IAM ベースのデータベース ユーザーを個別に設定できます。

後半の手順は、AlloyDB クラスタに IAM ユーザーを追加する必要がある場合はいつでも必要な回数だけ繰り返すことができます。

このページの残りの部分では、これらの手順について詳しく説明します。

IAM 認証を有効または無効にする

インスタンスで IAM 認証を有効にするには、そのインスタンスの alloydb.iam_authentication フラグon に設定します。

インスタンスで IAM 認証を無効にするには、alloydb.iam_authentication をデフォルト値の off に戻します。

AlloyDB インスタンスにフラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。

IAM ユーザーまたはサービス アカウントにインスタンスへのアクセス権を付与する

新しいデータベース ユーザーへの IAM 認証アクセスを有効にするには、次の 2 つの手順が必要です。

  1. プロジェクトの IAM 設定を更新して、AlloyDB データベースに適切な IAM ユーザーまたはサービス アカウントへのアクセス権を付与します。

  2. クラスタに新しいデータベース ユーザーを作成し、ユーザー名を IAM ユーザーまたはサービス アカウントのメールアドレスに設定します。

必要に応じて 2 番目の手順を繰り返して、IAM で定義されたアカウントにプロジェクト内の他のクラスタへのアクセス権を付与できます。

適切なロールを持つ IAM アカウントを更新する

IAM ユーザーまたはサービス アカウントに AlloyDB インスタンスで認証する権限を付与するには、次の IAM ロールを付与します。

  • alloydb.databaseUser
  • serviceusage.serviceUsageConsumer

これを行うには、他のユーザーにアクセス権を付与するの手順に沿って操作します。IAM プリンシパルに付与するロールを選択する手順で、alloydb.databaseUser を選択します。

IAM ユーザーまたはサービス アカウントをクラスタに追加する

コンソール

  1. [クラスタ] ページに移動します。

    クラスタに移動

  2. ユーザーを追加するクラスタの名前をクリックします。

  3. [ユーザー] をクリックします。

  4. [ユーザー アカウントを追加] をクリックします。

  5. [Cloud IAM] を選択します。

  6. [プリンシパル] フィールドに、IAM プリンシパルを入力します。

    IAM ユーザー アカウントの場合は、ユーザー アカウントの完全なメールアドレスを指定します。例: kai@altostrat.com

    IAM サービス アカウントの場合は、.gserviceaccount.com サフィックスを除いたサービス アカウントのアドレスを指定します。たとえば、サービス アカウント my-service@my-project.iam.gserviceaccount.com を指定するには、ここで値 my-service@my-project.iam を使用します。

  7. [追加] をクリックします。

gcloud

IAM ユーザーまたはサービス アカウントに基づいて PostgreSQL データベース ユーザーを作成するには、gcloud alloydb users create コマンドを使用します。

gcloud alloydb users create USERNAME \
--cluster=CLUSTER \
--region=REGION \
--type=IAM_BASED

次のように置き換えます。

  • USERNAME: 新しいデータベース ユーザーとして追加する IAM ユーザーの ID。

    IAM ユーザー アカウントの場合は、ユーザー アカウントの完全なメールアドレスを指定します。例: kai@altostrat.com

    IAM サービス アカウントの場合は、.gserviceaccount.com サフィックスを除いたサービス アカウントのアドレスを指定します。たとえば、サービス アカウント my-service@my-project.iam.gserviceaccount.com を指定するには、ここで値 my-service@my-project.iam を使用します。

  • CLUSTER: このデータベース ユーザー アカウントを作成するクラスタの ID。

  • REGION: クラスタが存在するリージョンの ID。例: us-central1

IAM ユーザーに適切なデータベース権限を付与する

デフォルトでは、IAM ユーザーがデータベース インスタンスに追加されると、その新しいユーザーにはデータベースに対する権限が付与されません。

ユーザーまたはサービス アカウントがデータベースに接続すると、PUBLIC にアクセス権がある任意のデータベース オブジェクトに対してクエリを実行できます。

追加のアクセス権が必要な場合は、GRANT PostgreSQL ステートメントを使用して、より多くの権限を付与できます。

GRANT SELECT ON TABLE_NAME TO "USERNAME";

次のように置き換えます。

  • USERNAME: ユーザーのメールアドレス。住所は二重引用符で囲む必要があります。

  • TABLE_NAME: ユーザーにアクセス権を付与するテーブルの名前。

クラスタから IAM ユーザーまたはサービス アカウントを削除する

コンソール

  1. [クラスタ] ページに移動します。

    クラスタに移動

  2. ユーザーを削除するクラスタの名前をクリックします。

  3. [ユーザー] をクリックします。

  4. 削除するユーザーの行で、 [このユーザーの操作を開く] をクリックします。

  5. [削除] を選択します。

  6. [ユーザー アカウントを削除しますか?] ダイアログで、[削除] をクリックします。

gcloud

gcloud alloydb users delete コマンドを使用します。

gcloud alloydb users delete USERNAME \
--cluster=CLUSTER \
--region=REGION

次のように置き換えます。

  • USERNAME: クラスタから削除する IAM ユーザーの ID。

    IAM ユーザー アカウントの場合は、ユーザー アカウントの完全なメールアドレスを指定します。例: kai@altostrat.com

    IAM サービス アカウントの場合は、.gserviceaccount.com サフィックスを除いたサービス アカウントのアドレスを指定します。たとえば、サービス アカウント my-service@my-project.iam.gserviceaccount.com を指定するには、ここで値 my-service@my-project.iam を使用します。

  • CLUSTER: このユーザーを削除するクラスタの ID。

  • REGION: クラスタが存在するリージョンの ID。例: us-central1

次のステップ