Menyiapkan perimeter Kontrol Layanan VPC untuk jaringan Virtual Private Cloud

Pelajari cara menyiapkan perimeter layanan menggunakan Kontrol Layanan VPC. Tutorial ini menggunakan setelan jaringan seperti firewall, Private Service Connect, dan konfigurasi DNS yang diperlukan untuk menggunakan perimeter Kontrol Layanan VPC secara efektif. Tutorial ini kemudian menunjukkan cara layanan diizinkan atau ditolak, dan cara membuat pengecualian terperinci untuk daftar layanan tertentu yang diizinkan.

Tujuan

  • Konfigurasikan perimeter Kontrol Layanan VPC dengan kontrol jaringan tambahan untuk mengurangi jalur pemindahan yang tidak sah.
  • Mengizinkan atau menolak akses ke layanan di dalam perimeter dari permintaan yang berasal dari dalam atau di luar perimeter.
  • Mengizinkan atau menolak akses ke layanan di luar perimeter dari permintaan yang berasal dalam perimeter.
  • Gunakan kebijakan organisasi Batasi Penggunaan Layanan Resource dan Kontrol Layanan VPC secara bersamaan.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Tutorial ini memerlukan project di bawah organisasi Anda. Jika Anda belum memiliki organisasi Google Cloud, lihat membuat dan mengelola organisasi.

  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Compute Engine, Pengelola Akses Konteks, dan Cloud DNS APIs.

    Enable the APIs

  5. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  6. Pastikan Anda memiliki peran berikut di organisasi: Access Context Manager Admin, Organization Policy Administrator

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih organisasi.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih organisasi.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.
  7. Pastikan Anda memiliki peran berikut di project: Compute Admin, DNS Administrator, IAP-Secured Tunnel User, Service Account User, Service Directory Editor

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.

Menyiapkan perimeter Kontrol Layanan VPC

Untuk mengimplementasikan perimeter Kontrol Layanan VPC untuk jaringan VPC, Anda harus mengimplementasikan kontrol jaringan yang menolak traffic ke layanan eksternal. Bagian berikut menjelaskan konfigurasi jaringan yang harus Anda terapkan di jaringan VPC di dalam perimeter Anda dan contoh konfigurasi perimeter.

Menyiapkan jaringan VPC

Di bagian ini, Anda akan menyiapkan konektivitas pribadi ke Google API dan layanan Google untuk jaringan VPC Anda guna mengurangi berbagai jalur keluar jaringan ke internet.

  1. Di Cloud Shell, tetapkan variabel:

    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

    Ganti kode berikut:

    • PROJECT_ID: project ID untuk project tempat Anda akan membuat resource
    • REGION: region yang dekat dengan lokasi Anda—misalnya, us-central1
    • ZONE: zona yang dekat dengan lokasi Anda—misalnya, us-central1-a
  2. Buat jaringan VPC dan subnet dengan Akses Google Pribadi yang diaktifkan:

    gcloud compute networks create restricted-vpc --subnet-mode=custom
    gcloud compute networks subnets create restricted-subnet \
    --range=10.0.0.0/24 \
    --network=restricted-vpc \
    --enable-private-ip-google-access
    
  3. Buat endpoint Private Service Connect dan aturan penerusan yang dikonfigurasi untuk menggunakan paket vpc-sc:

    gcloud compute addresses create restricted-psc-endpoint \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=10.0.1.1 \
    --network=restricted-vpc
    
    gcloud compute forwarding-rules create restrictedpsc \
    --global \
    --network=restricted-vpc \
    --address=restricted-psc-endpoint \
    --target-google-apis-bundle=vpc-sc
    
  4. Konfigurasikan kebijakan server Cloud DNS guna mengalihkan kueri untuk Google Cloud API ke endpoint Private Service Connect Anda:

    gcloud dns managed-zones create restricted-dns-zone \
      --description="Private DNS Zone to map Google API queries to the Private Service Connect endpoint for Google APIs" \
      --dns-name="googleapis.com." \
      --networks=restricted-vpc \
      --visibility=private
    
    gcloud dns record-sets create googleapis.com  \
    --rrdatas=10.0.1.1 \
    --type=A \
    --ttl=300 \
    --zone=restricted-dns-zone
    
    gcloud dns record-sets create *.googleapis.com  \
    --rrdatas="googleapis.com." \
    --type=CNAME \
    --ttl=300 \
    --zone=restricted-dns-zone
    
  5. Konfigurasikan aturan firewall dengan prioritas rendah untuk menolak semua traffic keluar:

    gcloud compute firewall-rules create deny-all-egress \
    --priority=65534 \
    --direction=egress \
    --network=restricted-vpc \
    --action=DENY \
    --rules=all \
    --destination-ranges=0.0.0.0/0
    
  6. Konfigurasikan aturan firewall pada prioritas yang lebih tinggi agar traffic dapat mencapai alamat IP yang digunakan oleh endpoint Private Service Connect Anda:

    gcloud compute firewall-rules create allow-psc-for-google-apis \
    --priority=1000 \
    --direction=egress \
    --network=restricted-vpc \
    --action=ALLOW \
    --rules=tcp:443 \
    --destination-ranges=10.0.1.1
    

    Aturan firewall ini menolak traffic keluar secara luas, sebelum secara selektif mengizinkan traffic keluar ke endpoint Private Service Connect. Konfigurasi ini menolak traffic keluar ke domain default yang biasanya dapat dijangkau secara default dengan Akses Google Pribadi dan aturan firewall yang tersirat.

Membuat perimeter Kontrol Layanan VPC

Di bagian ini, Anda akan membuat perimeter Kontrol Layanan VPC.

  1. Di Cloud Shell, buat kebijakan akses sebagai prasyarat untuk membuat perimeter Kontrol Layanan VPC:

    gcloud access-context-manager policies create \
    --organization=ORGANIZATION_ID --title "Access policy at organization node"
    

    Outputnya mirip dengan hal berikut ini:

    "Create request issued
    Waiting for operation [operations/accessPolicies/123456789/create/123456789] to complete...done."
    

    Hanya boleh ada satu penampung kebijakan akses di node organisasi. Jika kebijakan telah dibuat di organisasi Anda, outputnya akan mirip dengan berikut ini:

    "ALREADY_EXISTS: Policy already exists with parent ContainerKey{containerId=organizations/123456789012, numericId=123456789012}"
    

    Jika Anda melihat pesan ini, lanjutkan ke langkah berikutnya.

  2. Buat perimeter Kontrol Layanan VPC yang membatasi layanan Cloud Storage dan Compute Engine.

    export POLICY_ID=$(gcloud access-context-manager policies list \
    --organization=ORGANIZATION_ID \
    --format="value(name)")
    
    gcloud access-context-manager perimeters create demo_perimeter \
    --title="demo_perimeter" \
    --resources=projects/$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") \
    --restricted-services="storage.googleapis.com,compute.googleapis.com" \
    --enable-vpc-accessible-services \
    --policy=$POLICY_ID \
    --vpc-allowed-services="RESTRICTED-SERVICES"
    

Memverifikasi layanan yang diizinkan dari traffic di luar perimeter Anda

Bagian berikut menunjukkan bagaimana perimeter Kontrol Layanan VPC mengizinkan atau menolak akses ke permintaan yang dilakukan dari luar perimeter, dan bagaimana Anda dapat secara selektif mengizinkan traffic masuk ke layanan dengan mengonfigurasi tingkat akses dan kebijakan ingress.

Untuk menyimulasikan traffic dari luar perimeter, Anda dapat menjalankan perintah di Cloud Shell. Cloud Shell adalah resource di luar project dan perimeter Anda sendiri. Perimeter mengizinkan atau menolak permintaan meskipun permintaan tersebut memiliki hak istimewa Pengelolaan Akses dan Identitas yang memadai agar berhasil.

Tutorial ini menggunakan Compute Engine API, Cloud Storage API, dan Cloud Resource Manager API, tetapi konsep yang sama juga berlaku untuk layanan lainnya.

Memastikan perimeter menolak traffic eksternal ke layanan yang dibatasi

Di bagian ini, Anda akan memverifikasi bahwa perimeter menolak traffic eksternal ke layanan yang dibatasi.

Diagram arsitektur yang menggambarkan cara perimeter Kontrol Layanan VPC menolak akses ke layanan yang dibatasi

Diagram sebelumnya menggambarkan bagaimana klien yang diberi otorisasi ditolak aksesnya ke layanan di dalam perimeter yang dikonfigurasi sebagai dibatasi, tetapi klien diizinkan untuk mengakses layanan yang tidak Anda konfigurasi sebagai dibatasi.

Dalam langkah-langkah berikut, Anda memverifikasi konsep ini menggunakan Cloud Shell untuk mencoba membuat VM di dalam jaringan VPC Anda, yang gagal karena konfigurasi perimeter Kontrol Layanan VPC.

  1. Di Cloud Shell, jalankan perintah berikut untuk membuat VM di dalam jaringan VPC Anda.

    gcloud compute instances create demo-vm \
        --machine-type=e2-micro \
        --subnet=restricted-subnet \
        --scopes=https://www.googleapis.com/auth/cloud-platform \
        --no-address
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.compute.instances.create) Could not fetch resource:
    - Request is prohibited by organization's policy."
    

    Permintaan gagal karena Cloud Shell berada di luar perimeter Anda, dan Compute Engine dikonfigurasi dengan flag --restricted-services.

  2. Di Cloud Shell, jalankan perintah berikut untuk mengakses layanan Resource Manager, yang tidak dikonfigurasi di flag --restricted-services.

    gcloud projects describe PROJECT_ID
    

    Respons yang sukses akan mengembalikan detail proyek Anda. Respons ini menunjukkan bahwa perimeter Anda mengizinkan traffic eksternal ke Cloud Resource Manager API.

    Anda telah menunjukkan bahwa perimeter menolak traffic eksternal ke layanan yang dikonfigurasi di --restricted-services dan memungkinkan traffic eksternal ke layanan yang tidak dikonfigurasi secara eksplisit di --restricted-services.

Bagian berikut memperkenalkan pola pengecualian untuk menjangkau layanan yang dibatasi di dalam perimeter.

Memastikan tingkat akses memungkinkan pengecualian untuk perimeter

Di bagian ini, Anda memverifikasi bahwa tingkat akses memungkinkan pengecualian terhadap perimeter. Tingkat akses berguna saat Anda ingin membuat pengecualian untuk traffic eksternal agar dapat mengakses semua layanan yang dibatasi di dalam perimeter, dan Anda tidak memerlukan pengecualian terperinci untuk setiap layanan atau atribut lainnya.

Diagram arsitektur yang menggambarkan cara tingkat akses memberikan pengecualian untuk semua layanan di dalam perimeter Kontrol Layanan VPC

Diagram sebelumnya menggambarkan cara tingkat akses memungkinkan klien yang diotorisasi mengakses semua layanan yang dibatasi di dalam perimeter.

Pada langkah berikut, Anda akan memverifikasi konsep ini dengan membuat tingkat akses, lalu membuat permintaan yang berhasil ke layanan Compute Engine. Permintaan ini diizinkan meskipun Anda telah mengonfigurasi Compute Engine sebagai dibatasi.

  1. Dari Cloud Shell, buat file YAML yang menjelaskan konfigurasi level akses dan terapkan ke perimeter Anda. Contoh ini membuat tingkat akses untuk identitas pengguna yang saat ini Anda gunakan untuk menjalankan tutorial.

    export USERNAME=$(gcloud config list account --format "value(core.account)")
    
    cat <<EOF > user_spec.yaml
    - members:
      - user:$USERNAME
    EOF
    
    gcloud access-context-manager levels create single_user_level \
    --title="single-user access level" \
    --basic-level-spec=user_spec.yaml \
    --policy=$POLICY_ID
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --add-access-levels=single_user_level \
    --policy=$POLICY_ID
    
  2. Dari Cloud Shell, jalankan kembali perintah berikut untuk mencoba membuat VM:

    gcloud compute instances create demo-vm \
    --machine-type=e2-micro \
    --subnet=restricted-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address
    

    Kali ini, permintaan tersebut berfungsi. Perimeter Anda mencegah traffic eksternal menggunakan layanan yang dibatasi, tetapi tingkat akses yang Anda konfigurasi memungkinkan pengecualian.

Memastikan kebijakan masuk memungkinkan pengecualian terperinci untuk perimeter

Di bagian ini, Anda memverifikasi bahwa kebijakan ingress memungkinkan pengecualian terperinci terhadap perimeter. Dibandingkan dengan tingkat akses umum, kebijakan traffic masuk yang terperinci dapat mengonfigurasi atribut tambahan tentang sumber traffic dan memungkinkan akses ke setiap layanan atau metode.

Diagram arsitektur yang menggambarkan bagaimana kebijakan masuk memungkinkan pengecualian terperinci untuk menjangkau layanan tertentu di dalam perimeter

Diagram sebelumnya menggambarkan bagaimana kebijakan ingress memungkinkan klien yang diotorisasi hanya mengakses layanan tertentu di dalam perimeter, tanpa mengizinkan akses ke layanan lainnya yang dibatasi.

Dalam langkah-langkah berikut, Anda memverifikasi konsep ini dengan mengganti tingkat akses dengan kebijakan ingress yang memungkinkan klien yang diotorisasi hanya mengakses layanan Compute Engine, tetapi tidak mengizinkan akses ke layanan lain yang dibatasi.

  1. Dari tab Cloud Shell, jalankan perintah berikut untuk menghapus level akses.

    gcloud access-context-manager perimeters update demo_perimeter \
    --policy=$POLICY_ID \
    --clear-access-levels
    
  2. Dari tab Cloud Shell, buat kebijakan ingress yang memungkinkan identitas pengguna Anda masuk ke layanan Compute Engine saja, dan terapkan kebijakan ini ke perimeter Anda.

    cat <<EOF > ingress_spec.yaml
    - ingressFrom:
        identities:
        - user:$USERNAME
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: compute.googleapis.com
        resources:
        - '*'
    EOF
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --set-ingress-policies=ingress_spec.yaml \
    --policy=$POLICY_ID
    
  3. Dari tab Cloud Shell, jalankan perintah berikut untuk membuat bucket Cloud Storage di dalam perimeter.

    gcloud storage buckets create gs://PROJECT_ID-01
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.storage.buckets.create) HTTPError 403: Request is prohibited by organization's policy."
    

    Cloud Shell adalah klien di luar perimeter, sehingga perimeter Kontrol Layanan VPC memblokir Cloud Shell agar tidak berkomunikasi dengan layanan yang dibatasi di dalam perimeter.

  4. Dari tab Cloud Shell, jalankan perintah berikut untuk membuat permintaan ke layanan Compute Engine di dalam perimeter.

    gcloud compute instances describe demo-vm --zone=ZONE
    

    Respons yang berhasil akan menampilkan detail demo-vm. Respons ini menunjukkan bahwa perimeter Anda mengizinkan traffic eksternal yang memenuhi kondisi kebijakan ingress Anda ke layanan Compute Engine.

Verifikasi layanan yang diizinkan dari traffic di dalam perimeter Anda

Bagian berikut menunjukkan bagaimana perimeter Kontrol Layanan VPC mengizinkan atau menolak permintaan ke layanan dari dalam perimeter, dan cara Anda dapat secara selektif mengizinkan traffic keluar ke layanan eksternal dengan kebijakan traffic keluar.

Untuk menunjukkan perbedaan antara traffic di dalam dan di luar perimeter, bagian berikut menggunakan Cloud Shell di luar perimeter dan instance Compute Engine yang Anda buat di dalam perimeter. Perintah yang Anda jalankan dari sesi SSH pada instance Compute Engine di dalam perimeter menggunakan identitas akun layanan yang terpasang, sedangkan perintah yang dijalankan dari Cloud Shell di luar perimeter menggunakan identitas Anda sendiri. Saat mengikuti penyiapan yang direkomendasikan untuk tutorial, perimeter akan mengizinkan atau menolak permintaan meskipun permintaan tersebut memiliki hak istimewa IAM yang memadai agar berhasil.

Tutorial ini menggunakan Compute Engine API, Cloud Storage API, dan Cloud Resource Manager API, tetapi konsep yang sama juga berlaku untuk layanan lainnya.

Memverifikasi bahwa perimeter memungkinkan traffic internal ke layanan yang dibatasi di dalam perimeter

Di bagian ini, Anda memastikan bahwa perimeter memungkinkan traffic dari endpoint jaringan di dalam perimeter Anda jika layanan juga dikonfigurasi di layanan yang dapat diakses VPC.

Diagram arsitektur yang menggambarkan cara konfigurasi vpc-Accessible-services memungkinkan layanan dijangkau dari endpoint jaringan internal Anda

Diagram sebelumnya menggambarkan bagaimana perimeter memungkinkan traffic dari endpoint jaringan di dalam perimeter untuk menjangkau layanan yang dibatasi yang juga Anda konfigurasikan sebagai layanan yang dapat diakses VPC. Layanan yang tidak Anda konfigurasi sebagai layanan yang dapat diakses VPC tidak dapat dijangkau dari endpoint jaringan di dalam perimeter.

Pada langkah-langkah berikut, Anda akan memverifikasi konsep ini dengan membuat koneksi SSH ke instance Compute Engine di dalam perimeter, lalu membuat permintaan ke layanan.

  1. Dari Cloud Shell, buat aturan firewall yang mengizinkan traffic SSH ke jaringan VPC Anda dengan mengizinkan traffic masuk dari rentang alamat IP 35.235.240.0/20 yang digunakan oleh layanan IAP untuk penerusan TCP:

    gcloud compute firewall-rules create demo-allow-ssh \
    --direction=INGRESS \
    --priority=1000 \
    --network=restricted-vpc \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20
    
  2. Mulai sesi SSH untuk instance ini:

    gcloud compute ssh demo-vm --zone=ZONE
    

    Pastikan Anda telah berhasil terhubung ke instance demo-vm dengan mengonfirmasi bahwa perintah command line telah berubah untuk menampilkan nama host instance Anda:

    username@demo-vm:~$
    

    Jika perintah sebelumnya gagal, Anda mungkin melihat pesan error seperti berikut:

    "[/usr/bin/ssh] exited with return code [255]"
    

    Dalam hal ini, instance Compute Engine mungkin belum menyelesaikan booting. Tunggu sebentar, lalu coba lagi.

  3. Dari sesi SSH di dalam perimeter Anda, verifikasi layanan yang diizinkan oleh perimeter Anda secara internal menggunakan layanan Google Cloud yang dikonfigurasi dalam daftar layanan yang dapat diakses VPC yang diizinkan. Misalnya, coba perintah apa pun menggunakan layanan Compute Engine.

    gcloud compute instances describe demo-vm --zone=ZONE
    

    Respons yang berhasil akan menampilkan detail demo-vm. Respons ini menunjukkan bahwa perimeter Anda mengizinkan traffic internal ke Compute Engine API.

  4. Dari sesi SSH di dalam perimeter Anda, pastikan layanan yang tidak disertakan dalam daftar layanan yang dapat diakses VPC tidak diizinkan dari VM Anda. Misalnya, perintah berikut menggunakan layanan Resource Manager, yang tidak dikonfigurasi dalam daftar layanan yang dapat diakses VPC.

    gcloud projects describe PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.projects.list) PERMISSION_DENIED: Request is prohibited by organization's policy."
    

    Instance Compute Engine Anda dan endpoint jaringan lainnya hanya dapat meminta layanan yang dikonfigurasi dalam daftar layanan yang dapat diakses VPC yang diizinkan. Namun, resource serverless atau traffic layanan yang berasal dari luar perimeter Anda mungkin meminta layanan tersebut. Jika ingin mencegah layanan digunakan dalam project Anda, lihat kebijakan Penggunaan Resource Layanan yang Dibatasi.

Memastikan perimeter menolak traffic internal ke layanan yang dibatasi di luar perimeter

Di bagian ini, Anda memverifikasi bahwa perimeter memblokir komunikasi dari layanan di dalam perimeter ke layanan Google Cloud di luar perimeter.

Diagram arsitektur yang menggambarkan cara perimeter Kontrol Layanan VPC menolak akses dari traffic di dalam perimeter ke layanan yang dibatasi di luar perimeter

Diagram sebelumnya menggambarkan bagaimana traffic internal tidak dapat berkomunikasi dengan layanan yang dibatasi di luar perimeter.

Pada langkah berikut, Anda memverifikasi konsep ini dengan mencoba mengirim traffic internal ke layanan yang dibatasi di dalam perimeter dan ke layanan yang dibatasi di luar perimeter.

  1. Dari sesi SSH dalam perimeter Anda, jalankan perintah berikut untuk membuat bucket penyimpanan di dalam perimeter Anda. Perintah ini berfungsi karena layanan Cloud Storage dikonfigurasi di restricted-services dan accessible-services.

    gcloud storage buckets create gs://PROJECT_ID-02
    

    Respons yang berhasil akan membuat bucket penyimpanan. Respons ini menunjukkan bahwa perimeter Anda mengizinkan traffic internal ke layanan Cloud Storage.

  2. Dari sesi SSH dalam perimeter Anda, jalankan perintah berikut untuk membaca dari bucket yang berada di luar perimeter Anda. Bucket publik ini mengizinkan izin hanya baca ke allUsers, tetapi perimeter ini menolak traffic dari dalam perimeter Anda ke layanan terbatas di luar perimeter.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.storage.objects.describe) HTTPError 403: Request is prohibited
    by organization's policy."
    

    Respons ini menunjukkan bahwa Anda dapat menggunakan layanan yang dibatasi di dalam perimeter, tetapi resource di dalam perimeter tidak dapat berkomunikasi dengan layanan yang dibatasi di luar perimeter.

Memastikan bahwa kebijakan traffic keluar mengizinkan pengecualian ke perimeter

Di bagian ini, Anda memverifikasi bahwa kebijakan traffic keluar mengizinkan pengecualian ke perimeter.

Diagram arsitektur yang menggambarkan bagaimana kebijakan traffic keluar memungkinkan pengecualian tertentu untuk menjangkau layanan yang dibatasi di luar perimeter

Diagram sebelumnya menggambarkan cara traffic internal dapat berkomunikasi dengan resource eksternal tertentu saat Anda memberikan pengecualian sempit terkait kebijakan keluar.

Dalam langkah-langkah berikut, Anda memverifikasi konsep ini dengan membuat kebijakan keluar, lalu mengakses bucket Cloud Storage publik di luar perimeter yang diizinkan oleh kebijakan keluar.

  1. Buka sesi Cloud Shell baru dengan mengklik buka tab baru di Cloud Shell. Pada langkah berikutnya, Anda akan beralih antara tab pertama dengan sesi SSH di dalam perimeter Anda, dan tab kedua di Cloud Shell di luar perimeter Anda dengan perintah command line dimulai dengan username@cloudshell.

  2. Dari tab Cloud Shell, buat kebijakan traffic keluar yang memungkinkan keluar dari identitas akun layanan terkait demo-vm menggunakan metode google.storage.objects.get ke bucket publik di project eksternal. Perbarui perimeter dengan kebijakan traffic keluar.

    export POLICY_ID=$(gcloud access-context-manager policies list \
    --organization=ORGANIZATION_ID \
    --format="value(name)")
    
    export SERVICE_ACCOUNT_EMAIL=$(gcloud compute instances describe demo-vm \
    --zone=ZONE) \
    --format="value(serviceAccounts.email)"
    
    cat <<EOF > egress_spec.yaml
    - egressFrom:
        identities:
          - serviceAccount:$SERVICE_ACCOUNT_EMAIL
      egressTo:
        operations:
        - methodSelectors:
          - method: 'google.storage.objects.get'
          serviceName: storage.googleapis.com
        resources:
        - projects/950403849117
    EOF
    
    gcloud access-context-manager perimeters update demo_perimeter \
    --set-egress-policies=egress_spec.yaml \
    --policy=$POLICY_ID
    
  3. Kembali ke tab yang berisi sesi SSH ke VM di dalam perimeter Anda, dengan prompt command line yang dimulai dengan username@demo-vm.

  4. Dari sesi SSH dalam perimeter Anda, buat permintaan lain ke bucket Cloud Storage dan pastikan bahwa permintaan tersebut berfungsi.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Outputnya mirip dengan hal berikut ini:

    "Hello world!
    This is a sample file in Cloud Storage that is viewable to allUsers."
    

    Respons ini menunjukkan bahwa kebijakan perimeter dan traffic keluar Anda mengizinkan traffic internal dari identitas tertentu ke bucket Cloud Storage tertentu.

  5. Dari sesi SSH dalam perimeter, Anda juga dapat menguji metode lain yang tidak secara eksplisit diizinkan oleh pengecualian kebijakan keluar. Misalnya, perintah berikut memerlukan izin google.storage.buckets.list yang ditolak oleh perimeter Anda.

    gcloud storage ls gs://solutions-public-assets/vpcsc-tutorial/*
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.storage.cp) Request is prohibited by organization's policy."
    

    Respons ini menunjukkan bahwa perimeter Anda menolak traffic internal agar tidak mencantumkan objek dalam bucket eksternal. Ini menunjukkan bahwa kebijakan traffic keluar secara terbatas memungkinkan metode yang ditentukan secara eksplisit.

Untuk referensi selengkapnya tentang pola umum untuk berbagi data di luar perimeter layanan, lihat pertukaran data yang aman dengan aturan masuk dan keluar.

(Opsional) Mengonfigurasi kebijakan Penggunaan Resource Layanan yang Dibatasi

Anda mungkin juga memiliki persyaratan internal atau persyaratan kepatuhan untuk hanya mengizinkan API yang disetujui satu per satu untuk digunakan di lingkungan Anda. Dalam hal ini, Anda juga dapat mengonfigurasi Layanan Kebijakan Organisasi Penggunaan Resource Layanan yang Dibatasi. Dengan menerapkan Kebijakan Organisasi dalam project, Anda membatasi layanan mana yang dapat dibuat dalam project tersebut. Namun, Kebijakan Organisasi tidak mencegah layanan dalam project ini berkomunikasi dengan layanan di project lain. Sebagai perbandingan, Kontrol Layanan VPC memungkinkan Anda menentukan perimeter untuk mencegah komunikasi dengan layanan di luar perimeter.

Misalnya, jika Anda menentukan Kebijakan Organisasi untuk mengizinkan Compute Engine dan menolak Cloud Storage di project, VM dalam project ini tidak dapat membuat bucket Cloud Storage di project Anda. Namun, VM dapat membuat permintaan ke bucket Cloud Storage di project lain, sehingga pemindahan yang tidak sah dengan layanan Cloud Storage masih dapat dilakukan. Langkah berikut menunjukkan cara menerapkan dan menguji skenario ini:

  1. Beralihlah ke tab Cloud Shell, yang perintah command line-nya dimulai dengan username@cloudshell.
  2. Dari tab Cloud Shell, buat file YAML yang mendeskripsikan Layanan Kebijakan Organisasi yang hanya akan mengizinkan penggunaan layanan Compute Engine dan menolak semua layanan lainnya, kemudian menerapkannya ke project Anda.

    cat <<EOF > allowed_services_policy.yaml
    constraint: constraints/gcp.restrictServiceUsage
    listPolicy:
      allowedValues:
      - compute.googleapis.com
      inheritFromParent: true
    EOF
    
    gcloud resource-manager org-policies set-policy allowed_services_policy.yaml \
    --project=PROJECT_ID
    
  3. Kembali ke tab yang berisi sesi SSH ke VM di dalam perimeter Anda, dengan prompt command line yang dimulai dengan username@demo-vm.

  4. Dari sesi SSH dalam perimeter Anda, jalankan perintah berikut untuk melihat bucket penyimpanan yang sama dengan yang Anda buat sebelumnya di dalam project ini.

    gcloud storage buckets describe gs://PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    "ERROR: (gcloud.storage.buckets.create) HTTPError 403: Request is disallowed by organization's constraints/gcp.restrictServiceUsage constraint for 'projects/123456789' attempting to use service 'storage.googleapis.com'."
    

    Respons ini menunjukkan bahwa Organization Policy Service menolak layanan Cloud Storage di dalam project Anda, terlepas dari konfigurasi perimeter Anda.

  5. Dari sesi SSH dalam perimeter Anda, jalankan perintah berikut untuk melihat bucket penyimpanan di luar perimeter yang diizinkan oleh kebijakan keluar Anda.

    gcloud storage cat gs://solutions-public-assets/vpcsc-tutorial/helloworld.txt
    

    Outputnya mirip dengan hal berikut ini:

    "Hello world!
    This is a sample file in Cloud Storage that is viewable to allUsers."
    

    Respons yang berhasil akan menampilkan konten helloworld.txt di bucket penyimpanan eksternal. Respons ini menunjukkan bahwa kebijakan perimeter dan traffic keluar Anda memungkinkan traffic internal mencapai bucket penyimpanan eksternal dalam kondisi terbatas tertentu, tetapi Organization Policy Service menolak layanan Cloud Storage dalam project Anda, terlepas dari konfigurasi perimeter Anda. Layanan di luar project Anda mungkin masih digunakan untuk pemindahan yang tidak sah jika diizinkan oleh perimeter Anda, terlepas dari Layanan Kebijakan Organisasi Penggunaan Resource Layanan yang Dibatasi.

    Untuk menolak komunikasi dengan Cloud Storage atau layanan Google lainnya di luar perimeter, Layanan Kebijakan Organisasi Penggunaan Resource Layanan Terbatas saja tidak cukup, Anda harus mengonfigurasi perimeter Kontrol Layanan VPC. Kontrol Layanan VPC mengurangi jalur pemindahan data yang tidak sah, dan Penggunaan Resource Layanan yang Dibatasi adalah kontrol kepatuhan untuk mencegah pembuatan layanan yang tidak disetujui di lingkungan Anda. Gunakan kontrol ini bersama-sama untuk memblokir berbagai jalur pemindahan yang tidak sah dan secara selektif mengizinkan layanan yang disetujui untuk penggunaan internal di lingkungan Anda.

Pembersihan

Menghapus project Google Cloud:

gcloud projects delete PROJECT_ID

Meskipun perimeter Kontrol Layanan VPC tidak menimbulkan biaya tambahan apa pun, perimeter tersebut harus dibersihkan untuk menghindari kekacauan dan resource yang tidak digunakan di organisasi Anda.

  1. Pada pemilih project di bagian atas Konsol Google Cloud, pilih organisasi yang Anda gunakan selama tutorial ini.
  2. Di Konsol Google Cloud, buka halaman Kontrol Layanan VPC.

    Buka Kontrol Layanan VPC

  3. Di bagian daftar perimeter, pilih perimeter yang ingin Anda hapus, lalu klik Delete.

  4. Pada dialog, klik Hapus lagi untuk mengonfirmasi penghapusan.

Langkah selanjutnya