S'authentifier avec des jetons JWT
L'API BigQuery accepte les jetons Web JSON (JWT) pour authentifier les requêtes.
Nous vous recommandons d'utiliser les identifiants par défaut de l'application (ADC) pour vous authentifier auprès de BigQuery. Si vous ne pouvez pas utiliser les identifiants par défaut de l'application et que vous utilisez un compte de service pour l'authentification, vous pouvez utiliser un jeton JWT signé à la place. Les jetons JWT vous permettent d'effectuer un appel d'API sans requête réseau vers le serveur d'autorisation de Google.
Vous pouvez utiliser des jetons JWT pour vous authentifier comme suit :
- Pour les clés de compte de service créées dans la console Google Cloud ou à l'aide de la gcloud CLI, utilisez une bibliothèque cliente qui fournit une signature JWT.
- Pour les comptes de service gérés par le système, utilisez l'API REST ou la CLI gcloud.
Champ d'application et audience
Utilisez des champs d'application avec le compte de service dans la mesure du possible. Sinon, vous pouvez utiliser une revendication d'audience.
Pour les API BigQuery, définissez la valeur de l'audience sur https://bigquery.googleapis.com/
.
Créer des jetons JWT avec des bibliothèques clientes
Pour les clés de compte de service créées dans la console Google Cloud ou à l'aide de la gcloud CLI, utilisez une bibliothèque cliente qui fournit une signature JWT. La liste suivante présente certaines options appropriées pour les langages de programmation courants :
- Go : func JWTAccessTokenSourceFromJSON
- Java : Classe ServiceAccountCredentials
- Node.js : Class JWTAccess
- PHP : ServiceAccountJwtAccessCredentials
- Python : google.auth.jwt module
- Ruby : Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Exemple Java
L'exemple suivant utilise la bibliothèque cliente BigQuery pour Java pour créer et signer un jeton JWT. Le champ d'application par défaut de l'API BigQuery est défini sur https://www.googleapis.com/auth/bigquery
dans la bibliothèque 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()));
}
}
Créer des jetons JWT avec REST ou gcloud CLI
Pour les comptes de service gérés par le système, vous devez assembler manuellement le jeton JWT, puis utiliser la méthode REST projects.serviceAccounts.signJwt
ou la commande gcloud beta iam service-accounts sign-jwt
de Google Cloud CLI pour signer le jeton JWT. Pour utiliser l'une de ces approches, vous devez disposer du rôle IAM (Identity and Access Management) Créateur de jetons du compte de service.
Exemple gcloud CLI
L'exemple suivant présente un script bash qui assemble un jeton JWT, puis utilise la commande gcloud beta iam service-accounts sign-jwt
pour le signer.
#!/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"
Étapes suivantes
- En savoir plus sur l'authentification BigQuery.
- Découvrez comment vous authentifier avec les identifiants de l'utilisateur final.