AlloyDB for PostgreSQL に接続する

BigQuery 管理者は、接続を作成して AlloyDB データにアクセスできます。この接続により、データ アナリストは AlloyDB のデータにクエリを実行できます。

AlloyDB に接続するには、次の手順を行います。

  1. AlloyDB 接続を作成する

  2. サービス アカウントへのアクセスを許可する

始める前に

  1. BigQuery Connection API を有効にします。

    API を有効にする

  2. AlloyDB 接続の作成に必要な権限を取得するには、プロジェクトで BigQuery 接続管理者roles/bigquery.connectionAdmin)IAM ロールを付与するように管理者へ依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

AlloyDB 接続を作成する

ベスト プラクティスとして、AlloyDB に接続するときは、接続を使用してデータベース認証情報を処理します。接続は暗号化され、BigQuery Connection のサービスに安全に保存されます。ユーザー認証情報がソース内の他のデータに対して有効であれば、その接続を再利用できます。たとえば、1 つの接続を使用して、AlloyDB インスタンス内の同じデータベースに複数回クエリを実行できます。

AlloyDB 接続は、次のいずれかの方法で作成します。

コンソール

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインで、 [追加] をクリックします。

  3. [追加] ダイアログで、[外部データソースへの接続] をクリックします。

  4. [外部データソース] ダイアログで、次の情報を入力します。

    • [接続タイプ] で AlloyDB を選択します。
    • [接続 ID] に、接続リソースの識別子を入力します。文字、数字、アンダースコアを使用できます。例: bq_alloydb_connection
    • [データ ロケーション] で、外部データソースのリージョンと互換性のある BigQuery ロケーション(またはリージョン)を選択します。
    • (省略可)[わかりやすい名前] に、わかりやすい接続名を入力します(例: My connection resource)。後で修正が必要になった場合、わかりやすい名前だと接続リソースを簡単に識別できます。
    • (省略可)[説明] に、この接続リソースの説明を入力します。
    • 省略可: 暗号化顧客管理の暗号鍵(CMEK)を使用して認証情報を暗号化するには、[顧客管理の暗号鍵(CMEK)] を選択し、顧客管理の暗号鍵を選択します。選択しない場合、認証情報は Google が所有し、Google が管理するデフォルトの鍵によって保護されます。
    • [データベース名] に、データベースの名前を入力します。
    • [データベース ユーザー名] に、データベースのユーザー名を入力します。
    • [データベース パスワード] に、データベースのパスワードを入力します。
      • 省略可: パスワードを表示するには、[パスワードを表示] をクリックします。
    • [AlloyDB インスタンス] に、//alloydb.googleapis.com プレフィックスを付けて AlloyDB プライマリ インスタンスまたはリード インスタンスの接続 URI を入力します。

      • サンプル URI: //alloydb.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/clusters/CLUSTER_NAME/instances/INSTANCE_ID
  5. [接続を作成] をクリックします。

  6. [接続へ移動] をクリックします。

  7. [接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーし、適切な IAM 権限を付与します。

bq

次のフラグを指定して、bq mk コマンドを実行します。

  bq mk \
  --connection \
  --location=LOCATION \
  --project_id=PROJECT_ID \
  --connector_configuration '{
    "connector_id": "google-alloydb",
    "asset": {
      "database": "DATABASE",
      "google_cloud_resource": "RESOURCE_PATH"
    },
    "authentication": {
      "username_password": {
        "username": "USERNAME",
        "password": {
          "plaintext": "PASSWORD"
        }
      }
    }
  }' \
  CONNECTION_ID

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

  • LOCATION: AlloyDB のデータと一緒にする BigQuery データセットのリージョンを指定します。この接続を使用するクエリは、このリージョンから実行する必要があります。
  • PROJECT_ID: Google Cloud プロジェクト ID を入力します。
  • DATABASE: データベース名を入力します。
  • RESOURCE_PATH: //alloydb.googleapis.com プレフィックスを付けて AlloyDB プライマリ インスタンスまたはリード インスタンスの接続 URI を入力します。
    • サンプル URI: //alloydb.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/clusters/CLUSTER_NAME/instances/INSTANCE_ID
  • USERNAME: データベース ユーザーの名前を入力します。
  • PASSWORD: データベース ユーザーのパスワードを入力します。
  • CONNECTION_ID: この接続を識別する接続 ID を入力します。

API

BigQuery Connection API では、ConnectionService 内で CreateConnection を呼び出して接続をインスタンス化できます。詳しくは、クライアント ライブラリのページをご覧ください。

サービス アカウントへのアクセスを許可する

プロジェクトで最初の接続を作成すると、サービス アカウントが自動的に作成されます。サービス アカウントの名前は BigQuery Connection Service エージェントです。サービス アカウント ID は以下の形式です。

service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com

AlloyDB に接続するには、BigQuery がユーザーに代わってデータにアクセスできるように、新しい接続に AlloyDB へのアクセス権を付与する必要があります。このサービス アカウントには次の権限が必要です。

  • alloydb.instances.connect

接続に関連付けられているサービス アカウントに、この権限がすでに割り当てられている AlloyDB クライアント IAM ロールを付与できます。サービス アカウントに必要な権限がすでにある場合は、この手順を省略できます。

コンソール

  1. [IAM と管理] ページに移動

    [IAM と管理] に移動

  2. [ アクセス権を付与] をクリックします。

    [プリンシパルを追加] ダイアログが開きます。

  3. 新しいプリンシパル フィールドに、サービス アカウントの名前( BigQuery Connection Service エージェント、または接続情報から取得したサービス アカウント ID)を入力します。

  4. [ロールを選択] フィールドで [AlloyDB] を選択し、[AlloyDB クライアント] を選択します。

  5. [保存] をクリックします。

gcloud

gcloud projects add-iam-policy-binding コマンドを実行します。

gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:SERVICE_ACCOUNT_ID --role=roles/alloydb.client

次の値を指定します。

  • PROJECT_ID: Google Cloud プロジェクト ID。
  • SERVICE_ACCOUNT_ID: service-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com のプロジェクト番号を置き換えて使用します。

ユーザーと接続を共有する

次のロールを付与することで、ユーザーがデータをクエリして接続を管理できます。

  • roles/bigquery.connectionUser: ユーザーが接続を使用して外部データソースに接続し、それらに対してクエリを実行できるようにします。

  • roles/bigquery.connectionAdmin: ユーザーが接続を管理できるようにします。

BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。

次のオプションのいずれかを選択します。

コンソール

  1. BigQuery ページに移動します。

    BigQuery に移動

    接続は、プロジェクトの外部接続というグループに一覧表示されます。

  2. [エクスプローラ] ペインで、[プロジェクト名] > [外部接続] > [接続] の順にクリックします。

  3. [詳細] ペインで、[共有] をクリックして接続を共有します。次に、以下の操作を行います。

    1. [接続の権限] ダイアログで、プリンシパルを追加または編集して、他のプリンシパルと接続を共有します。

    2. [保存] をクリックします。

bq

次の set-iam-policy コマンドを使用します。

  bq set-iam-policy RESOURCE FILE_NAME

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

  • RESOURCE: リソース名を project_id.region.connection_id または region.connection_id の形式で入力します。
  • FILE_NAME: JSON 形式の IAM ポリシーを含むファイル名を入力します。

set-iam-policy コマンドの詳細については、IAM を使用してリソースへのアクセスを制御するをご覧ください。

API

[BigQuery Connections REST API リファレンス] セクションの projects.locations.connections.setIAM メソッドを使用して、policy リソースのインスタンスを指定します。

次のステップ