Autentica con JWT
La API de BigQuery acepta tokens web JSON (JWT) para autenticar solicitudes.
Como práctica recomendada, debes usar las credenciales predeterminadas de la aplicación (ADC) para autenticarte en BigQuery. Si no puedes usar ADC y usas una cuenta de servicio para la autenticación, puedes usar un JWT firmado en su lugar. Los JWT te permiten realizar una llamada a la API sin una solicitud de red al servidor de autorización de Google.
Puedes usar JWT para autenticarte de las siguientes maneras:
- Para las claves de la cuenta de servicio creadas en la consola de Google Cloud o mediante la CLI de gcloud, usa una biblioteca cliente que proporcione firma de JWT.
- Para las cuentas de servicio administradas por el sistema, usa la API de REST o la CLI de gcloud.
Alcance y público
Usa permisos con la cuenta de servicio cuando sea posible. Si no es posible, puedes usar un reclamación de público.
En las API de BigQuery, establece el valor del público en https://bigquery.googleapis.com/
.
Crea JWT con bibliotecas cliente
Para las claves de cuenta de servicio creadas en la consola de Google Cloud o mediante la CLI de gcloud, usa una biblioteca cliente que proporcione firma de JWT. En la siguiente lista, se proporcionan algunas opciones adecuadas para los lenguajes de programación populares:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Clase ServiceAccountCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Ejemplo de Java
En el siguiente ejemplo, se usa la biblioteca cliente de BigQuery para Java a fin de crear y firmar un JWT. El alcance predeterminado de la API de BigQuery se establece en https://www.googleapis.com/auth/bigquery
en la biblioteca 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()));
}
}
Crea JWT con REST o la CLI de gcloud
Para las cuentas de servicio administradas por el sistema, debes ensamblar el JWT de forma manual y, luego, usar el método RESTprojects.serviceAccounts.signJwt
o al comando gcloud beta iam service-accounts sign-jwt
de la CLI de Google Cloud. para firmar el JWT. Para usar cualquiera de estos enfoques, debes ser miembro del rol creador de tokens de cuenta de servicio de Identity and Access Management.
Ejemplo de la CLI de gcloud
En el siguiente ejemplo, se muestra una secuencia de comandos bash que ensambla un JWT y, luego, usa el comando gcloud beta iam service-accounts sign-jwt
para firmarlo.
#!/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"
¿Qué sigue?
- Obtén más información sobre la autenticación de BigQuery.
- Obtén información sobre cómo autenticar con credenciales de usuario final.