שימוש בחשבונות שירות עם שירות העברת הנתונים ל-BigQuery

שירות העברת הנתונים ל-BigQuery מאפשר לאמת העברות נתונים ממקורות נתונים נתמכים באמצעות חשבון שירות, במקום פרטי כניסה של משתמשים ספציפיים. חשבון שירות הוא חשבון Google שמשויך לפרויקט ב- Google Cloud , שיכול להריץ משימות כמו שאילתות מתוזמנות או צינורות עיבוד נתונים באצווה. אתם יכולים להגדיר אימות של חשבון שירות באמצעות מסוף Google Cloud , ה-API או שורת הפקודה של bq, ולעדכן העברות קיימות כשפרטי הכניסה משתנים.

קודי השגיאה הבאים מציינים מצבים שבהם צריך לעדכן את פרטי הכניסה:

  • העברת הנתונים נכשלה כי לא ניתנה הרשאה לגישה של המשתמש למקור הנתונים:

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

  • מופיעה השגיאה INVALID_USER כשמנסים להפעיל את ההעברה:

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

למידע נוסף על אימות באמצעות חשבונות שירות, קראו את מבוא לאימות.

מקורות נתונים עם תמיכה בחשבון שירות

שירות העברת הנתונים ל-BigQuery יכול להשתמש בפרטי כניסה לחשבון שירות להעברות מהמקורות הבאים:

לפני שמתחילים

  • מוודאים שביצעתם את כל הפעולות שנדרשות כדי להפעיל את שירות העברת הנתונים ל-BigQuery.
  • להקצות תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות שנדרשות כדי לבצע כל משימה שמופיעה במסמך הזה.

ההרשאות הנדרשות

כדי לעדכן העברת נתונים כך שתשתמש בחשבון שירות, אתם צריכים את ההרשאות הבאות:

  • הרשאת bigquery.transfers.update כדי לשנות את ההעברה.

    התפקיד המוגדר מראש roles/bigquery.admin ב-IAM כולל את ההרשאה הזו.

  • גישה לחשבון השירות. מידע נוסף על הקצאת התפקיד "משתמש בחשבון שירות" למשתמשים זמין במאמר התפקיד "משתמש בחשבון שירות".

חשוב לוודא שלחשבון השירות שבוחרים להפעלת ההעברה יש את ההרשאות הבאות:

  • ההרשאות bigquery.datasets.get ו-bigquery.datasets.update במערך הנתונים המיועד. אם בטבלה מוגדרת בקרת גישה ברמת העמודה, לחשבון השירות צריכה להיות גם ההרשאה bigquery.tables.setCategory.

    התפקיד המוגדר מראש bigquery.admin ב-IAM כולל את כל ההרשאות האלה. למידע נוסף על תפקידי IAM בשירות העברת הנתונים ל-BigQuery, קראו את המאמר מבוא ל-IAM.

  • גישה למקור הנתונים שהוגדר להעברה. למידע נוסף על ההרשאות הנדרשות למקורות נתונים שונים, קראו את המאמר מקורות נתונים עם תמיכה בחשבון שירות.

  • בהעברות מ-Google Ads, צריך להעניק לחשבון השירות הרשאה ברמת הדומיין. מידע נוסף זמין במדריך של Google Ads API בנושא חשבונות שירות.

עדכון פרטי הכניסה להעברת נתונים

אתם יכולים לעדכן העברת נתונים קיימת באמצעות פרטי הכניסה של חשבון שירות. צריך לעדכן את פרטי הכניסה במקרים הבאים:

  • העברת הנתונים נכשלה כי לא ניתנה הרשאה לגישה של המשתמש למקור הנתונים:

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

  • מופיעה השגיאה INVALID_USER כשמנסים להפעיל את ההעברה:

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

המסוף

בשלבים הבאים מוסבר איך לעדכן הגדרות של העברת נתונים כדי לבצע אימות באמצעות חשבון שירות במקום באמצעות חשבון המשתמש הפרטי שלכם.

  1. במסוף Google Cloud , נכנסים לדף העברות נתונים.

    מעבר אל "העברות נתונים"

  2. לוחצים על ההעברה ברשימת העברות הנתונים.

  3. לוחצים על EDIT כדי לעדכן את הגדרות ההעברה.

    לוחצים על סמל העריכה כדי לערוך העברת נתונים קיימת.

  4. בשדה Service Account, מזינים את השם של חשבון השירות.

  5. לוחצים על Save.

BQ

כדי לעדכן את פרטי הכניסה של העברת נתונים, אתם יכולים להשתמש בכלי שורת הפקודה של BigQuery כדי לעדכן את הגדרות ההעברה.

משתמשים בפקודה bq update עם הדגלים --transfer_config,‏ --update_credentials ו---service_account_name.

לדוגמה, הפקודה הבאה מעדכנת הגדרת העברת נתונים כדי לבצע אימות כחשבון שירות במקום כחשבון המשתמש הפרטי שלכם:

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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