Melakukan autentikasi dengan JWT
BigQuery API menerima Token Web JSON (JWT) untuk mengautentikasi permintaan.
Sebagai praktik terbaik, Anda harus menggunakan Kredensial Default Aplikasi (ADC) untuk melakukan autentikasi ke BigQuery. Jika tidak dapat menggunakan ADC dan menggunakan akun layanan untuk autentikasi, Anda dapat menggunakan JWT yang ditandatangani. Dengan JWT, Anda dapat melakukan panggilan API tanpa permintaan jaringan ke server otorisasi Google.
Anda dapat menggunakan JWT untuk mengautentikasi dengan cara berikut:
- Untuk kunci akun layanan yang dibuat di Google Cloud Console atau dengan gcloud CLI, gunakan library klien yang menyediakan penandatanganan JWT.
- Untuk akun layanan yang dikelola sistem, gunakan REST API atau gcloud CLI.
Cakupan dan Audiens
Gunakan cakupan dengan akun layanan jika memungkinkan. Jika tidak memungkinkan, Anda dapat menggunakan
klaim audiens.
Untuk BigQuery API, tetapkan nilai audiens ke https://bigquery.googleapis.com/
.
Membuat JWT dengan library klien
Untuk kunci akun layanan yang dibuat di Konsol Google Cloud atau dengan gcloud CLI, gunakan library klien yang menyediakan penandatanganan JWT. Daftar berikut memberikan beberapa opsi yang sesuai untuk bahasa pemrograman populer:
- Go: func JWTAccessTokenSourceFromJSON
- Java: Class ServiceAccountCredentials
- Node.js: Class JWTAccess
- PHP: ServiceAccountJwtAccessCredentials
- Python: modul google.auth.jwt
- Ruby: Class: Google::Auth::ServiceAccountJwtHeaderCredentials
Contoh Java
Contoh berikut menggunakan library klien BigQuery untuk Java guna membuat dan menandatangani JWT. Cakupan default untuk BigQuery API ditetapkan ke https://www.googleapis.com/auth/bigquery
di library klien.
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()));
}
}
Membuat JWT dengan REST atau gcloud CLI
Untuk akun layanan yang dikelola sistem, Anda harus menyusun JWT secara manual, lalu menggunakan metode REST projects.serviceAccounts.signJwt
atau perintah Google Cloud CLI gcloud beta iam service-accounts sign-jwt
untuk menandatangani JWT. Untuk menggunakan salah satu pendekatan ini, Anda harus menjadi anggota peran Identity and Access Management Service Account Token Creator.
Contoh gcloud CLI
Contoh berikut menunjukkan skrip bash yang menyusun JWT, lalu menggunakan perintah gcloud beta iam service-accounts sign-jwt
untuk menandatanganinya.
#!/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"
Langkah selanjutnya
- Pelajari lebih lanjut autentikasi BigQuery.
- Pelajari cara mengautentikasi dengan kredensial pengguna akhir.