Mengonfigurasi Kontrol Layanan VPC

Kontrol Layanan VPC adalah fitur Google Cloud yang memungkinkan Anda menyiapkan perimeter yang aman untuk mencegah pemindahan data yang tidak sah. Panduan ini menunjukkan cara menggunakan Kontrol Layanan VPC dengan Cloud Functions untuk meningkatkan keamanan fungsi Anda.

Untuk batasan pada integrasi ini, lihat dokumentasi Kontrol Layanan VPC.

Penyiapan tingkat organisasi

Untuk menggunakan Kontrol Layanan VPC dengan Cloud Functions, Anda dapat mengonfigurasi perimeter layanan di tingkat organisasi. Dengan mengonfigurasi kebijakan organisasi yang sesuai, Anda dapat memastikan bahwa pemeriksaan Kontrol Layanan VPC diterapkan saat menggunakan Cloud Functions dan bahwa developer hanya dapat men-deploy layanan yang sesuai dengan Kontrol Layanan VPC. Pelajari pewarisan dan pelanggaran lebih lanjut saat menetapkan kebijakan organisasi.

Menyiapkan perimeter Kontrol Layanan VPC

Untuk menyiapkan perimeter layanan, Anda memerlukan Organization Viewer (roles/resourcemanager.organizationViewer) dan Access Context Manager Editor ( roles/accesscontextmanager.policyEditor).

Ikuti Panduan Memulai Kontrol Layanan VPC untuk:

  1. Membuat perimeter layanan.

  2. Tambahkan satu atau beberapa project ke perimeter.

  3. Batasi Cloud Functions API (generasi ke-1) atau Cloud Functions API dan Cloud Run Admin API (generasi ke-2).

Setelah menyiapkan perimeter layanan Anda, semua panggilan ke API yang dibatasi akan diperiksa untuk memastikan bahwa panggilan berasal dari dalam perimeter yang sama.

Opsional: Mengaktifkan akses perimeter untuk mesin pengembangan

Karena pemeriksaan Kontrol Layanan VPC diterapkan untuk Cloud Functions API, panggilan ke Cloud Functions API akan gagal kecuali panggilan tersebut berasal dari dalam perimeter layanan. Oleh karena itu, untuk mengelola fungsi dengan Cloud Functions API, UI Cloud Functions di Google Cloud Console, atau Google Cloud CLI, pilih salah satu opsi berikut:

  • Gunakan mesin di dalam perimeter Kontrol Layanan VPC. Misalnya, Anda dapat menggunakan VM Compute Engine atau mesin lokal yang terhubung ke jaringan VPC Anda menggunakan VPN.

  • Beri developer fungsi akses ke perimeter. Misalnya, Anda dapat membuat tingkat akses yang mengaktifkan akses perimeter berdasarkan alamat IP atau identitas pengguna. Lihat Mengizinkan akses ke resource yang dilindungi dari luar perimeter untuk mengetahui informasi selengkapnya.

Menyiapkan kebijakan organisasi

Untuk mengelola kebijakan organisasi, Anda memerlukan peran Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin).

Untuk mematuhi Kontrol Layanan VPC dan melindungi dari pemindahan data yang tidak sah, siapkan kebijakan organisasi berikut yang mengontrol setelan jaringan yang diizinkan untuk Cloud Functions di perimeter layanan.

Batasi setelan ingress yang diizinkan

Kebijakan organisasi cloudfunctions.allowedIngressSettings mengontrol setelan ingress yang boleh digunakan developer untuk Cloud Functions. Tetapkan kebijakan organisasi ini untuk mewajibkan developer menggunakan nilai ALLOW_INTERNAL_ONLY:

Konsol

  1. Buka halaman kebijakan Setelan masuk yang diizinkan di Google Cloud Console:

    Buka kebijakan organisasi

  2. Klik Manage Policy.

  3. Di halaman Edit policy, pilih Customize.

  4. Di bagian Policy enforcement, pilih Replace.

  5. Di bagian Policy values, pilih Custom.

  6. Di bagian Policy values, pilih Allow.

  7. Di bagian Custom values, masukkan ALLOW_INTERNAL_ONLY.

  8. Klik Set Policy.

gcloud

Gunakan perintah gcloud resource-manager org-policies allow.

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \
  --organization ORGANIZATION_ID

dengan ORGANIZATION_ID sebagai ID organisasi Anda.

Setelah kebijakan organisasi ini diterapkan, semua fungsi harus menggunakan nilai ALLOW_INTERNAL_ONLY untuk setelan ingress-nya. Artinya, fungsi HTTP hanya dapat menerima traffic yang berasal dari jaringan VPC dalam perimeter layanan. Deployment fungsi yang menentukan nilai berbeda akan gagal.

Perlu konektor VPC

Kebijakan organisasi cloudfunctions.requireVPCConnector mengontrol apakah konektor Akses VPC Serverless diperlukan untuk fungsi. Tetapkan kebijakan organisasi ini untuk menerapkan batasan ini:

Konsol

  1. Buka halaman kebijakan Require VPC Connector di konsol Google Cloud:

    Buka kebijakan organisasi

  2. Klik Manage Policy.

  3. Di halaman Edit policy, pilih Customize.

  4. Di bagian Enforcement, pilih On.

  5. Klik Set Policy.

gcloud

Gunakan perintah gcloud resource-manager org-policies enable-enforce.

gcloud resource-manager org-policies enable-enforce \
  cloudfunctions.requireVPCConnector \
  --organization ORGANIZATION_ID

dengan ORGANIZATION_ID sebagai ID organisasi Anda.

Setelah kebijakan organisasi ini diterapkan, semua fungsi harus menggunakan konektor Akses VPC Serverless. Penerapan fungsi yang tidak menentukan konektor akan gagal.

Batasi setelan egress konektor VPC yang diizinkan

Kebijakan organisasi cloudfunctions.allowedVpcConnectorEgressSettings mengontrol setelan egress yang boleh digunakan developer untuk Cloud Functions. Tetapkan kebijakan organisasi ini untuk hanya mengizinkan nilai ALL_TRAFFIC:

Konsol

  1. Buka halaman kebijakan Setelan egress Konektor VPC yang diizinkan di konsol Google Cloud:

    Buka kebijakan organisasi

  2. Klik Manage Policy.

  3. Di halaman Edit policy, pilih Customize.

  4. Di bagian Policy enforcement, pilih Replace.

  5. Di bagian Policy values, pilih Custom.

  6. Di bagian Policy values, pilih Allow.

  7. Di bagian Custom values, masukkan ALL_TRAFFIC.

  8. Klik Set Policy.

gcloud

Gunakan perintah gcloud resource-manager org-policies allow.

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \
  --organization ORGANIZATION_ID

dengan ORGANIZATION_ID sebagai ID organisasi Anda.

Setelah kebijakan organisasi ini diterapkan, semua fungsi harus menggunakan nilai ALL_TRAFFIC untuk setelan egress. Artinya, fungsi tersebut harus merutekan semua traffic keluar melalui jaringan VPC Anda. Deployment fungsi yang menentukan nilai yang berbeda akan gagal.

Dikombinasikan dengan kebijakan organisasi cloudfunctions.requireVPCConnector, kebijakan ini memaksa semua traffic keluar melintasi jaringan VPC yang tunduk pada aturan firewall dan perutean yang dikonfigurasi.

Penyiapan level project

Untuk project individu dalam perimeter layanan, Anda harus melakukan konfigurasi tambahan agar dapat menggunakan Kontrol Layanan VPC.

Mengonfigurasi jaringan VPC

Untuk mengakses Google API dan layanan Google sekaligus memitigasi risiko pemindahan data yang tidak sah, permintaan harus dikirim ke rentang IP virtual (VIP) terbatas ,199.36.153.4/30 (restricted.googleapis.com ).

Untuk setiap jaringan VPC dalam sebuah project, ikuti langkah-langkah berikut untuk memblokir traffic keluar kecuali untuk traffic ke rentang VIP yang dibatasi:

  1. Konfigurasi aturan firewallagar data tidak keluar dari jaringan VPC:

    • Buat penolakan akan egress yang memblokir semua traffic keluar.

    • Buat perizinan aturan egress yang mengizinkan traffic ke 199.36.153.4/30 di port TCP 443. Pastikan aturan tersebut memiliki prioritas sebelum penolakan aturan egress yang baru saja Anda buat—aturan ini hanya mengizinkan egress rentang VIP yang dibatasi.

  2. Konfigurasikan DNS untuk me-resolve *.googleapis.com ke restricted.googleapis.com.

  3. Konfigurasi DNS dengan data A yang memetakan *.cloudfunctions.net ke rentang IP 199.36.153.4/30. Anda dapat melakukannya dengan Cloud DNS:

    gcloud dns managed-zones create ZONE_NAME \
    --visibility=private \
    --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \
    --description=none \
    --dns-name=cloudfunctions.net
    
    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=ZONE_NAME \
    --ttl=300
    
    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
  4. Aktifkan Akses Google Pribadi untuk Subnet Konektor VPC Anda.

Pada tahap ini, permintaan yang berasal dari dalam jaringan VPC:

  • Tidak dapat keluar dari jaringan VPC, sehingga mencegah egress di luar perimeter layanan.
  • Hanya dapat menjangkau Google API dan layanan yang memeriksa Kontrol Layanan VPC, sehingga mencegah pemindahan yang tidak sah melalui Google API.

Memberi akun layanan Cloud Build akses ke perimeter Kontrol Layanan VPC

Cloud Functions menggunakan Cloud Build untuk mem-build kode sumber Anda ke dalam container yang dapat dijalankan. Untuk menggunakan Cloud Functions dengan Kontrol Layanan VPC, Anda harus mengonfigurasi akun layanan Cloud Build (baik default maupun kustom) agar dapat mengakses perimeter layanan Anda.

Menemukan nama akun layanan

Jika menggunakan akun layanan Cloud Build default, Anda dapat menemukan namanya seperti berikut:

  1. Gunakan halaman IAM di Google Cloud Console untuk menemukan akun layanan Cloud Build.

    Membuka IAM

  2. Pastikan project yang benar ditampilkan di drop-down project.

  3. Telusuri cloudbuild.gserviceaccount.com. Alamat email dalam formulir PROJECT_NUMBER@cloudbuild.gserviceaccount.com adalah nama akun layanan.

Jika Anda memiliki akun layanan Cloud Build kustom, gunakan nama tersebut.

Memberi akun layanan akses ke perimeter layanan

Setelah Anda memiliki nama akun layanan, ikuti panduan di Membatasi akses menurut pengguna atau akun layanan untuk membuat tingkat akses untuk akun layanan. Kemudian, ikuti Menambahkan tingkat akses ke perimeter yang ada untuk menambahkan tingkat akses ke perimeter layanan Anda.

Men-deploy fungsi yang sesuai dengan Kontrol Layanan VPC

Setelah Kontrol Layanan VPC dikonfigurasi untuk Cloud Functions, Anda harus memastikan bahwa semua fungsi yang di-deploy dalam perimeter layanan mematuhi kebijakan organisasi yang ditentukan. Hal ini berarti:

  • Semua layanan harus menggunakan konektor Akses VPC Serverless. Lihat Menghubungkan ke jaringan VPC untuk mengetahui informasi lebih lanjut.
  • Semua layanan hanya boleh mengizinkan traffic dari sumber internal. Lihat Setelan ingress untuk mengetahui informasi lebih lanjut.
  • Semua layanan harus merutekan semua traffic keluar melalui jaringan VPC. Lihat Setelan egress untuk mengetahui informasi lebih lanjut.

Deployment fungsi yang tidak memenuhi kriteria ini akan gagal.

Mengaudit fungsi yang ada untuk memastikan kepatuhan Kontrol Layanan VPC

Setelah menyiapkan Kontrol Layanan VPC, layanan baru yang dibuat di project dalam perimeter layanan akan otomatis diperiksa kepatuhannya. Namun, untuk menghindari gangguan workload yang ada, layanan yang ada akan terus berfungsi dan mungkin tidak mematuhi kebijakan organisasi.

Sebaiknya Anda mengaudit fungsi yang ada dan mengupdate atau men-deploy ulang fungsi jika diperlukan. Untuk memfasilitasi proses ini, Anda dapat membuat skrip yang menggunakan Cloud Functions API untuk mencantumkan fungsi dan menandai fungsi yang tidak menetapkan setelan jaringan yang tepat.

Menggunakan Kontrol Layanan VPC dengan fungsi di luar perimeter

Bagian sebelumnya berlaku untuk skenario saat Anda men-deploy Cloud Functions dalam perimeter layanan Kontrol Layanan VPC.

Jika Anda perlu men-deploy fungsi di luar perimeter layanan, tetapi fungsi tersebut memerlukan akses ke resource di dalam perimeter, gunakan konfigurasi berikut:

  1. Beri akun layanan Cloud Build akses ke perimeter Kontrol Layanan VPC.
  2. Beri akses akun layanan runtime fungsi ke perimeter. Anda dapat melakukannya dengan membuat tingkat akses dan menambahkan tingkat akses ke perimeter layanan, atau dengan membuat kebijakan ingress di perimeter.
  3. Hubungkan fungsi ke jaringan VPC.
  4. Rutekan semua traffic keluar dari fungsi melalui jaringan VPC. Lihat Setelan egress untuk mengetahui informasi lebih lanjut.

Setelah Anda menyelesaikan konfigurasi ini, fungsi tersebut akan dapat menjangkau resource yang dilindungi oleh perimeter.