Menghubungkan ke Amazon S3
Sebagai administrator BigQuery, Anda dapat membuat koneksi untuk memungkinkan analis data mengakses data yang tersimpan di bucket Amazon Simple Storage Service (Amazon S3).
BigQuery Omni mengakses data Amazon S3 melalui koneksi. Setiap koneksi memiliki pengguna Identity and Access Management Amazon Web Services (AWS) yang unik. Anda memberikan izin kepada pengguna melalui peran AWS IAM. Kebijakan dalam peran AWS IAM menentukan data yang dapat diakses BigQuery untuk setiap koneksi.
Koneksi diperlukan untuk membuat kueri data Amazon S3 dan mengekspor hasil kueri dari BigQuery ke bucket Amazon S3 Anda.
Sebelum memulai
Pastikan Anda sudah membuat resource berikut:
- Project Google Cloud dengan BigQuery Connection API diaktifkan.
- Jika menggunakan model harga berbasis kapasitas, pastikan Anda telah mengaktifkan BigQuery Reservation API untuk project Anda. Untuk informasi tentang harga, lihat harga BigQuery Omni.
- Akun AWS dengan izin untuk mengubah kebijakan IAM di AWS.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna membuat koneksi untuk mengakses data Amazon S3,
minta administrator untuk memberi Anda
peran IAM BigQuery Connection Admin (roles/bigquery.connectionAdmin
) pada project.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Membuat kebijakan AWS IAM untuk BigQuery
Pastikan Anda mengikuti praktik terbaik keamanan untuk Amazon S3. Sebaiknya Anda melakukan hal berikut:
- Siapkan kebijakan AWS yang mencegah akses ke bucket Amazon S3 melalui HTTP.
- Siapkan kebijakan AWS yang mencegah akses publik ke bucket Amazon S3 Anda.
- Gunakan enkripsi sisi server Amazon S3.
- Batasi izin yang diberikan ke Akun Google sesuai batas minimum yang diperlukan.
- Siapkan CloudTrails dan aktifkan peristiwa data Amazon S3.
Untuk membuat kebijakan AWS IAM, gunakan Konsol AWS atau Terraform:
Konsol AWS
- Buka konsol AWS Identity and Access Management (IAM). Pastikan Anda menggunakan akun yang memiliki bucket Amazon S3 yang ingin diakses.
- Pilih Kebijakan > Buat kebijakan (terbuka di tab baru).
Klik JSON dan tempelkan kode berikut ke editor:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
Ganti kode berikut:
BUCKET_NAME
: bucket Amazon S3 yang ingin diakses oleh BigQuery.EXPORT_PERM
(opsional): izin tambahan jika Anda ingin mengekspor data ke bucket Amazon S3. Ganti dengan"s3:PutObject"
- Untuk memisahkan kontrol akses ekspor, sebaiknya buat koneksi lain dengan peran AWS IAM terpisah dan berikan akses hanya tulis ke peran tersebut. Untuk kontrol akses yang lebih terperinci, Anda juga dapat membatasi akses peran ke jalur bucket tertentu.
Di kolom Nama, masukkan nama kebijakan, seperti
bq_omni_read_only
.Klik Buat kebijakan.
Kebijakan Anda dibuat dengan Amazon Resource Name (ARN) dalam format berikut:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Ganti kode berikut:
AWS_ACCOUNT_ID
: nomor ID pengguna AWS IAM koneksi.POLICY_NAME
: nama kebijakan yang Anda pilih.
Terraform
Tambahkan konfigurasi berikut ke konfigurasi Terraform untuk melampirkan kebijakan ke resource bucket Amazon S3:
resource "aws_iam_policy" "bigquery-omni-connection-policy" { name = "bigquery-omni-connection-policy" policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketLevelAccess", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKET_NAME"] }, { "Sid": "ObjectLevelAccess", "Effect": "Allow", "Action": ["s3:GetObject",EXPORT_PERM], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
Ganti kode berikut:
BUCKET_NAME
: bucket Amazon S3 yang ingin diakses oleh BigQuery.EXPORT_PERM
(opsional): izin tambahan jika Anda ingin mengekspor data ke bucket Amazon S3. Ganti dengan"s3:PutObject"
- Untuk memisahkan kontrol akses ekspor, sebaiknya buat koneksi lain dengan peran AWS IAM terpisah dan berikan akses hanya tulis ke peran tersebut. Untuk kontrol akses yang lebih terperinci, Anda juga dapat membatasi akses peran ke jalur bucket tertentu.
Membuat peran AWS IAM untuk BigQuery
Selanjutnya, buat peran yang mengizinkan akses ke bucket Amazon S3 dari dalam BigQuery. Peran ini menggunakan kebijakan yang Anda buat di bagian sebelumnya.
Untuk membuat peran AWS IAM, gunakan Konsol AWS atau Terraform:
Konsol AWS
- Buka konsol AWS IAM. Pastikan Anda menggunakan akun yang memiliki bucket Amazon S3 yang ingin diakses.
- Pilih Peran > Buat peran.
- Pada bagian Pilih jenis entitas tepercaya, pilih Identitas Web.
- Untuk Penyedia Identitas, pilih Google.
- Untuk Audiens, masukkan
00000
sebagai nilai placeholder. Anda akan mengganti nilai ini nanti. - Klik Berikutnya: Izin.
- Untuk memberikan akses peran ke data Amazon S3, lampirkan kebijakan IAM ke peran tersebut. Telusuri kebijakan yang Anda buat di bagian sebelumnya, lalu klik tombolnya.
- Klik Berikutnya: Tanda.
- Klik Berikutnya: Tinjau. Masukkan nama untuk peran, seperti
BQ_Read_Only
. - Klik Buat peran.
Terraform
Tambahkan kode di bawah ke konfigurasi Terraform Anda untuk membuat peran IAM dan menetapkan kebijakan ke peran yang dibuat:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] } EOF } resource "aws_iam_role_policy_attachment" "bigquery-omni-connection-role-attach" { role = aws_iam_role.bigquery-omni-connection-role.name policy_arn = aws_iam_policy.bigquery-omni-connection-policy.arn } output "bigquery_omni_role" { value = aws_iam_role.bigquery-omni-connection-role.arn }
Membuat koneksi
Untuk terhubung ke bucket Amazon S3, gunakan konsol Google Cloud, alat command line bq, atau library klien:
Konsol
Buka halaman BigQuery.
Di menu Add data
, pilih External data source.Di panel External data source, masukkan informasi berikut:
- Untuk Connection type, pilih BigLake on AWS (via BigQuery Omni).
- Untuk Connection ID, masukkan ID untuk resource koneksi. Anda dapat menggunakan huruf, angka, tanda hubung, dan garis bawah.
- Pilih lokasi tempat Anda ingin membuat koneksi.
- Opsional: Untuk Friendly name, masukkan nama yang mudah digunakan untuk koneksi, seperti
My connection resource
. Nama yang cocok dapat berupa nilai apa pun yang membantu Anda mengidentifikasi resource koneksi jika perlu mengubahnya nanti. - Opsional: Untuk Description, masukkan deskripsi untuk resource koneksi ini.
- Untuk AWS role id, masukkan ID peran IAM lengkap yang Anda buat
dalam format ini:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
.
Klik Create connection.
Klik Go to connection.
Di panel Connection info, salin identitas Google BigQuery. Ini adalah akun utama Google yang spesifik untuk setiap koneksi. Contoh:
BigQuery Google identity: 000000000000000000000
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "bigquery-omni-aws-connection" friendly_name = "bigquery-omni-aws-connection" description = "Created by Terraform" location = "AWS_LOCATION" aws { access_role { # This must be constructed as a string instead of referencing the AWS resources # directly to avoid a resource dependency cycle in Terraform. iam_role_id = "arn:aws:iam::AWS_ACCOUNT:role/IAM_ROLE_NAME" } } }
Ganti kode berikut:
AWS_LOCATION
: Lokasi Amazon S3 di Google CloudAWS_ACCOUNT
: ID akun AWS Anda.IAM_ROLE_NAME
: peran yang mengizinkan akses ke bucket Amazon S3 dari BigQuery. Gunakan nilai argumenname
dari resourceaws_iam_role
dalam Membuat peran AWS IAM untuk BigQuery.
bq
bq mk --connection --connection_type='AWS' \ --iam_role_id=arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME \ --location=AWS_LOCATION \ CONNECTION_ID
Ganti kode berikut:
AWS_ACCOUNT_ID
: nomor ID pengguna AWS IAM koneksiROLE_NAME
: nama kebijakan peran yang Anda pilihAWS_LOCATION
: Lokasi Amazon S3 di Google CloudCONNECTION_ID
: ID yang Anda berikan untuk resource koneksi ini.
Command line menampilkan output berikut:
Identity: IDENTITY_ID
Outputnya berisi hal berikut:
IDENTITY_ID
: akun utama Google yang dikontrol Google Cloud dan bersifat khusus untuk setiap koneksi.
Catat nilai IDENTITY_ID
.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Menambahkan hubungan kepercayaan ke peran AWS
BigQuery Omni menyediakan dua metode untuk mengakses data dengan aman dari Amazon S3. Anda dapat memberikan akses ke peran AWS kepada akun layanan Google Cloud. Atau, jika akun AWS Anda memiliki penyedia identitas kustom untuk accounts.google.com, Anda harus menambahkan akun layanan Google Cloud sebagai audiens ke penyedia tersebut:
Menambahkan kebijakan kepercayaan ke peran AWS
Hubungan kepercayaan memungkinkan koneksi tersebut mengambil peran dan mengakses data Amazon S3 seperti yang ditentukan dalam kebijakan peran.
Untuk menambahkan hubungan kepercayaan, gunakan Konsol AWS atau Terraform:
Konsol AWS
- Buka konsol AWS IAM. Pastikan Anda menggunakan akun yang memiliki bucket Amazon S3 yang ingin diakses.
- Pilih Peran.
- Pilih
ROLE_NAME
yang telah Anda buat. Klik Edit, lalu lakukan tindakan berikut:
Setel Durasi sesi maksimum ke 12 jam. Karena setiap kueri dapat berjalan hingga enam jam, durasi ini memungkinkan satu percobaan ulang tambahan. Peningkatan durasi sesi lebih dari 12 jam tidak akan memungkinkan percobaan ulang tambahan. Untuk informasi selengkapnya, lihat batas waktu eksekusi kueri/kueri multi-pernyataan.
Klik Simpan perubahan.
Pilih Hubungan Kepercayaan lalu klik Edit hubungan kepercayaan. Ganti konten kebijakan dengan konten berikut:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Ganti
IDENTITY_ID
dengan nilai identitas Google BigQuery, yang dapat Anda temukan di halaman konsol AWS untuk koneksi yang Anda buat.Klik Perbarui Kebijakan Kepercayaan.
Terraform
Update resource aws_iam_role
di konfigurasi Terraform untuk menambahkan hubungan kepercayaan:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${google_bigquery_connection.connection.aws[0].access_role[0].identity}" } } } ] } EOF }
Koneksi kini siap digunakan.
Mengonfigurasi penyedia identitas AWS kustom
Jika akun AWS Anda memiliki penyedia identitas kustom untuk accounts.google.com, Anda harus menambahkan IDENTITY_ID sebagai audiens kepada penyedia. Anda dapat melakukannya dengan:
Di konsol AWS, buka halaman IAM.
Buka IAM > Penyedia Identitas.
Pilih penyedia identitas untuk accounts.google.com.
Klik Tambahkan Audiens dan tambahkan IDENTITY_ID sebagai audiens.
Koneksi kini siap digunakan.
Berbagi koneksi dengan pengguna
Anda dapat memberikan peran berikut untuk mengizinkan pengguna membuat kueri data dan mengelola koneksi:
roles/bigquery.connectionUser
: memungkinkan pengguna menggunakan koneksi untuk terhubung dengan sumber data eksternal dan menjalankan kueri pada sumber data tersebut.roles/bigquery.connectionAdmin
: memungkinkan pengguna mengelola koneksi.
Untuk informasi selengkapnya tentang peran dan izin IAM di BigQuery, baca Peran dan izin bawaan.
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Koneksi dicantumkan dalam project Anda, dalam grup yang disebut Koneksi eksternal.
Di panel Penjelajah, klik nama project Anda > Koneksi eksternal > koneksi.
Di panel Detail, klik Bagikan untuk membagikan koneksi. Kemudian, lakukan hal berikut:
Dalam dialog Izin koneksi, bagikan koneksi dengan akun utama lain dengan menambahkan atau mengedit akun utama.
Klik Simpan.
bq
Anda tidak dapat berbagi koneksi dengan alat command line bq. Untuk berbagi koneksi, gunakan konsol Google Cloud atau metode BigQuery Connections API untuk melakukannya.
API
Gunakan
metode projects.locations.connections.setIAM
di bagian referensi REST API Koneksi BigQuery, dan
berikan instance resource policy
.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Langkah selanjutnya
- Pelajari berbagai jenis koneksi.
- Pelajari cara mengelola koneksi.
- Pelajari BigQuery Omni.
- Gunakan lab BigQuery Omni dengan AWS.
- Pelajari tabel BigLake.
- Pelajari cara membuat kueri data Amazon S3.
- Pelajari cara mengekspor hasil kueri ke bucket Amazon S3.