서비스 계정 사용

일부 데이터 소스는 Google Cloud 콘솔, API, bq 명령줄을 통해 서비스 계정을 사용한 데이터 전송 인증을 지원합니다. 서비스 계정은 Google Cloud 프로젝트와 연결된 Google 계정입니다. 서비스 계정은 사용자 인증 정보가 아닌 서비스 계정 사용자 인증 정보를 사용해서 인증을 수행하여 예약된 쿼리 또는 일괄 처리 파이프라인과 같은 작업을 실행할 수 있습니다.

서비스 계정의 사용자 인증 정보를 사용하여 기존 데이터 전송을 업데이트할 수 있습니다. 자세한 내용은 데이터 전송 사용자 인증 정보 업데이트를 참조하세요.

다음 상황에서는 사용자 인증 정보를 업데이트해야 합니다.

  • 전송 중 사용자의 데이터 소스 액세스를 승인하지 못했습니다.

    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 Data Transfer Service는 다음을 포함한 전송에 서비스 계정 사용자 인증 정보를 사용할 수 있습니다.

시작하기 전에

  • BigQuery Data Transfer Service 사용 설정에 필요한 모든 작업을 완료했는지 확인합니다.
  • 사용자에게 이 문서의 각 태스크를 수행하는 데 필요한 권한을 부여하는 Identity and Access Management(IAM) 역할을 부여합니다.

필수 권한

서비스 계정을 사용하도록 데이터 전송을 업데이트하려면 다음 권한이 있어야 합니다.

  • 전송을 수정할 수 있는 bigquery.transfers.update 권한.

    사전 정의된 roles/bigquery.admin IAM 역할에 이 권한이 포함되어 있습니다.

  • 서비스 계정에 대한 액세스 권한. 사용자에게 서비스 계정 역할을 부여하는 방법에 대한 자세한 내용은 서비스 계정 사용자 역할을 참조하세요.

전송을 실행하기 위해 선택한 서비스 계정에 다음 권한이 있는지 확인합니다.

  • 대상 데이터 세트에 대한 bigquery.datasets.getbigquery.datasets.update 권한. 테이블에서 열 수준 액세스 제어를 사용하는 경우 서비스 계정에 bigquery.tables.setCategory 권한도 있어야 합니다.

    사전 정의된 IAM 역할 bigquery.admin에 이러한 모든 권한이 포함되어 있습니다. BigQuery Data Transfer Service의 IAM 역할에 대한 자세한 내용은 IAM 소개를 참조하세요.

  • 구성된 전송 데이터 소스에 대한 액세스 권한. 여러 데이터 소스에 필요한 권한에 대한 자세한 내용은 서비스 계정 지원이 포함된 데이터 소스를 참조하세요.

데이터 전송 사용자 인증 정보 업데이트

콘솔

다음 절차에서는 개별 사용자 계정 대신 서비스 계정으로 인증을 수행하도록 데이터 전송 구성을 업데이트합니다.

  1. Google Cloud 콘솔에서 데이터 전송 페이지로 이동합니다.

    데이터 전송으로 이동

  2. 데이터 전송 목록에서 전송을 클릭합니다.

  3. 수정을 클릭하여 전송 구성을 업데이트합니다.

    수정을 클릭하여 기존 데이터 전송 수정

  4. 서비스 계정 필드에 서비스 계정 이름을 입력합니다.

  5. 저장을 클릭합니다.

bq

데이터 전송의 사용자 인증 정보를 업데이트하려면 bq 명령줄 도구를 사용하여 전송 구성을 업데이트하면 됩니다.

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

이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용Java 설정 안내를 따르세요. 자세한 내용은 BigQuery Java API 참고 문서를 확인하세요.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.

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

이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참고 문서를 확인하세요.

BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.

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