Mit JWTs authentifizieren
Die BigQuery API akzeptiert JSON Web Tokens (JWTs) zur Authentifizierung von Anfragen.
Als Best Practice sollten Sie Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) zur Authentifizierung bei BigQuery verwenden. Wenn Sie keine ADC verwenden können und ein Dienstkonto zur Authentifizierung verwenden, können Sie stattdessen ein signiertes JWT verwenden. Mit JWTs können Sie einen API-Aufruf ohne Netzwerkanfrage an den Autorisierungsserver von Google ausführen.
Sie können JWTs auf folgende Arten für die Authentifizierung verwenden:
- Verwenden Sie für Dienstkontoschlüssel, die in der Google Cloud Console oder mithilfe der gcloud CLI erstellt wurden, eine Clientbibliothek, die JWT-Signaturen bereitstellt.
- Für vom System verwaltete Dienstkonten verwenden Sie die REST API oder die gcloud CLI.
Umfang und Zielgruppe
Verwenden Sie nach Möglichkeit Bereiche mit dem Dienstkonto. Wenn dies nicht möglich ist, können Sie eine Zielgruppenanforderung verwenden.
Legen Sie für die BigQuery APIs als Zielgruppenwert https://bigquery.googleapis.com/
fest.
JWTs mit Clientbibliotheken erstellen
Verwenden Sie für Dienstkontoschlüssel, die in der Google Cloud Console oder mithilfe der gcloud CLI erstellt wurden, eine Clientbibliothek, die JWT-Signaturen bereitstellt. Im Folgenden finden Sie einige geeignete Optionen für gängige Programmiersprachen:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Beispiel für Java
Im folgenden Beispiel wird die BigQuery-Clientbibliothek für Java verwendet, um ein JWT zu erstellen und zu signieren. Der Standardbereich für die BigQuery API ist in der Clientbibliothek auf https://www.googleapis.com/auth/bigquery
festgelegt.
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()));
}
}
JWTs mit REST oder der gcloud CLI erstellen
Für vom System verwaltete Dienstkonten müssen Sie das JWT manuell zusammenstellen und dann die REST-Methode projects.serviceAccounts.signJwt
oder den Google Cloud CLI-Befehl gcloud beta iam service-accounts sign-jwt
verwenden, um das JWT zu signieren. Sie müssen Mitglied der Rolle Ersteller von Dienstkonto-Tokens für die Identitäts- und Zugriffsverwaltung sein, um so vorzugehen.
Beispiel für die gcloud CLI
Das folgende Beispiel zeigt ein Bash-Skript, das ein JWT zusammenstellt und dann mit dem Befehl gcloud beta iam service-accounts sign-jwt
signiert.
#!/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"
Nächste Schritte
- Weitere Informationen zur BigQuery-Authentifizierung
- Mit Anmeldedaten von Endnutzern authentifizieren