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.
Zielgruppe
Für JWTs wird anstelle eines Bereichs eine Zielgruppenanforderung verwendet.
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 ServiceAccountJwtAccessCredentials
- 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.
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()));
}
}
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="[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"
Nächste Schritte
- Weitere Informationen zur BigQuery-Authentifizierung
- Mit Anmeldedaten von Endnutzern authentifizieren