このページでは、Identity and Access Management(IAM)を介したデータベース認証を許可するように AlloyDB for PostgreSQL インスタンスを準備する方法について説明します。
IAM 認証は、すべての AlloyDB クラスタがサポートする標準の PostgreSQL ユーザーによるデータベース認証を補完します。クラスタで IAM 認証を有効にすると、IAM または PostgreSQL のユーザーロールを使用してそのクラスタで認証できます。
デフォルトでは、AlloyDB インスタンスで IAM 認証は有効になっていません。IAM 認証を有効にするには、次の操作を行います。
IAM ユーザー アカウントまたはサービス アカウントが接続する必要があるすべてのインスタンスで、IAM 認証を手動で有効にする。
データベース ユーザーとしてログインする必要がある IAM ユーザーまたはサービス アカウントごとに、次の手順を完了します。
IAM 管理ツールを使用して、
alloydb.databaseUser
ロールとserviceusage.serviceUsageConsumer
ロールをそのユーザーまたはサービス アカウントに付与します。Google Cloud CLI を使用して、AlloyDB クラスタのユーザーまたはサービス アカウントに対応するデータベース ユーザーを作成します。
postgres
などのデータベース管理者アカウントを使用して、適切なデータベース テーブルに新しいデータベース ユーザーのアクセス権限を付与します。
AlloyDB クラスタに IAM ユーザーを追加する必要がある場合は、いつでもこの手順を繰り返します。
IAM 認証を有効または無効にする
インスタンスで IAM 認証を有効にするには、そのインスタンスの alloydb.iam_authentication
フラグを on
に設定します。
インスタンスで IAM 認証を無効にするには、alloydb.iam_authentication
をデフォルト値の off
に戻します。
AlloyDB インスタンスにフラグを設定する方法については、インスタンスのデータベース フラグを構成するをご覧ください。
IAM ユーザーまたはサービス アカウントにインスタンスへのアクセス権を付与する
新しいデータベース ユーザーへの IAM アクセスを有効にするには、次の 2 つの手順が必要です。
プロジェクトの IAM 設定を更新して、AlloyDB データベースに適切な IAM ユーザーまたはサービス アカウントへのアクセス権を付与します。
クラスタに新しいデータベース ユーザーを作成し、ユーザー名を IAM ユーザーまたはサービス アカウントのメールアドレスに設定します。
手順 2 を繰り返して、IAM アカウントにプロジェクト内の他のクラスタへのアクセス権を付与できます。
適切なロールを持つ IAM アカウントを更新する
IAM ユーザーまたはサービス アカウントに AlloyDB インスタンスで認証する権限を付与するには、次の IAM ロールを付与します。
alloydb.databaseUser
: ユーザーが AlloyDB インスタンスに接続できるようにします。serviceusage.serviceUsageConsumer
: 権限を確認する API へのアクセス権をユーザーに提供します。
これを行うには、他のユーザーにアクセス権を付与するの手順に沿って操作します。IAM プリンシパルに付与するロールを選択する手順で、alloydb.databaseUser
を選択します。
IAM ユーザーまたはサービス アカウントをクラスタに追加する
[クラスタ] ページに移動します。
ユーザーを追加するクラスタの名前をクリックします。
[ユーザー] をクリックします。
[ユーザー アカウントを追加] をクリックします。
[Cloud IAM] を選択します。
[プリンシパル] フィールドに、IAM プリンシパルを入力します。
IAM ユーザー アカウントの場合は、ユーザー アカウントの完全なメールアドレスを指定します。例:
kai@altostrat.com
IAM サービス アカウントの場合は、
.gserviceaccount.com
サフィックスを除いたサービス アカウントのアドレスを指定します。たとえば、サービス アカウントmy-service@my-project.iam.gserviceaccount.com
を指定するには、ここで値my-service@my-project.iam
を使用します。[追加] をクリックします。
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 ユーザーまたはサービス アカウントを削除する
[クラスタ] ページに移動します。
ユーザーを削除するクラスタの名前をクリックします。
[ユーザー] をクリックします。
削除するユーザーを表す行で、[
このユーザーのアクションを開く] をクリックします。[削除] を選択します。
[ユーザー アカウントを削除しますか?] ダイアログで、[削除] をクリックします。
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