1. Pengantar
Kontrol Layanan VPC (VPC-SC) adalah kontrol keamanan tingkat organisasi di Google Cloud yang memungkinkan pelanggan perusahaan memitigasi risiko pemindahan data yang tidak sah. Kontrol Layanan VPC menyediakan akses model zero-trust ke layanan multi-tenant dengan memungkinkan klien membatasi akses ke IP, konteks klien, dan parameter perangkat yang diotorisasi saat terhubung ke layanan multi-tenant dari internet dan layanan lainnya untuk mengurangi kehilangan data yang disengaja maupun tidak disengaja. Seperti yang kita lihat di Tutorial Dasar Kontrol Layanan VPC I, Anda dapat menggunakan Kontrol Layanan VPC untuk membuat perimeter yang melindungi resource dan data layanan yang Anda tentukan secara eksplisit.
Tujuan tutorial ini adalah:
- Memahami dasar-dasar Kontrol Layanan VPC
- Memperbarui perimeter layanan dan mengujinya menggunakan mode Uji coba
- Melindungi dua layanan dengan Kontrol Layanan VPC
- Memecahkan masalah pelanggaran egress Kontrol Layanan VPC saat mencantumkan objek dari Cloud Storage
2. Penyiapan dan persyaratan
Untuk tutorial ini, kita memerlukan prasyarat berikut:
- Organisasi GCP.
- Folder di bagian Organisasi.
- 2 project GCP dalam Organisasi yang sama ditempatkan di bawah folder.
- Izin yang diperlukan di tingkat organisasi.
- Akun penagihan untuk kedua project.
- Tutorial Dasar Kontrol Layanan VPC I Penyiapan Kontrol Layanan VPC dan Access Context Manager.

Penyiapan resource
- Siapkan resource seperti yang dijelaskan di bagian "Penyiapan resource" dalam Tutorial Dasar Kontrol Layanan VPC I
- Pastikan Anda memiliki izin yang diperlukan untuk mengelola Cloud Storage.
- Dalam tutorial ini, kita akan mulai menggunakan CLI, bukan konsol cloud. Di salah satu lingkungan pengembangan, siapkan gcloud CLI:
- Cloud Shell: untuk menggunakan terminal online dengan gcloud CLI yang sudah disiapkan, aktifkan Cloud Shell.
Aktifkan Cloud Shell dengan mengklik ikon di pojok kanan atas konsol cloud Anda. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi. Lihat panduan Cloud Shell untuk mengetahui detail selengkapnya.

- Shell lokal: untuk menggunakan lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI.
Biaya
Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Satu-satunya resource yang akan menimbulkan biaya adalah Instance VM dan Objek Cloud Storage. Perkiraan biaya instance VM dapat ditemukan di kalkulator harga. Perkiraan biaya Cloud Storage dapat ditemukan di daftar harga ini.
3. Membuat Bucket dan Objek Storage
Seperti yang disebutkan sebelumnya, kita akan menggunakan kembali resource yang dibuat di tutorial sebelumnya. Jadi, kita akan melanjutkan pembuatan bucket Cloud Storage. Untuk tutorial ini, kita akan mulai menggunakan gcloud CLI, bukan konsol.
- Di Konsol Google, pilih ProjectX. Dalam project ini, kita akan membuat Bucket Storage dan objek.
- Pastikan Anda menyetel cloud shell untuk menggunakan ProjectX dengan menjalankan perintah berikut:
gcloud config set project PROJECT_ID
- Di lingkungan pengembangan Anda, jalankan perintah berikut:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
- Buat objek penyimpanan sehingga kita dapat membacanya dari Instance VM yang berada di ProjectZ. Kita akan membuat file .txt.
nano hello.txt
Tambahkan apa pun yang Anda inginkan dalam file teks.
- Upload objek ke dalam bucket.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
- Verifikasi bahwa objek telah diupload ke dalam bucket dengan mencantumkannya.
gcloud storage ls gs://BUCKET_NAME
Anda harus melihat file hello.txt yang tercantum di konsol.
4. Melindungi Cloud Storage API
Dalam codelab sebelumnya, kita telah membuat perimeter dan melindungi Compute Engine API. Dalam codelab ini, kita akan mengedit perimeter mode uji coba dan menambahkan Cloud Storage. Hal ini akan membantu kami menentukan dampak perlindungan perimeter dengan menunjukkan pelanggaran Kontrol Layanan VPC dalam log audit, tetapi resource akan tetap dapat diakses hingga kami menerapkan perimeter.
- Di Konsol Google, pilih Organisasi Anda; Akses VPC Service Controls. Pastikan Anda berada di cakupan Org.
- Buka Cloud Shell dan perbarui perimeter Uji Coba "SuperProtection" yang dibuat di lab sebelumnya:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
- Pastikan Cloud Storage API telah diperbarui dengan menjelaskan perimeter
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY
Dalam output, Anda akan melihat bahwa Cloud Storage API tercantum di bawah layanan yang dibatasi
bersama dengan Compute Engine API, tetapi dengan label "-vpcAccessibleServices: {}":

5. Memverifikasi bahwa Cloud Storage API telah dilindungi
Dalam mode Uji Coba, verifikasi bahwa perimeter "SuperProtection" menunjukkan penolakan dengan mencantumkan objek dari instance VM yang dibuat di ProjectZ ke ProjectX yang menghosting Bucket Storage
- Di Konsol Cloud, buka pemilih project dan pilih ProjectZ, lalu buka Compute Engine > VM Instances.
- Klik tombol SSH untuk terhubung ke Instance VM dan mengakses command line-nya.

- Buat daftar file hello.txt yang kita upload sebelumnya.
gcloud storage ls gs://BUCKET_NAME
Karena Cloud Storage API dilindungi dalam mode uji coba, Anda akan dapat mencantumkan resource, tetapi Anda harus memiliki pesan error di log audit ProjectZ.
- Buka Logs Explorer API di ProjectZ dan cari pesan error terakhir Kontrol Layanan VPC. Anda dapat menggunakan filter ini untuk mendapatkan log yang kita cari:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" "(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"
Filter ini akan menampilkan pelanggaran terakhir dalam mode Uji coba yang termasuk dalam Cloud Storage. Berikut adalah contoh tampilan log dan kita dapat memvalidasi bahwa pelanggaran tersebut adalah pelanggaran egress saat mencoba mencantumkan konten di bucket yang berada di ProjectX.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
- Karena kita telah memvalidasi bahwa panggilan API ke Cloud Storage menghasilkan pelanggaran Kontrol Layanan VPC, kita akan menerapkan perimeter dengan konfigurasi baru. Buka Cloud Shell dan terapkan perimeter Uji coba:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
- Hubungkan ke instance VM menggunakan SSH dan cantumkan bucket penyimpanan lagi untuk memverifikasi bahwa perimeter Uji coba telah diterapkan dengan benar.
gcloud storage ls gs://BUCKET_NAME
Kita akan mendapatkan pelanggaran Kontrol Layanan VPC di CLI VM, bukan daftar objek Storage:
ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"
Kami telah berhasil mencegah Pemindahan data yang tidak sah dengan menggunakan Kontrol Layanan VPC untuk mencegah pembacaan data dari atau penyalinan data ke resource di luar perimeter.
6. Memecahkan masalah penolakan daftar.
Kita akan memecahkan masalah penolakan yang kita dapatkan dari CLI instance VM. Mari kita periksa log audit dan cari ID unik Kontrol Layanan VPC.
- Buka pemilih project dan pilih ProjectZ.
- Temukan ID Unik Kontrol Layanan VPC di log audit menggunakan kueri berikut di Logs Explorer:
resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
Tindakan ini akan menampilkan semua log audit Kontrol Layanan VPC. Kita akan mencari log error terakhir. Karena panggilan API dilakukan dari instance VM, akun utama harus berupa akun layanan Compute Engine "PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Karena kita sudah memiliki ID unik Kontrol Layanan VPC, kita dapat menggunakannya untuk mendapatkan log yang diinginkan secara langsung dengan menggunakan filter ini:
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
- Klik header VPC Service Controls, lalu pilih "Troubleshoot denial" yang akan membuka Pemecah Masalah Kontrol Layanan VPC.
API ini akan menampilkan alasan pelanggaran dalam UI yang mudah digunakan, dan apakah ini merupakan pelanggaran ingress atau egress, serta hal-hal berguna lainnya.
Dalam latihan ini, kita akan mencari hal-hal berikut:
authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
Informasi ini sudah cukup bagi kami untuk mengetahui bahwa kami perlu membuat aturan keluar untuk mengizinkan akun layanan Compute Engine mengakses bucket penyimpanan dari ProjectZ ke ProjectX. Kita juga dapat melihat bahwa jaringan tidak berada dalam perimeter yang sama, jadi kita perlu mengizinkan komunikasi VPC ke layanan dan membagikan data di seluruh perimeter layanan.
- Aktifkan Cloud Shell dan buat file .yaml dengan aturan traffic keluar menggunakan editor teks.
nano egresstorage.yaml
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: \"*\"
resources:
- projects/PROJECTX_ID
egressFrom:
identities:
- serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
- Perbarui kebijakan ingress yang melindungi ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY
Sekarang kita dapat mencoba lagi mengakses bucket dari instance VM.
- Di Konsol Cloud, buka pemilih project dan pilih ProjectZ, lalu buka Compute Engine > VM Instances.
- Klik tombol SSH untuk terhubung ke Instance VM dan mengakses command line-nya.
- Setelah Anda berada di VM CLI, coba cantumkan objek di Bucket Penyimpanan.
gcloud storage ls gs://BUCKET_NAME/
Anda akan mendapatkan pesan error berikut:
ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
- Kita perlu memberikan izin pembaca objek ke akun layanan Compute Engine agar dapat mencantumkan objek di Bucket Storage.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
- Sekali lagi, coba cantumkan file hello.txt dari CLI instance VM .
gcloud storage ls gs://BUCKET_NAME/ . . gs://BUCKET_NAME/hello.txt
Sekarang kita dapat mencantumkan objek tanpa pelanggaran izin Kontrol Layanan VPC, tetapi bagaimana dengan mendownload file? Mari kita coba.
gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}
Dan kita akan mendapatkan output berikut
Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
Completed files 1/1 | 54.0B/54.0B
7. 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/atau project Cloud untuk menghindari tagihan. Menghapus project Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.
- Untuk menghapus instance VM Anda, pilih kotak centang di sisi kiri nama instance VM Anda, lalu klik Hapus.

- Untuk menghapus perimeter, selesaikan langkah-langkah berikut:
- Di konsol Google Cloud, klik Security, lalu klik VPC Service Controls di cakupan Organisasi.
- Di halaman VPC Service Controls, di baris tabel yang sesuai dengan perimeter yang ingin Anda hapus, klik "Ikon Hapus"
- Untuk menghapus Tingkat Akses, selesaikan langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Access Context Manager di cakupan Folder.
- Di petak, di baris untuk tingkat akses yang ingin Anda hapus, klik "Ikon Hapus", lalu klik Hapus.
- Untuk menghapus objek dan Bucket Storage, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman bucket Cloud Storage .
- Pilih kotak centang di samping bucket yang Anda buat.
- Klik Hapus.
- Di jendela yang terbuka, konfirmasi bahwa Anda ingin menghapus bucket.
- Klik 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, klik Shutdown.
- Masukkan project ID, lalu klik Shutdown anyway.
8. Selamat!
Dalam codelab ini, Anda telah memperbarui perimeter Uji coba Kontrol Layanan VPC, menerapkannya, dan memecahkan masalahnya.
Pelajari lebih lanjut
- Lihat dokumentasi Kontrol Layanan VPC.
- Lihat dokumentasi Access Context Manager.
- Lihat dokumentasi pemecah masalah VPC-SC.
- Lihat dokumentasi Aturan Ingress dan Egress.
- Lihat dokumentasi Uji Coba.
- Lihat dokumentasi Cloud Storage.
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.