Kontrol Layanan VPC - Codelab Perlindungan BigQuery

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:

Penyiapan

Penyiapan awal kami dirancang sebagai berikut:

Desain awal dengan perimeter layanan yang tidak melindungi API.

Membuat Perimeter Layanan Reguler

Dalam codelab ini, kita akan menggunakan perimeter layanan reguler yang melindungi project-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.

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

  1. Akses project-2 dan project-1 untuk memverifikasi apakah Anda dapat mengakses BigQuery API dengan membuka halaman BigQuery Studio. Anda seharusnya bisa melakukannya karena meskipun project-1 berada dalam perimeter layanan, perimeter belum melindungi layanan apa pun.
  2. 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):

  1. Klik Save Results dan pilih BigQuery table. (lihat screenshot di bawah). Simpan hasil BigQuery.
  2. Pilih project-1 sebagai project tujuan.
  3. Beri nama Set Data sebagai codelab_dataset. (Pilih CREATE NEW DATASET, kecuali jika menggunakan set data yang sudah ada). Memilih project tujuan sekaligus menyimpan hasil BigQuery.
  4. Beri nama tabel sebagai: codelab-table.
  5. 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.

Penyiapan Codelab tanpa perimeter layanan Kontrol Layanan VPC. 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.

Mengonfigurasi perimeter layanan

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

Pelanggaran Kontrol Layanan VPC keluar

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

Traffic keluar gagal untuk pembuatan 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.

Pelanggaran keluar. Perbaiki konfigurasi.

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 Kontrol Layanan VPC Ingress

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.

Perbaikan pelanggaran traffic masuk

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.

Perimeter Kontrol Layanan VPC yang melindungi BigQuery API 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.

  1. Di halaman Access Context Manager, pilih CREATE ACCESS LEVEL.
  2. Di panel New Access Level:
    1. Berikan judul: Anda dapat menggunakan codelab-al.
    2. Di bagian Kondisi, klik Subnetwork IP.
    3. Pilih tab Private IP dan klik SELECT VPC NETWORKS.
    4. 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.
    5. Klik ADD VPC Network.
    6. Klik PILIH SUBNET IP.
    7. Pilih region tempat instance VM berada. Untuk codelab ini, atributnya adalah us-central1.
    8. Klik SIMPAN.

Kami telah membuat tingkat akses, yang masih belum diterapkan pada kebijakan perimeter atau traffic masuk/keluar.

Tingkat akses yang dikonfigurasi dengan Subnetwork IP

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.

Tingkat akses dengan jaringan VPC

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
  • 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).

Konfigurasi perimeter layanan Kontrol Layanan VPC dengan tingkat akses

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.

Perimeter layanan yang mengizinkan akses untuk akun layanan default GCE. 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. Penghapusan instance instance Compute Engine.
  • 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:

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 dengan project-1.
  • Tambahkan project-2 di perimeternya sendiri dan pertahankan project-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.