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, sehingga kueri dapat dijalankan pada set data publik, dan hasilnya dapat disimpan dalam tabel project. Kueri berjalan di satu project dan tabel (tempat hasil disimpan) dibuat di project lain, meniru penyiapan tempat data dapat disimpan di satu project, tetapi perlu diakses menggunakan project lain.

Selanjutnya, kita akan memperkenalkan perimeter layanan untuk melindungi project data. Anda akan mempelajari cara memperbaiki pelanggaran yang teramati menggunakan aturan ingress dan aturan egress, lalu menambahkan level akses untuk membatasi akses menggunakan alamat IP internal. Sasaran codelab ini adalah:

  • Pahami cara memperbaiki pelanggaran ingress dan egress menggunakan aturan ingress dan egress masing-masing.
  • Pahami alasan terjadinya pelanggaran tertentu.
  • Menganalisis cakupan perbaikan pelanggaran yang diterapkan.
  • Ubah perbaikan (aturan ingress / egress) untuk mengubah cakupannya dengan memanfaatkan opsi untuk mengizinkan traffic dari alamat IP internal di jaringan VPC menggunakan tingkat akses.

2. Penyiapan dan Persyaratan Resource

Sebelum memulai

Dalam codelab ini, kami mengasumsikan 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 berada di us-central1 dan menggunakan jaringan VPC default bernama default.

Biaya

Anda harus mengaktifkan penagihan di konsol Google Cloud untuk menggunakan API/resource cloud. Sebaiknya nonaktifkan 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 menimbulkan 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

Mengkueri Set Data Publik dan Menyimpan 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 akan dapat melakukannya karena meskipun project-1 berada dalam perimeter layanan, perimeter tersebut 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 Simpan Hasil, lalu pilih tabel BigQuery. (lihat screenshot di bawah). Simpan hasil BigQuery.
  2. Pilih project-1 sebagai project tujuan.
  3. Beri nama Set Data sebagai codelab_dataset. (Pilih BUAT SET DATA BARU, kecuali jika menggunakan set data yang ada). Memilih project tujuan saat 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 menjalankan kueri dari project-2.

Kueri Set Data yang disimpan di project-1 dari project-2

Saat tetap berada di project-2 BigQuery Studio, jalankan kueri berikut untuk memilih data dari:

  • Project: project-1
  • Set data: codelab_dataset
  • Tabel: 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 maupun 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 prinsipal 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 terpisah. Proses untuk membuat kueri 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 dengan 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;

Terjadi pelanggaran RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER Kontrol Layanan VPC

Pelanggaran Kontrol Layanan VPC traffic keluar

Log audit pelanggaran akan berada di project-1, karena di situlah pelanggaran untuk melintasi perimeter terjadi. 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*]"

Pelanggaran tersebut 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

Kegagalan traffic keluar untuk pembuatan Tugas BigQuery. Diagram ini menggambarkan saat prinsipal menjalankan kueri dari project-2 untuk set data di project-1. Operasi untuk membuat tugas BigQuery, dari project set data (project-1) di project tempat kueri dijalankan (project-2) gagal karena pelanggaran keluar Kontrol Layanan VPC akibat perimeter layanan perimeter-1 yang melindungi BigQuery API. Dengan adanya perimeter, tidak ada permintaan BigQuery API yang dapat dimulai dari project-1 ke luar perimeter atau dimulai di luar perimeter ke project yang dilindungi; kecuali jika diizinkan oleh konfigurasi perimeter layanan.

Pelanggaran egress dapat diperbaiki dengan membuat aturan egress yang didasarkan pada:

  • sumber (FROM): yaitu alamat email dan konteks pengguna (misalnya: alamat IP pemanggil, status perangkat, lokasi, dll.)
  • tujuan (KE): yaitu resource, layanan, dan metode atau izin target.

Untuk memperbaiki pelanggaran 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.

Konfigurasi Perbaikan pelanggaran egress.

Perilaku yang diharapkan dari aturan keluar yang dikonfigurasi:

  • FROM | Identitas: hanya identitas user@example.com yang ditentukan yang diizinkan untuk melintasi batas perimeter.
  • TO | projects: identitas yang ditentukan dapat melintasi batas perimeter hanya jika tujuannya adalah project project-2 yang ditentukan.
  • KE | Layanan: identitas yang ditentukan dapat memulai traffic di luar perimeter, menuju project yang ditentukan hanya jika panggilan API ditujukan untuk layanan dan metode yang ditentukan. Jika tidak, misalnya jika mereka mencoba layanan lain yang dilindungi oleh perimeter layanan, operasi akan diblokir karena layanan lain tidak diizinkan.

Menguji Perbaikan: Aturan Egress

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 project target dan metode.

Pelanggaran Kontrol Layanan VPC ingress

Pelanggaran baru adalah pelanggaran ingress 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 ingress memperbaiki pelanggaran ingress, sekaligus memberikan kontrol terperinci tentang siapa yang diizinkan untuk melintasi batas perimeter layanan beserta konteks akses yang diizinkan, seperti project sumber/ target dan metode API yang dapat mereka akses.

Pelanggaran ingress diperbaiki dengan aturan ingress yang dikonfigurasi dengan:

  • sumber (FROM): yaitu alamat email dan konteks pengguna (misalnya: alamat IP pemanggil, status perangkat, lokasi, dll.)
  • tujuan (KE): yaitu resource, layanan, dan metode atau izin target.

Aturan ingress akan mengizinkan traffic menuju project-1 oleh pengguna tertentu pada layanan dan metode tertentu.

Perbaikan pelanggaran ingress

Perilaku yang diharapkan dari aturan ingress yang dikonfigurasi:

  • FROM | Identitas: hanya identitas user@example.com yang ditentukan yang diizinkan untuk melintasi batas perimeter.
  • TO | projects: identitas yang ditentukan dapat melintasi batas perimeter hanya jika tujuannya adalah project project-1 yang ditentukan.
  • TO | Layanan: identitas yang ditentukan hanya dapat memulai traffic di dalam perimeter jika panggilan API ditujukan untuk BigQuery API dan metode yang ditentukan bigquery.tables.getData.

Eksekusi kueri yang identik selanjutnya akan berfungsi dengan tepat tanpa pelanggaran Kontrol Layanan VPC.

Kami telah 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 bagaimana dua prinsipal yang berbeda mencoba membuat kueri pada set data yang sama. Akses oleh user2@example.com (garis biru putus-putus) ditolak oleh Kontrol Layanan VPC, karena mereka tidak diizinkan untuk menjalankan operasi BigQuery dari atau ke project-1 oleh konfigurasi perimeter layanan. Akses oleh user@example.com (garis solid hijau) berhasil, karena mereka diizinkan oleh konfigurasi Kontrol Layanan VPC, untuk melakukan operasi dari dan ke project-1.

7. Membatasi Traffic yang Diizinkan oleh Perimeter Layanan berdasarkan Alamat IP Internal

Konfigurasi saat ini memungkinkan pengguna yang ditetapkan menjalankan kueri di BigQuery dalam project-1 dari lokasi mana pun; di mana pun di internet, jika mereka diberi izin IAM untuk membuat kueri data, dan selama mereka menggunakan akunnya. Dari perspektif 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 ingress dan egress untuk menentukan konteks pengguna. Misalnya, Anda dapat mengizinkan akses berdasarkan IP sumber bersama dengan aturan ingress yang sebelumnya dikonfigurasi yang mengizinkan akses berdasarkan identitas pemanggil. Akses berdasarkan IP sumber dapat dilakukan untuk rentang CIDR IP publik, asalkan klien pengguna memiliki IP publik yang ditetapkan untuknya, atau dengan menggunakan alamat IP internal jika klien pengguna beroperasi dari project Google Cloud.

Membuat Tingkat Akses dengan Kondisi Akses Alamat IP Internal

Di folder kebijakan akses tercakup yang sama, buka halaman Access Context Manager untuk membuat tingkat akses.

  1. Di halaman Access Context Manager, pilih CREATE ACCESS LEVEL.
  2. Di panel Tingkat Akses Baru:
    1. Berikan judul: Anda dapat menggunakan codelab-al.
    2. Di bagian Kondisi, klik Subjaringan IP.
    3. Pilih tab Private IP, lalu klik PILIH JARINGAN VPC.
    4. Dari panel Add VPC Networks, Anda dapat menjelajahi dan menemukan jaringan default atau memasukkan nama jaringan lengkap secara manual 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, nilainya adalah us-central1.
    8. Klik SIMPAN.

Kita telah membuat tingkat akses, yang masih belum diterapkan pada perimeter atau kebijakan ingress/egress mana pun.

Tingkat akses yang dikonfigurasi dengan Subnetwork IP

Menambahkan Tingkat Akses ke Aturan Ingress

Untuk memastikan bahwa pengguna yang diizinkan oleh aturan ingress juga diverifikasi berdasarkan tingkat akses, Anda harus mengonfigurasi tingkat akses dalam aturan ingress. Aturan ingress yang mengizinkan akses untuk membuat kueri data ada di perimeter-1. Ubah aturan ingress untuk menentukan sumber sebagai tingkat akses codelab-al.

Tingkat akses dengan jaringan VPC

Menguji Konfigurasi Baru

Setelah penambahan tingkat akses dalam aturan traffic masuk, kueri BigQuery yang sama akan gagal kecuali jika dieksekusi dari klien di 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 berakhir tanpa berhasil, disertai dengan indikasi Pelanggaran ingress.

Kueri yang sama dapat dijalankan dari jaringan VPC default, yang berada di project-2. Demikian pula, menjalankan kueri BigQuery yang sama dari instance Compute Engine yang berada di project-2 menggunakan jaringan VPC default juga akan gagal. Hal ini karena aturan ingress masih dikonfigurasi untuk hanya mengizinkan akun utama user@example.com. Namun, VM menggunakan akun layanan default Compute Engine.

Agar berhasil menjalankan perintah yang sama dari instance Compute Engine di project-2,pastikan bahwa:

  • VM memiliki cakupan akses untuk menggunakan BigQuery API. Hal ini dapat dilakukan dengan memilih Allow full access to all Cloud APIs sebagai cakupan akses VM.
  • Akun layanan yang terlampir ke VM memerlukan izin IAM untuk:
    • Membuat Tugas BigQuery di project-2
    • Mendapatkan data BigQuery dari tabel BigQuery yang berada di project-1
  • Akun layanan Compute Engine default harus diizinkan oleh aturan ingress dan egress.

Sekarang kita perlu menambahkan akun layanan default Compute Engine dalam aturan ingress (untuk mengizinkan pengambilan data dari tabel BigQuery) dan ke aturan egress (untuk mengizinkan 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:

  • berjalan di VM menggunakan jaringan VPC default di project-2, dan
  • berada di region us-central1 yang ditentukan (subnetwork IP), dan
  • dijalankan menggunakan akun layanan Compute Engine default yang dikonfigurasi dalam 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 dengan 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 prinsipal 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) —saat menirukan 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 terpisah untuk menggunakan 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. Menghapus project Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

  • Untuk menghapus instance VM, selesaikan langkah-langkah berikut:
    • Di konsol Google Cloud, buka halaman instance VM.
    • Pilih kotak centang di sisi kiri nama instance VM, lalu pilih Hapus, kemudian klik Hapus lagi untuk mengonfirmasi. Penghapusan instance Compute Engine.
  • Untuk menghapus perimeter layanan, selesaikan langkah-langkah berikut:
    • Di konsol Google Cloud, pilih Keamanan, lalu VPC Service Controls di tingkat tempat kebijakan akses dicakup, dalam hal ini, di tingkat folder.
    • Di halaman VPC Service Controls, 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 mematikan project, selesaikan langkah-langkah berikut:
    • Di konsol Google Cloud, buka halaman IAM & Admin Settings project yang ingin Anda hapus.
    • Di halaman Setelan IAM & Admin, pilih Shutdown.
    • Masukkan project ID, lalu pilih Shutdown anyway.

9. Selamat!

Dalam codelab ini, Anda telah membuat perimeter Kontrol Layanan VPC, menerapkannya, dan memecahkan masalahnya.

Pelajari Lebih Lanjut

Anda juga dapat mempelajari 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.
  • Menjalankan kueri untuk memperbarui data dalam tabel, bukan hanya untuk mengambil data.

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.