Autenticar com JWTs
A API BigQuery aceita JSON Web Tokens (JWTs) para autenticar solicitações.
Como prática recomendada, use o Application Default Credentials (ADC) para autenticação no BigQuery. Se não for possível usar o ADC e você estiver usando uma conta de serviço para autenticação, use um JWT assinado. Os JWTs permitem que você faça uma chamada de API sem uma solicitação de rede para o servidor de autorização do Google.
É possível usar JWTs para autenticação das seguintes maneiras:
- Para chaves de conta de serviço criadas no Google Cloud console ou com a CLI gcloud, use uma biblioteca de cliente que forneça assinatura JWT.
- Para contas de serviço gerenciadas pelo sistema, use a API REST ou a CLI gcloud.
Escopo e público-alvo
Use escopos com a conta de serviço sempre que possível. Se não for possível, use uma reivindicação de público-alvo. Para as APIs do BigQuery, defina o valor de público-alvo como https://bigquery.googleapis.com/.
Criar JWTs com bibliotecas de cliente
Para chaves de conta de serviço criadas no console Google Cloud ou com a CLI gcloud, use uma biblioteca de cliente que forneça assinatura JWT. A lista a seguir fornece algumas opções apropriadas para linguagens de programação conhecidas:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Classe ServiceAccountCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Exemplo do Java
No exemplo a seguir, usamos a biblioteca de cliente do BigQuery para Java para criar e assinar um JWT. O escopo padrão da API BigQuery é definido como https://www.googleapis.com/auth/bigquery na biblioteca de cliente.
import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.bigquery.BigQuery; import com.google.cloud.bigquery.BigQueryOptions; import com.google.common.collect.ImmutableList; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; public class Example { public static void main(String... args) throws IOException { String projectId = "myproject"; // Load JSON file that contains service account keys and create ServiceAccountCredentials object. String credentialsPath = "/path/to/key.json"; ServiceAccountCredentials credentials = null; try (FileInputStream is = new FileInputStream(credentialsPath)) { credentials = ServiceAccountCredentials.fromStream(is); // The default scope for BigQuery is used. // Alternatively, use `.setScopes()` to set custom scopes. credentials = credentials.toBuilder() .setUseJwtAccessWithScope(true) .build(); } // 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())); } } Criar JWTs com REST ou a CLI gcloud
Para contas de serviço gerenciadas pelo sistema, é necessário montar o JWT manualmente e usar o método REST projects.serviceAccounts.signJwt ou o comando da Google Cloud CLI gcloud beta iam service-accounts sign-jwt para assinar o JWT. Para usar uma dessas abordagens, é preciso ser membro do papel de criador de tokens da conta de serviço de gerenciamento de identidade e acesso.
Exemplo da CLI gcloud
O exemplo a seguir mostra um script bash que monta um JWT e usa o comando gcloud beta iam service-accounts sign-jwt para assiná-lo.
#!/bin/bash SA_EMAIL_ADDRESS="[email protected]" 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" A seguir
- Saiba mais sobre a autenticação do BigQuery.
- Saiba como autenticar com credenciais de usuário final.