Menggunakan akun layanan

Beberapa sumber data mendukung autentikasi transfer data menggunakan akun layanan melalui Konsol Google Cloud, API, atau command line bq. Akun layanan adalah Akun Google yang terkait dengan project Google Cloud Anda. Akun layanan dapat menjalankan tugas, seperti kueri terjadwal atau pipeline batch processing dengan mengautentikasi menggunakan kredensial akun layanan, bukan kredensial pengguna.

Anda dapat mengupdate transfer data yang ada dengan kredensial akun layanan. Untuk mengetahui informasi selengkapnya, lihat Mengupdate kredensial transfer data.

Situasi berikut memerlukan update kredensial:

  • Transfer Anda gagal memberikan otoritas akses pengguna ke sumber data:

    Error code 401 : Request is missing required authentication credential. UNAUTHENTICATED

  • Anda akan menerima error INVALID_USER saat mencoba menjalankan transfer:

    Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID

Untuk mempelajari lebih lanjut cara melakukan autentikasi dengan akun layanan, lihat Pengantar autentikasi.

Sumber data dengan dukungan akun layanan

BigQuery Data Transfer Service dapat menggunakan kredensial akun layanan untuk transfer dengan hal-hal berikut:

Sebelum memulai

  • Pastikan Anda telah menyelesaikan semua tindakan yang diperlukan dalam Mengaktifkan BigQuery Data Transfer Service.
  • Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.

Izin yang diperlukan

Untuk mengupdate transfer data agar menggunakan akun layanan, Anda harus memiliki izin berikut:

  • Izin bigquery.transfers.update untuk mengubah transfer.

    Peran IAM roles/bigquery.admin bawaan mencakup izin ini.

  • Akses ke akun layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran akun layanan kepada pengguna, lihat Peran Service Account User.

Pastikan akun layanan yang Anda pilih untuk menjalankan transfer memiliki izin berikut:

  • Izin bigquery.datasets.get dan bigquery.datasets.update pada set data target. Jika tabel menggunakan kontrol akses level kolom, akun layanan juga harus memiliki izin bigquery.tables.setCategory.

    Peran IAM bigquery.admin bawaan mencakup semua izin ini. Untuk mengetahui informasi selengkapnya tentang peran IAM dalam BigQuery Data Transfer Service, lihat Pengantar IAM.

  • Akses ke sumber data transfer yang dikonfigurasi. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan untuk berbagai sumber data, lihat Sumber data dengan dukungan akun layanan.

Mengupdate kredensial transfer data

Konsol

Prosedur berikut memperbarui konfigurasi transfer data untuk mengautentikasi sebagai akun layanan, bukan akun pengguna individual Anda.

  1. Di konsol Google Cloud, buka halaman Data transfers.

    Buka Transfer data

  2. Klik transfer di daftar transfer data.

  3. Klik EDIT untuk memperbarui konfigurasi transfer.

    Klik edit untuk mengedit transfer data yang ada

  4. Di kolom Service Account, masukkan nama akun layanan.

  5. Klik Save.

bq

Untuk mengupdate kredensial transfer data, Anda dapat menggunakan alat command line bq untuk mengupdate konfigurasi transfer.

Gunakan perintah bq update dengan flag --transfer_config, --update_credentials, dan --service_account_name.

Misalnya, perintah berikut mengupdate konfigurasi transfer data untuk melakukan autentikasi sebagai akun layanan, bukan akun pengguna individual Anda:

bq update \
--transfer_config \
--update_credentials \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38 \

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.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update credentials in transfer config.
public class UpdateCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    TransferConfig transferConfig = TransferConfig.newBuilder().setName(configId).build();
    FieldMask updateMask = FieldMaskUtil.fromString("service_account_name");
    updateCredentials(transferConfig, serviceAccount, updateMask);
  }

  public static void updateCredentials(
      TransferConfig transferConfig, String serviceAccount, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .setServiceAccountName(serviceAccount)
              .build();
      dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Credentials updated successfully");
    } catch (ApiException ex) {
      System.out.print("Credentials was not updated." + ex.toString());
    }
  }
}

Python

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

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

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["service_account_name"]),
        "service_account_name": service_account_name,
    }
)

print("Updated config: '{}'".format(transfer_config.name))