Autenticazione con JWT
L'API BigQuery accetta JWT (JSON Web Token) per di autenticare le richieste.
Come best practice, dovresti usare Credenziali predefinite dell'applicazione (ADC) per l'autenticazione in BigQuery. Se non puoi utilizzare ADC e utilizzi un account di servizio per l'autenticazione, puoi utilizza un JWT firmato . I JWT ti consentono di effettuare una chiamata API senza una richiesta di rete al server server di autorizzazione.
Puoi utilizzare i JWT per eseguire l'autenticazione nei seguenti modi:
- Per le chiavi degli account di servizio create nella console Google Cloud o utilizzando gcloud CLI, usa una libreria client che fornisce la firma JWT.
- Per gli account di servizio gestiti dal sistema, utilizza l'API REST o gcloud CLI.
Pubblico
Per i JWT,
rivendicazione del pubblico è
utilizzato al posto di un
ambito.
Per le API BigQuery, imposta il valore del pubblico su
https://bigquery.googleapis.com/
.
Creazione di JWT con librerie client
Per le chiavi degli account di servizio create nella console Google Cloud o utilizzando gcloud CLI, usa una libreria client che fornisce JWT firma. Il seguente elenco fornisce alcune opzioni appropriate per linguaggi di programmazione:
- Vai: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountJwtAccessCredentials
- Node.js: JWTAccess della classe
- PHP: ServiceAccountJwtAccessCredentials
- Python: modulo google.auth.jwt
- Ruby: Classe: Google::Auth::ServiceAccountJwtHeaderCredentials
Esempio Java
L'esempio seguente utilizza il metodo Libreria client BigQuery per Java per creare e firmare un JWT.
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()));
}
}
crea JWT con REST o gcloud CLI
Per gli account di servizio gestiti dal sistema, devi assemblare manualmente il JWT, quindi
usa il metodo REST
projects.serviceAccounts.signJwt
oppure il comando Google Cloud CLI
gcloud beta iam service-accounts sign-jwt
per firmare il JWT. Per utilizzare uno di questi approcci, devi essere membro del
Creatore token account di servizio
nel ruolo Identity and Access Management.
Esempio della gcloud CLI
L'esempio seguente mostra uno script bash che assembla un JWT e che utilizza
gcloud beta iam service-accounts sign-jwt
per 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"
Passaggi successivi
- Scopri di più su Autenticazione BigQuery.
- Scopri come con credenziali dell'utente finale.