1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara melindungi BigQuery API menggunakan Kontrol Layanan VPC. Codelab dimulai tanpa layanan API yang dilindungi oleh perimeter layanan, yang memungkinkan kueri untuk dijalankan pada set data publik, dan hasilnya disimpan dalam tabel project. Kueri berjalan di satu project dan tabel (tempat hasil disimpan) dibuat di project lain, yang meniru penyiapan tempat data dapat disimpan dalam satu project, tetapi perlu diakses menggunakan project yang berbeda.
Selanjutnya, kita akan memperkenalkan perimeter layanan untuk melindungi project data. Anda akan mempelajari cara memperbaiki pelanggaran yang diamati menggunakan aturan masuk dan keluar, kemudian menambahkan tingkat akses untuk membatasi akses menggunakan alamat IP internal. Tujuan codelab ini adalah:
- Pahami cara memperbaiki pelanggaran traffic masuk dan keluar menggunakan aturan traffic masuk dan keluar.
- Memahami alasan terjadinya pelanggaran tertentu.
- Menganalisis cakupan perbaikan pelanggaran yang diterapkan.
- Ubah perbaikan (aturan masuk / keluar) untuk mengubah cakupannya dengan memanfaatkan opsi untuk mengizinkan traffic dari alamat IP internal dalam jaringan VPC menggunakan tingkat akses.
2. Penyiapan dan Persyaratan Resource
Sebelum memulai
Dalam codelab ini, kami berasumsi bahwa Anda sudah mengetahui:
- Dasar-dasar untuk menjalankan kueri BigQuery: Anda dapat membaca codelab ini untuk mempelajari cara membuat kueri set data Wikipedia di BigQuery
- Cara membuat dan mengelola folder
- Cara membuat project dalam folder atau memindahkan project yang ada ke dalam folder
- Cara membuat kebijakan akses terbatas
- Cara membuat dan mengonfigurasi perimeter layanan
- Cara menemukan pelanggaran kebijakan keamanan di log
Penyiapan
Penyiapan awal kami dirancang sebagai berikut:
- Organisasi Google Cloud.
- Folder di bawah organisasi. Untuk codelab ini, kita akan menyebutnya
codelab-folder
. - Dua project Google Cloud ditempatkan di folder yang sama,
codelab-folder
. Untuk codelab ini, kami menyebutnyaproject-1
danproject-2
- Jika Anda belum membuat folder dan project, di Konsol Google Cloud, buat folder di bawah organisasi dan buat dua project baru di folder yang dibuat tersebut.
- Izin yang diperlukan:
- Peran IAM untuk mengelola folder: ditetapkan di tingkat folder
- Peran IAM untuk mengelola project: ditetapkan di level project
- Peran IAM yang diperlukan untuk mengonfigurasi Kontrol Layanan VPC: ditetapkan di tingkat organisasi
- Peran IAM untuk mengelola BigQuery: ditetapkan di level project
- Peran IAM untuk mengelola instance Compute Engine: ditetapkan di level project
- Akun penagihan untuk kedua project,
project-2
danproject-1
.
Membuat Perimeter Layanan Reguler
Dalam codelab ini, kita akan menggunakan perimeter layanan reguler yang melindungi project-1
.
- Buat perimeter reguler,
perimeter-1
, lalu tambahkanproject-1
.
Membuat VM Compute Engine
Dalam codelab ini, kita akan menggunakan 1 instance Compute Engine di project-2
, yang terletak di us-central1
dan menggunakan jaringan VPC default bernama default
.
- Anda dapat membaca dokumentasi sebagai panduan untuk membuat instance Compute Engine dari image publik.
Biaya
Anda perlu mengaktifkan penagihan di Konsol Google Cloud untuk menggunakan API/resource cloud. Sebaiknya hentikan resource yang digunakan agar tidak menimbulkan penagihan di luar codelab ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Resource yang dikenai biaya adalah instance BigQuery dan Compute Engine. Anda dapat memperkirakan biaya menggunakan kalkulator harga BigQuery dan Kalkulator harga Compute Engine.
3. Akses ke BigQuery tanpa Pembatasan Kontrol Layanan VPC
Buat Kueri Set Data Publik dan Simpan Hasil di project-1
- Akses
project-2
danproject-1
untuk memverifikasi apakah Anda dapat mengakses BigQuery API dengan membuka halaman BigQuery Studio. Anda seharusnya bisa melakukannya karena meskipunproject-1
berada dalam perimeter layanan, perimeter belum melindungi layanan apa pun. - Dari
project-2
, jalankan kueri berikut untuk membuat kueri set data publik.
SELECT name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY name
ORDER BY total DESC
LIMIT 10;
Setelah menjalankan kueri ke set data publik (sambil tetap berada di project-2
):
- Klik Save Results dan pilih BigQuery table. (lihat screenshot di bawah).
- Pilih
project-1
sebagai project tujuan. - Beri nama Set Data sebagai
codelab_dataset
. (Pilih CREATE NEW DATASET, kecuali jika menggunakan set data yang sudah ada). - Beri nama tabel sebagai:
codelab-table
. - Klik Simpan.
Data set data publik telah berhasil disimpan di project-1
sebagai hasil dari mengeksekusi kueri dari project-2
.
Set Data Kueri disimpan di project-1
dari project-2
Saat masih berada di BigQuery Studio project-2
, jalankan kueri berikut untuk memilih data:
- Project:
project-1
- Set data:
codelab_dataset
- Table:
codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Kueri akan berhasil dijalankan karena project-2
atau project-1
tidak dibatasi untuk menggunakan BigQuery. Akses ke BigQuery diizinkan dari dan ke mana saja selama pengguna memiliki izin IAM yang sesuai.
Diagram ini menggambarkan proses saat akun utama membuat kueri set data BigQuery. Setiap kueri BigQuery memulai tugas BigQuery, yang kemudian melakukan operasi sebenarnya, dalam skenario ini, mengambil data. Akses utama ditunjukkan dari instance Compute Engine dan dari internet, saat membuat kueri dari set data publik dan dari project Google Cloud yang terpisah. Proses untuk mengkueri data (
GetData
) berhasil, tanpa diblokir oleh Kontrol Layanan VPC.
4. Melindungi BigQuery API di Project Set Data Sumber
Ubah konfigurasi perimeter perimeter-1
dan batasi layanan BigQuery API bersama resource yang dilindungi yaitu project-1
.
Memverifikasi Penerapan Perimeter Layanan
Dari project-2
, jalankan kueri berikut di BigQuery Studio, seperti pada langkah sebelumnya:
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
Kontrol Layanan VPC akan terjadi
Log audit pelanggaran akan ditempatkan di project-1
, karena di sinilah pelanggaran untuk melintasi perimeter. Log dapat difilter dengan vpcServiceControlsUniqueId
yang diamati (ganti VPC_SC_DENIAL_UNIQUE_ID
dengan ID unik yang diamati).
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"
Pelanggarannya adalah egressViolations
dengan:
principalEmail
: [akun pengguna yang menjalankan kueri]callerIp
: [Alamat IP agen pengguna yang menjalankan kueri]
"egressViolations": [
{
"targetResource": "projects/project-2",
"sourceType": "Resource",
"source": "projects/project-1",
"servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
"targetResourcePermissions": [ "bigquery.jobs.create"]
} ],
5. Memperbaiki Pelanggaran untuk Membuat Tugas BigQuery
Diagram ini mengilustrasikan saat akun utama menjalankan kueri dari
project-2
untuk set data di project-1
. Operasi untuk membuat tugas BigQuery, dari project set data (project-1
) dalam project tempat kueri dijalankan (project-2
) gagal disertai pelanggaran traffic keluar Kontrol Layanan VPC karena perimeter layanan perimeter-1
yang melindungi BigQuery API. Dengan menggunakan perimeter, permintaan BigQuery API tidak dapat dimulai dari project-1
menuju ke luar perimeter atau dimulai di luar perimeter menuju project yang dilindungi; kecuali jika diizinkan oleh konfigurasi perimeter layanan.
Pelanggaran traffic keluar dapat diperbaiki dengan membuat aturan traffic keluar yang didasarkan pada:
- sumber (FROM): yaitu alamat email dan konteks pengguna (mis.: alamat IP pemanggil, status perangkat, lokasi, dll.)
- tujuan (TO): yaitu resource target, layanan, dan metode atau izin.
Untuk memperbaiki pelanggaran traffic keluar yang diamati, buat aturan keluar yang mengizinkan traffic menuju targetResource (project-2
) oleh akun pengguna yang menjalankan kueri (user@example.com
) di layanan BigQuery dan metode/ izin bigquery.jobs.create
.
Perilaku yang diharapkan dari aturan keluar yang dikonfigurasi:
- DARI | Identitas: hanya identitas yang ditentukan
user@example.com
yang harus diizinkan untuk melintasi batas perimeter. - UNTUK | project: identitas yang ditentukan dapat melewati batas perimeter hanya jika tujuannya adalah project
project-2
yang ditentukan. - UNTUK | Layanan: identitas yang ditentukan dapat memulai traffic di luar perimeter, menuju project yang ditetapkan hanya jika panggilan API tersebut ditujukan untuk layanan dan metode yang ditentukan. Jika tidak, misalnya, jika mereka mencoba layanan lain yang dilindungi oleh perimeter layanan, operasi tersebut akan diblokir karena layanan lain tidak diizinkan.
Uji Perbaikan: Aturan Traffic Keluar
Setelah aturan keluar diterapkan, jalankan kueri yang sama.
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
Pelanggaran lain akan terjadi, kali ini pelanggaran masuk NO_MATCHING_ACCESS_LEVEL
. Pelanggaran baru berbeda dari pelanggaran pertama, dalam hal target project dan metodenya.
Pelanggaran baru adalah pelanggaran masuk dengan
principalEmail
: [akun pengguna yang menjalankan kueri]callerIp
: [Alamat IP agen pengguna yang menjalankan kueri]
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
targetResource: "projects/project-1"
targetResourcePermissions: [0: "bigquery.tables.getData"]}
]
Pelanggaran untuk metode bigquery.tables.getData
disebabkan oleh panggilan API yang dimulai oleh tugas BigQuery yang mencoba mendapatkan data dari tabel BigQuery.
6. Memperbaiki Pelanggaran untuk Mendapatkan Data Tabel BigQuery
Aturan traffic masuk memperbaiki pelanggaran traffic masuk, sekaligus memberikan kontrol terperinci terkait siapa yang diizinkan untuk melewati batas perimeter layanan beserta konteks akses yang diizinkan, seperti project sumber/ target dan metode API yang dapat mereka akses.
Pelanggaran traffic masuk diperbaiki oleh aturan masuk yang dikonfigurasi dengan:
- sumber (FROM): yaitu alamat email dan konteks pengguna (mis.: alamat IP pemanggil, status perangkat, lokasi, dll.)
- tujuan (TO): yaitu resource target, layanan, dan metode atau izin.
Aturan masuk akan mengizinkan traffic menuju project-1
oleh pengguna yang ditentukan pada layanan dan metode yang ditentukan.
Perilaku yang diharapkan dari aturan masuk yang dikonfigurasi:
- DARI | Identitas: hanya identitas yang ditentukan
user@example.com
yang harus diizinkan untuk melintasi batas perimeter. - UNTUK | project: identitas yang ditentukan dapat melewati batas perimeter hanya jika tujuannya adalah project
project-1
yang ditentukan. - UNTUK | Layanan: identitas yang ditentukan dapat memulai traffic di dalam perimeter hanya jika panggilan API ditujukan untuk BigQuery API dan metode
bigquery.tables.getData
yang ditentukan.
Eksekusi kueri yang identik akan selanjutnya berfungsi dengan baik tanpa pelanggaran Kontrol Layanan VPC.
Kami berhasil membatasi BigQuery API di project-1
sehingga hanya dapat digunakan oleh user@example.com
, bukan oleh user2@example.com
.
Diagram ini menggambarkan cara dua akun utama yang berbeda mencoba mengkueri set data yang sama. Akses dengan
user2@example.com
(garis biru putus-putus) ditolak oleh Kontrol Layanan VPC, karena tidak diizinkan untuk menjalankan operasi BigQuery dari atau menuju project-1
oleh konfigurasi perimeter layanan. Akses oleh user@example.com
(garis solid hijau) berhasil, karena diizinkan oleh konfigurasi Kontrol Layanan VPC, untuk menjalankan operasi dari dan menuju project-1
.
7. Membatasi Traffic yang Diizinkan oleh Perimeter Layanan berdasarkan Alamat IP Internal
Konfigurasi saat ini memungkinkan pengguna yang ditetapkan untuk menjalankan kueri di BigQuery di project-1
dari lokasi mana pun; di mana pun di internet, jika mereka diberi izin IAM untuk mengkueri data, dan selama mereka menggunakan akun mereka. Dari sudut pandang keamanan, hal ini menyiratkan bahwa jika akun disusupi, setiap individu yang mendapatkan akses ke akun tersebut dapat mengakses data BigQuery tanpa batasan tambahan.
Pembatasan lebih lanjut dapat diterapkan dengan memanfaatkan tingkat akses dalam aturan masuk dan keluar untuk menentukan konteks pengguna. Misalnya, Anda dapat mengizinkan akses berdasarkan IP sumber bersama dengan aturan masuk yang telah dikonfigurasi sebelumnya yang mengizinkan akses menurut identitas penelepon. Akses berdasarkan IP sumber dapat dilakukan untuk kedua rentang CIDR IP publik, asalkan klien pengguna memiliki IP publik yang ditetapkan padanya, atau dengan menggunakan alamat IP internal jika klien pengguna beroperasi dari project Google Cloud.
Membuat Tingkat Akses dengan Kondisi Akses Alamat IP Internal
Pada folder kebijakan akses terbatas yang sama, buka halaman Pengelola Akses Konteks untuk membuat tingkat akses.
- Di halaman Access Context Manager, pilih CREATE ACCESS LEVEL.
- Di panel New Access Level:
- Berikan judul: Anda dapat menggunakan
codelab-al
. - Di bagian Kondisi, klik Subnetwork IP.
- Pilih tab Private IP dan klik SELECT VPC NETWORKS.
- Dari panel Tambahkan Jaringan VPC, Anda dapat menjelajahi dan menemukan jaringan
default
atau secara manual memasukkan nama jaringan lengkap dalam format//compute.googleapis.com/projects/project-2/global/networks/default
. - Klik ADD VPC Network.
- Klik PILIH SUBNET IP.
- Pilih region tempat instance VM berada. Untuk codelab ini, atributnya adalah
us-central1
. - Klik SIMPAN.
- Berikan judul: Anda dapat menggunakan
Kami telah membuat tingkat akses, yang masih belum diterapkan pada kebijakan perimeter atau traffic masuk/keluar.
Menambahkan Tingkat Akses ke Aturan Ingress
Untuk menerapkan bahwa pengguna yang diizinkan oleh aturan masuk juga diverifikasi terhadap tingkat akses, Anda perlu mengonfigurasi tingkat akses dalam aturan masuk. Aturan masuk yang mengizinkan akses ke data kueri ada di perimeter-1
. Ubah aturan masuk untuk menentukan sumber sebagai codelab-al
tingkat akses.
Menguji Konfigurasi Baru
Setelah tingkat akses ditambahkan di aturan masuk, kueri BigQuery yang sama akan gagal kecuali jika dijalankan dari klien dalam jaringan VPC default
untuk project project-2
. Untuk memverifikasi perilaku ini, jalankan kueri dari Konsol Google Cloud saat perangkat endpoint terhubung ke internet. Kueri akan dihentikan dengan tidak berhasil, disertai dengan indikasi Pelanggaran masuk.
Kueri yang sama dapat dijalankan dari jaringan VPC default
, yang berada di project-2
. Demikian pula, mengeksekusi kueri BigQuery yang sama dari instance Compute Engine yang berada di project-2
menggunakan jaringan VPC default
juga akan gagal. Hal ini karena aturan masuk masih dikonfigurasi untuk hanya mengizinkan user@example.com
utama. Namun, VM menggunakan akun layanan default Compute Engine.
Agar berhasil menjalankan perintah yang sama dari instance Compute Engine di project-2
,pastikan:
- VM memiliki cakupan akses untuk menggunakan BigQuery API. Hal ini dapat dilakukan dengan memilih Izinkan akses penuh ke semua API Cloud sebagai cakupan akses VM.
- Akun layanan yang dikaitkan ke VM memerlukan izin IAM untuk:
- Membuat Tugas BigQuery di
project-2
- Dapatkan data BigQuery dari tabel BigQuery yang terletak di
project-1
- Membuat Tugas BigQuery di
- Akun layanan Compute Engine default harus diizinkan oleh aturan masuk dan keluar.
Sekarang kita perlu menambahkan akun layanan default Compute Engine di aturan masuk (agar dapat memperoleh data dari tabel BigQuery) dan ke aturan keluar (untuk memungkinkan pembuatan tugas BigQuery).
Dari instance Compute Engine di project-2
pada jaringan VPC default
, jalankan perintah kueri bq berikut:
bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'
Dengan konfigurasi saat ini, perintah BigQuery hanya akan berhasil jika:
- dijalankan di VM menggunakan
Jaringan VPC default di
project-2
, dan - yang berada di region
us-central1
yang ditentukan (subnetwork IP), dan - dan menjalankannya menggunakan akun layanan Compute Engine default yang dikonfigurasi di perimeter layanan.
Kueri perintah BigQuery akan gagal jika dijalankan dari tempat lain, termasuk:
- jika dijalankan di VM menggunakan jaringan VPC default di
project-2
, tetapi berada di region yang berbeda dari subnet yang ditambahkan di tingkat akses, atau - jika dijalankan oleh pengguna
user@example.com
dengan klien pengguna di internet.
Diagram ini menggambarkan akses yang dimulai oleh akun utama yang sama,
user@example.com
, dari dua lokasi yang berbeda: internet dan instance Compute Engine. Akses ke BigQuery langsung dari internet (garis putus-putus biru) diblokir oleh Kontrol Layanan VPC, sedangkan akses dari VM (garis solid hijau) —yang meniru identitas akun layanan default Compute Engine— diizinkan. Akses yang diizinkan disebabkan oleh perimeter layanan yang dikonfigurasi untuk mengizinkan akses ke resource yang dilindungi dari alamat IP internal.
8. Pembersihan
Meskipun tidak ada biaya tersendiri untuk penggunaan Kontrol Layanan VPC saat layanan tidak digunakan, sebaiknya bersihkan penyiapan yang digunakan di laboratorium ini. Anda juga dapat menghapus instance VM dan set data BigQuery, atau project Google Cloud untuk menghindari tagihan. Jika project Cloud dihapus, penagihan untuk semua resource yang digunakan dalam project tersebut akan dihentikan.
- Untuk menghapus instance VM, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman VM instances.
- Pilih kotak centang di sebelah kiri nama instance VM, lalu pilih Delete, dan kemudian klik Delete lagi untuk mengonfirmasi.
- Untuk menghapus perimeter layanan, selesaikan langkah-langkah berikut:
- Di konsol Google Cloud, pilih Keamanan, lalu Kontrol Layanan VPC di tingkat tempat kebijakan akses dicakup, dalam hal ini, di tingkat folder.
- Di halaman Kontrol Layanan VPC, pada baris tabel yang sesuai dengan perimeter yang ingin Anda hapus, klik Hapus.
- Untuk menghapus Tingkat Akses, selesaikan langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Access Context Manager di Cakupan Folder.
- Di petak, identifikasi baris untuk tingkat akses yang ingin Anda hapus, pilih menu tiga titik, lalu pilih Hapus.
- Untuk menonaktifkan project, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka IAM & Setelan Admin untuk project yang ingin Anda hapus.
- Di IAM & Halaman Setelan Admin, pilih Matikan.
- Masukkan project ID, lalu pilih Tetap matikan.
9. Selamat!
Dalam codelab ini, Anda telah membuat perimeter Kontrol Layanan VPC, menerapkannya, dan memecahkan masalahnya.
Pelajari Lebih Lanjut
Anda juga dapat mengeksplorasi skenario berikut:
- Jalankan kueri yang sama pada set data publik, setelah project dilindungi oleh Kontrol Layanan VPC.
- Tambahkan
project-2
di perimeter yang sama denganproject-1
. - Tambahkan
project-2
di perimeternya sendiri dan pertahankanproject-1
di perimeter saat ini. - Jalankan kueri untuk memperbarui data dalam tabel, bukan hanya untuk mengambil data.
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.