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