Membuat dan menyiapkan koneksi resource Cloud

Sebagai administrator BigQuery, Anda dapat membuat koneksi resource Cloud yang memungkinkan analis data melakukan tugas-tugas berikut:

Untuk informasi selengkapnya tentang koneksi, lihat Pengantar koneksi.

Sebelum memulai

  • Mengaktifkan BigQuery Connection API.

    Mengaktifkan API

  • Untuk mendapatkan izin yang Anda perlukan guna membuat koneksi Resource Cloud, minta administrator Anda untuk memberi Anda peran IAM berikut:

    Untuk informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

    Jika Anda ingin membuat kueri data terstruktur menggunakan tabel BigLake berdasarkan Cloud Storage atau data tidak terstruktur menggunakan tabel objek, akun layanan yang terkait dengan koneksi juga harus memiliki peran Storage Viewer (roles/storage.viewer) di bucket yang berisi data eksternal.
  • Pastikan versi Google Cloud SDK Anda adalah 366.0.0 atau yang lebih baru:
    gcloud version

    Jika perlu, update Google Cloud SDK.

  • Opsional: Untuk Terraform, gunakan Terraform GCP versi 4.25.0 atau yang lebih baru. Anda dapat mendownload versi terbaru dari download HashiCorp Terraform.

Pertimbangan lokasi

Saat Anda menggunakan Cloud Storage untuk menyimpan file data, sebaiknya gunakan bucket single-region atau dual-region Cloud Storage untuk performa yang optimal, bukan bucket multi-region.

Membuat koneksi resource Cloud

BigLake menggunakan koneksi untuk mengakses Cloud Storage. Anda dapat menggunakan koneksi ini dengan satu tabel atau sekelompok tabel.

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Untuk membuat koneksi, klik Add, lalu klik Connections to external data sources.

  3. Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).

  4. Di kolom Connection ID, masukkan nama untuk koneksi Anda.

  5. Klik Create connection.

  6. Klik Go to connection.

  7. Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.

bq

  1. Di lingkungan command line, buat koneksi:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Parameter --project_id akan mengganti project default.

    Ganti kode berikut:

    • REGION: region koneksi Anda
    • PROJECT_ID: project ID Google Cloud Anda
    • CONNECTION_ID: ID untuk koneksi Anda

    Saat Anda membuat resource koneksi, BigQuery akan membuat akun layanan sistem unik dan mengaitkannya dengan koneksi.

    Pemecahan masalah: Jika Anda mendapatkan error koneksi berikut, update Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Ambil dan salin ID akun layanan untuk digunakan di langkah berikutnya:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Outputnya mirip dengan hal berikut ini:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Tambahkan bagian berikut ke dalam file main.tf Anda.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Ganti kode berikut:

  • CONNECTION_ID: ID untuk koneksi Anda
  • PROJECT_ID: project ID Google Cloud Anda
  • REGION: region koneksi Anda

Memberikan akses ke akun layanan

Jika ingin membuat fungsi jarak jauh, Anda harus memberikan peran yang diperlukan ke Cloud Functions atau Cloud Run.

Jika ingin terhubung ke Cloud Storage, Anda harus memberikan akses hanya baca ke Cloud Storage kepada koneksi baru tersebut, sehingga BigQuery dapat mengakses file atas nama pengguna.

Pilih salah satu opsi berikut:

Konsol

Sebaiknya Anda memberikan peran IAM Storage Object Viewer (roles/storage.objectViewer) ke akun layanan resource koneksi, yang memungkinkan akun layanan mengakses bucket Cloud Storage.

  1. Buka halaman IAM & Admin.

    Buka IAM & Admin

  2. Klik Add.

    Dialog Add principals akan terbuka.

  3. Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.

  4. Di kolom Select a role, pilih Cloud Storage, lalu pilih Storage Object Viewer.

  5. Klik Save.

gsutil

Gunakan perintah gsutil iam ch:

gsutil iam ch serviceAccount:MEMBER:objectViewer gs://example-bucket

Ganti MEMBER dengan ID akun layanan yang Anda salin sebelumnya.

Untuk informasi selengkapnya, lihat Menambahkan akun utama ke kebijakan tingkat bucket.

Terraform

Tambahkan bagian berikut ke file main.tf Anda.

## This grants permissions to the service account of the connection created in the last step.
resource "google_project_iam_member" "connectionPermissionGrant" {
        project = "PROJECT_ID"
        role = "roles/storage.objectViewer"
        member = format("serviceAccount:%s", google_bigquery_connection.connection.cloud_resource[0].service_account_id)
    }    

Berbagi koneksi dengan pengguna

Anda dapat memberikan peran berikut untuk mengizinkan pengguna membuat kueri data dan mengelola koneksi:

  • roles/bigquery.connectionUser: memungkinkan pengguna menggunakan koneksi untuk terhubung dengan sumber data eksternal dan menjalankan kueri pada sumber data tersebut.

  • roles/bigquery.connectionAdmin: memungkinkan pengguna mengelola koneksi.

Untuk informasi selengkapnya tentang peran dan izin IAM di BigQuery, baca Peran dan izin bawaan.

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

    Koneksi dicantumkan dalam project Anda, dalam grup yang disebut Koneksi eksternal.

  2. Di panel Penjelajah, klik nama project Anda > Koneksi eksternal > koneksi.

  3. Di panel Detail, klik Bagikan untuk membagikan koneksi. Kemudian, lakukan hal berikut:

    1. Dalam dialog Izin koneksi, bagikan koneksi dengan akun utama lain dengan menambahkan atau mengedit akun utama.

    2. Klik Save.

bq

Anda tidak dapat berbagi koneksi dengan alat command line bq. Untuk berbagi koneksi, gunakan konsol Google Cloud atau metode BigQuery Connections API untuk melakukannya.

API

Gunakan metode projects.locations.connections.setIAM di bagian referensi REST API Koneksi BigQuery, dan berikan instance resource policy.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Langkah selanjutnya