Dienstkonten verwenden

Einige Datenquellen unterstützen die Datenübertragungsauthentifizierung über ein Dienstkonto über die Google Cloud Console, die API oder die Befehlszeile bq. Ein Dienstkonto ist ein Google-Konto, das mit Ihrem Google Cloud-Projekt verknüpft ist. Ein Dienstkonto kann Jobs wie geplante Abfragen oder Batchverarbeitungs-Pipelines ausführen. Die Authentifizierung erfolgt mit den Anmeldedaten des Dienstkontos anstelle der Anmeldedaten eines Nutzers.

Sie können eine vorhandene Datenübertragung mit den Anmeldedaten eines Dienstkontos aktualisieren. Weitere Informationen finden Sie unter Anmeldedaten für die Datenübertragung aktualisieren.

In folgenden Situationen müssen Anmeldedaten aktualisiert werden:

  • Bei der Übertragung wurde der Zugriff des Nutzers auf die Datenquelle nicht autorisiert:

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

  • Sie erhalten die Fehlermeldung INVALID_USER, wenn Sie versuchen, die Übertragung auszuführen:

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

Weitere Informationen zur Authentifizierung über Dienstkonten finden Sie unter Einführung in die Authentifizierung.

Datenquellen mit Unterstützung für Dienstkonten

BigQuery Data Transfer Service kann Dienstkonto-Anmeldedaten für Übertragungen so verwenden:

Hinweise

  • Prüfen Sie, ob Sie alle erforderlichen Aktionen zum Aktivieren des BigQuery Data Transfer Service ausgeführt haben.
  • Weisen Sie IAM-Rollen (Identity and Access Management) zu, die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument gewähren.

Erforderliche Berechtigungen

Wenn Sie eine Datenübertragung auf die Verwendung eines Dienstkontos aktualisieren möchten, benötigen Sie folgende Berechtigungen:

  • Die Berechtigung bigquery.transfers.update zum Ändern der Übertragung.

    Die vordefinierte IAM-Rolle roles/bigquery.admin enthält diese Berechtigung.

  • Zugriff auf das Dienstkonto. Weitere Informationen zum Zuweisen der Dienstkontorolle zu Nutzern finden Sie unter Dienstkontonutzerrolle.

Achten Sie darauf, dass das Dienstkonto, mit dem Sie die Übertragung ausführen möchten, folgende Berechtigungen hat:

  • Die Berechtigungen bigquery.datasets.get und bigquery.datasets.update für das Ziel-Dataset. Wenn die Tabelle die Zugriffssteuerung auf Spaltenebene nutzt, muss das Dienstkonto auch die bigquery.tables.setCategory-Berechtigung haben.

    Die vordefinierte Cloud IAM-Rolle bigquery.admin enthält alle diese Berechtigungen. Weitere Informationen zu IAM-Rollen im BigQuery Data Transfer Service finden Sie in der Einführung in IAM.

  • Zugriff auf die konfigurierte Übertragungsdatenquelle. Weitere Informationen zu den erforderlichen Berechtigungen für verschiedene Datenquellen finden Sie unter Datenquellen mit Dienstkontounterstützung.

Anmeldedaten für die Datenübertragung aktualisieren

Console

Mit dem folgenden Verfahren wird eine Datenübertragungskonfiguration so aktualisiert, dass sie sich anstelle Ihres individuellen Nutzerkontos als Dienstkonto authentifiziert.

  1. Rufen Sie in der Google Cloud Console die Seite Datenübertragungen auf.

    Zu „Datenübertragungen”

  2. Klicken Sie in der Liste der Datenübertragungen auf die Übertragung.

  3. Klicken Sie auf Bearbeiten, um die Übertragungskonfiguration zu aktualisieren.

    Klicken Sie auf „Bearbeiten“, um eine vorhandene Datenübertragung zu bearbeiten

  4. Geben Sie im Feld Dienstkonto den Namen des Dienstkontos ein.

  5. Klicken Sie auf Speichern.

bq

Wenn Sie die Anmeldedaten einer Datenübertragung aktualisieren, können Sie das bq-Befehlszeilentool verwenden, um die Übertragungskonfiguration zu aktualisieren.

Verwenden Sie den bq update-Befehl mit den Flags --transfer_config, --update_credentials und --service_account_name.

Mit dem folgenden Befehl wird beispielsweise eine Datenübertragungskonfiguration so aktualisiert, dass sie sich anstelle Ihres individuellen Nutzerkontos als Dienstkonto authentifiziert:

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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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))