API 요청 승인

BigQuery API는 OAuth 2.0 액세스 토큰 또는 JSON 웹 토큰(JWT)을 사용하여 요청을 승인합니다. 이러한 토큰은 API에 대한 임시 액세스 권한을 부여합니다.

가능한 경우 애플리케이션에서 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 OAuth 2.0 및 JWT를 포함하여 잘 알려진 소스에서 사용자 인증 정보를 검색해야 합니다. 자세한 내용은 사용자 인증 정보 자동으로 찾기를 참조하세요.

ADC를 사용할 수 없는 경우 Google의 OAuth 2.0 서버를 사용하여 OAuth 2.0 액세스 토큰을 가져오거나 인증에 서비스 계정을 사용하는 경우 대신 서명된 JWT를 사용합니다. JWT를 사용하면 API 호출을 수행하기 전에 Google의 승인 서버로 네트워크 요청을 수행하지 않아도 됩니다.

시작하기 전에

OAuth 2.0으로 인증

이 섹션에서는 BigQuery API에 OAuth 2.0 액세스 토큰을 제공하는 방법을 보여줍니다. BigQuery 클라이언트 라이브러리를 사용할 경우 이 작업이 자동으로 수행되므로 이 정보가 필요하지 않습니다.

범위

액세스 토큰에는 토큰의 액세스를 제한하는 범위가 적용됩니다. 전체 Google API 범위 목록에서 BigQuery API 관련 범위를 확인해 보세요.

액세스 토큰 가져오기

애플리케이션 기본 사용자 인증 정보를 사용해 임시 액세스 토큰을 가져오세요.

명령줄

Google Cloud CLI를 사용하여 액세스 토큰을 인쇄하세요.

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"

다른 환경에서 액세스 토큰을 가져오는 방법은 인증 가이드를 참조하세요.

액세스 토큰은 임시 승인만 제공하기 때문에 주기적으로 갱신해야 합니다.

요청 승인

액세스 토큰으로 BigQuery API에 대한 요청을 승인하려면 OAuth 2.0 토큰 사용 방법 중 하나를 사용하세요.

요청 헤더

Bearer ACCESS_TOKEN 값으로 Authorization 요청 헤더에 토큰을 설정합니다.

명령줄

curl -H "Authorization: Bearer $ACCESS_TOKEN" \
  "https://www.googleapis.com/bigquery/v2/projects/$GOOGLE_CLOUD_PROJECT/datasets"

JWT로 인증

JWT를 사용하여 다음과 같은 방법으로 인증할 수 있습니다.

대상

JWT의 경우 범위 대신 대상 클레임이 사용됩니다. BigQuery API의 경우 대상 값을 https://bigquery.googleapis.com/으로 설정합니다.

클라이언트 라이브러리로 JWT 만들기

Google Cloud Console에서 또는 gcloud CLI를 사용하여 생성된 서비스 계정 키의 경우 JWT 서명을 제공하는 클라이언트 라이브러리를 사용합니다. 다음 목록은 많이 사용되는 프로그래밍 언어에 적합한 몇 가지 옵션을 제공합니다.

자바 예시

다음 예시에서는 자바용 BigQuery 클라이언트 라이브러리를 사용하여 JWT를 만들고 서명합니다.

import com.google.auth.Credentials;
import com.google.auth.oauth2.ServiceAccountJwtAccessCredentials;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;

import java.io.FileInputStream;
import java.net.URI;

public class Example {
    public static void main(String... args) throws Exception {
        String projectId = "myproject";
        // Load JSON file that contains service account keys and create ServiceAccountJwtAccessCredentials object.
        String credentialsPath = "/path/to/key.json";
        URI audience = URI.create("https://bigquery.googleapis.com/");
        Credentials credentials = null;
        try (FileInputStream is = new FileInputStream(credentialsPath)) {
            credentials = ServiceAccountJwtAccessCredentials.fromStream(is, audience);
        }
        // Instantiate BigQuery client with the credentials object.
        BigQuery bigquery =
                BigQueryOptions.newBuilder().setCredentials(credentials).build().getService();
        // Use the client to list BigQuery datasets.
        System.out.println("Datasets:");
        bigquery
            .listDatasets(projectId)
            .iterateAll()
            .forEach(dataset -> System.out.printf("%s%n", dataset.getDatasetId().getDataset()));
    }
}

REST 또는 gcloud CLI로 JWT 만들기

시스템 관리 서비스 계정의 경우 JWT를 수동으로 조합한 다음 REST 메서드 projects.serviceAccounts.signJwt 또는 Google Cloud CLI 명령어 gcloud beta iam service-accounts sign-jwt를 사용하여 JWT에 서명합니다. 이러한 방법 중 하나를 사용하려면 서비스 계정 토큰 생성자 Identity and Access Management 역할의 구성원이어야 합니다.

gcloud CLI 예시

다음 예시에서는 JWT를 조합한 후 gcloud beta iam service-accounts sign-jwt 명령어를 사용하여 서명하는 bash 스크립트를 보여줍니다.

#!/bin/bash

SA_EMAIL_ADDRESS="myserviceaccount@myproject.iam.gserviceaccount.com"

TMP_DIR=$(mktemp -d /tmp/sa_signed_jwt.XXXXX)
trap "rm -rf ${TMP_DIR}" EXIT
JWT_FILE="${TMP_DIR}/jwt-claim-set.json"
SIGNED_JWT_FILE="${TMP_DIR}/output.jwt"

IAT=$(date '+%s')
EXP=$((IAT+3600))

cat <<EOF > $JWT_FILE
{
  "aud": "https://bigquery.googleapis.com/",
  "iat": $IAT,
  "exp": $EXP,
  "iss": "$SA_EMAIL_ADDRESS",
  "sub": "$SA_EMAIL_ADDRESS"
}
EOF

gcloud beta iam service-accounts sign-jwt --iam-account $SA_EMAIL_ADDRESS $JWT_FILE $SIGNED_JWT_FILE

echo "Datasets:"
curl -L -H "Authorization: Bearer $(cat $SIGNED_JWT_FILE)" \
-X GET \
"https://bigquery.googleapis.com/bigquery/v2/projects/myproject/datasets?alt=json"

다음 단계

  • 프로그래매틱 방식으로 OAuth 2.0 액세스 토큰을 가져오는 방법은 인증 가이드를 참조하세요.