Tutorial Dasar Kontrol Layanan VPC II - Memecahkan Masalah Pelanggaran Traffic Keluar

1. Pengantar

Kontrol Layanan VPC (VPC-SC) adalah kontrol keamanan tingkat organisasi di Google Cloud yang dapat digunakan pelanggan perusahaan untuk memitigasi risiko pemindahan data yang tidak sah. Kontrol Layanan VPC memberikan 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 lain untuk mengurangi kerugian yang disengaja dan tidak disengaja. Seperti yang kita lihat di Tutorial Dasar Kontrol Layanan VPC, 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 traffic keluar Kontrol Layanan VPC saat membuat daftar objek dari Cloud Storage

2. Penyiapan dan persyaratan

Untuk tutorial ini, kami memerlukan prasyarat berikut:

  • Organisasi GCP.
  • Folder di bawah Organisasi.
  • 2 project GCP dalam Organisasi yang sama ditempatkan dalam folder.
  • Izin yang diperlukan di tingkat organisasi.
  • Akun penagihan untuk kedua project.
  • Tutorial Dasar Kontrol Layanan VPC I Penyiapan Kontrol Layanan VPC dan Pengelola Konteks Akses.

dbec101f41102ca2.png

Penyiapan resource

  1. Menyiapkan resource seperti yang dijelaskan dalam "Penyiapan resource" bagian Tutorial Dasar Kontrol Layanan VPC
  2. Pastikan Anda memiliki izin yang diperlukan untuk mengelola Cloud Storage.
  3. Untuk 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 Cloud Console. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi. Lihat panduan Cloud Shell untuk mengetahui detail selengkapnya.

a0ceb29950db4eac.png

Biaya

Anda perlu 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 dilihat di kalkulator harga. Perkiraan biaya Cloud Storage dapat ditemukan di daftar harga ini.

3. Membuat Bucket dan Objek Storage

Seperti yang disebutkan sebelumnya, kami akan menggunakan kembali referensi yang dibuat di tutorial sebelumnya. Jadi kita akan melanjutkan dan melanjutkan pembuatan bucket Cloud Storage. Untuk tutorial ini, kita akan mulai menggunakan gcloud CLI, bukan konsol.

  1. Di Konsol Google, pilih ProjectX. Dalam project ini, kita akan membuat Bucket Penyimpanan dan objek.
  2. Pastikan Anda menetapkan Cloud Shell untuk menggunakan ProjectX dengan menjalankan perintah berikut:
gcloud config set project PROJECT_ID
  1. Di lingkungan pengembangan Anda, jalankan perintah berikut:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. Buat objek penyimpanan agar kita dapat membacanya dari Instance VM yang terletak di ProjectZ. Kita akan membuat file .txt.
nano hello.txt 

Tambahkan apa pun yang Anda inginkan di file teks.

  1. Upload objek ke dalam bucket.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. Pastikan bahwa objek telah diupload ke dalam bucket dengan mencantumkan objek tersebut.
gcloud storage ls gs://BUCKET_NAME

Anda harus melihat file hello.txt yang tercantum di konsol.

4. Melindungi Cloud Storage API

Pada codelab sebelumnya, kita membuat perimeter dan Compute Engine API yang dilindungi. Dalam codelab ini, kita akan mengedit perimeter mode dry run dan menambahkan Cloud Storage. Tindakan ini akan membantu kami menentukan dampak perlindungan perimeter dengan menunjukkan pelanggaran Kontrol Layanan VPC dalam log audit, tetapi resource tersebut akan tetap dapat diakses hingga kami menerapkan perimeter tersebut.

  1. Di Konsol Google, pilih Organisasi Anda; Mengakses Kontrol Layanan VPC. Pastikan Anda berada di cakupan Organisasi.
  2. Buka Cloud Shell dan perbarui perimeter Dry Run "SuperProtection" yang dibuat di lab sebelumnya:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. Memverifikasi bahwa Cloud Storage API telah diperbarui dengan menjelaskan perimeter
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

Di output, Anda akan melihat bahwa Cloud Storage API tercantum di bawah layanan yang dibatasi

bersama dengan Compute Engine API tetapi dengan label "-vpcAccessibleServices: {}":

2025ddc01a2e9a81.pngS

5. Memverifikasi bahwa Cloud Storage API telah dilindungi

Dalam mode Dry Run, verifikasi bahwa "SuperProtection" perimeter menunjukkan penolakan dengan mencantumkan objek dari instance VM yang dibuat di ProjectZ ke ProjectX yang menghosting Bucket Penyimpanan

  1. Di Konsol Cloud, buka pemilih project dan pilih ProjectZ, lalu buka Compute Engine > Instance VM.
  2. Klik tombol SSH untuk terhubung ke Instance VM dan mengakses command line-nya.

5ca02149b78c11f9.pngS

  1. Buat daftar file hello.txt yang telah kita upload sebelumnya.
gcloud storage ls gs://BUCKET_NAME

Karena Cloud Storage API dilindungi dalam mode uji coba, Anda dapat membuat daftar resource, tetapi pasti akan ada pesan error di log audit ProjectZ.

  1. Buka Logs Explorer API di ProjectZ dan cari pesan error terakhir Kontrol Layanan VPC. Anda dapat menggunakan filter ini untuk mendapatkan log yang kami 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 berasal dari Cloud Storage. Berikut adalah contoh tampilan log dan kami dapat memvalidasi bahwa pelanggaran tersebut adalah pelanggaran traffic keluar saat mencoba mencantumkan konten pada 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"
  1. 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
  1. Hubungkan ke instance VM menggunakan SSH, lalu cantumkan lagi bucket penyimpanan 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 berhasil mencegah pemindahan data yang tidak sah 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 didapatkan dari CLI instance VM. Mari kita periksa log audit dan cari ID unik Kontrol Layanan VPC.

  1. Buka pemilih project, lalu pilih ProjectZ.
  2. 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 {i>error<i} terakhir. Karena panggilan API dibuat dari instance VM, akun utama harus berupa akun layanan Compute Engine "PROJECT_NUMBER-compute@developer.gserviceaccount.com"

Karena sudah memiliki ID unik Kontrol Layanan VPC, kita dapat menggunakannya untuk langsung mendapatkan log yang diinginkan menggunakan filter ini:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. Klik header Kontrol Layanan VPC, lalu pilih "Memecahkan masalah penolakan" yang akan membuka Pemecah Masalah Kontrol Layanan VPC.

API ini akan menunjukkan kepada kita alasan pelanggaran dalam UI yang mudah dipahami, dan apakah ini merupakan pelanggaran traffic masuk atau keluar, di antara hal-hal yang berguna lainnya.

Dalam latihan ini, kita akan mencari 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 cukup untuk mengetahui bahwa kita perlu membuat aturan keluar agar akun layanan Compute Engine dapat 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 berbagi data di seluruh perimeter layanan.

  1. Mengaktifkan Cloud Shell dan membuat file .yaml dengan aturan 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
  1. Memperbarui kebijakan masuk yang melindungi ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

Sekarang kita bisa mencoba mengakses bucket dari instance VM lagi.

  1. Di Konsol Cloud, buka pemilih project dan pilih ProjectZ, lalu buka Compute Engine > Instance VM.
  2. Klik tombol SSH untuk terhubung ke Instance VM dan mengakses command line-nya.
  3. Setelah berada di VM CLI, coba buat daftar 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).
  1. Kita perlu memberikan izin pembaca objek ke akun layanan Compute Engine agar dapat mencantumkan objek di Bucket Penyimpanan.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. Sekali lagi, mari kita coba membuat daftar file hello.txt dari CLI instance VM .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Sekarang kita dapat membuat daftar objek tanpa pelanggaran izin Kontrol Layanan VPC, tetapi, bagaimana dengan mendownload file? Jadi, mari kita coba.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

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 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/atau project Cloud untuk menghindari tagihan. Jika project Cloud Anda dihapus, semua resource yang digunakan dalam project tersebut akan dihentikan.

  1. Untuk menghapus instance VM Anda, pilih kotak centang di sisi kiri nama instance VM, lalu klik Delete.

da0abf0894fe03cd.png

  1. Untuk menghapus perimeter, selesaikan langkah-langkah berikut:
  • Di konsol Google Cloud, klik Security, lalu klik VPC Service Controls pada cakupan Organisasi.
  • Di halaman Kontrol Layanan VPC, pada baris tabel yang sesuai dengan perimeter yang ingin Anda hapus, klik "Hapus Ikon"
  1. 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 dihapus, klik "Ikon Hapus", lalu klik Hapus.
  1. Untuk menghapus objek Storage dan Bucket, 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.
  1. Untuk mematikan Project Anda, selesaikan langkah-langkah berikut:

8. Selamat!

Dalam codelab ini, Anda telah memperbarui perimeter Uji Coba Kontrol Layanan VPC, menerapkannya, dan memecahkan masalahnya.

Pelajari lebih lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.