Autentique com JWTs
A API BigQuery aceita tokens Web JSON (JWTs) para autenticar pedidos.
Como prática recomendada, deve usar as credenciais predefinidas da aplicação (ADC) para autenticar no BigQuery. Se não puder usar o ADC e estiver a usar uma conta de serviço para autenticação, pode usar um JWT assinado. Os JWTs permitem-lhe fazer uma chamada API sem um pedido de rede para o servidor de autorização da Google.
Pode usar JWTs para autenticar das seguintes formas:
- Para chaves de contas de serviço criadas na Google Cloud consola ou através da CLI gcloud, use uma biblioteca cliente que forneça a assinatura JWT.
- Para contas de serviço geridas pelo sistema, use a API REST ou a CLI gcloud.
Âmbito e público-alvo
Use âmbitos com a conta de serviço sempre que possível. Se não for possível, pode usar uma reivindicação de público-alvo.
Para as APIs BigQuery, defina o valor do público-alvo como
https://bigquery.googleapis.com/
.
Crie JWTs com bibliotecas de cliente
Para chaves de contas de serviço criadas na Google Cloud consola ou através da CLI gcloud, use uma biblioteca cliente que forneça a assinatura JWT. A lista seguinte apresenta algumas opções adequadas para linguagens de programação populares:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: google.auth.jwt module
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Exemplo de Java
O exemplo seguinte usa a
biblioteca cliente do BigQuery para Java
para criar e assinar um JWT. O âmbito predefinido da API BigQuery está definido como https://www.googleapis.com/auth/bigquery
na biblioteca 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()));
}
}
Crie JWTs com REST ou a CLI gcloud
Para contas de serviço geridas pelo sistema, tem de montar manualmente o JWT e, em seguida, usar o método REST projects.serviceAccounts.signJwt
ou o comando da CLI Google Cloud gcloud beta iam service-accounts sign-jwt
para assinar o JWT. Para usar qualquer uma destas abordagens, tem de ser membro da função de gestão de identidades e acessos
criador de tokens de contas de serviço.
Exemplo da CLI gcloud
O exemplo seguinte mostra um script bash que monta um JWT e, em seguida, usa o comando
gcloud beta iam service-accounts sign-jwt
para o assinar.
#!/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"
O que se segue?
- Saiba mais acerca da autenticação do BigQuery.
- Saiba como fazer a autenticação com credenciais do utilizador final.