Mengizinkan akses ke resource yang dilindungi dari alamat IP internal

Halaman ini menjelaskan cara mengizinkan traffic dari alamat IP internal di jaringan VPC ke perimeter layanan menggunakan aturan masuk dan keluar.

Ringkasan

Anda dapat menggunakan Kontrol Layanan VPC untuk menentukan kondisi guna mengizinkan rentang alamat IP jaringan VPC tertentu mengakses project dan jaringan VPC yang dilindungi. Fitur ini memungkinkan Anda melakukan tugas berikut:

  • Mendukung kondisi tingkat akses dasar untuk mengizinkan rentang alamat IP internal jaringan VPC.

  • Izinkan penggunaan kondisi tingkat akses ini untuk panggilan API masuk atau keluar ke dalam atau ke luar batas perimeter layanan.

Fitur ini memberikan manfaat berikut:

  • Anda dapat menentukan kondisi dalam konfigurasi Kontrol Layanan VPC untuk mengizinkan akses dari alamat IP internal di jaringan VPC.

  • Alur kerja yang memerlukan panggilan API untuk melewati beberapa perimeter layanan dapat membatasi akses agar hanya mengizinkan beberapa subnet, bukan mengizinkan seluruh jaringan atau project VPC.

  • Anda dapat mengonfigurasi berbagai resource dari infrastruktur lokal agar dapat hanya mengakses resource Google Cloud tertentu. Anda harus menggunakan rentang alamat IP subnet yang terkait dengan resource lokal ini dan jaringan VPC zona landing sebagai bagian dari tingkat akses.

Gambar 1 menunjukkan contoh penyiapan yang memungkinkan akses ke layanan tertentu yang dilindungi dari alamat IP internal yang diotorisasi.

Batasan penggunaan alamat IP internal

Saat Anda menggunakan alamat IP internal di Kontrol Layanan VPC, batasan berikut berlaku:

  • Anda dapat mengaktifkan alamat IP internal hanya dengan tingkat akses dasar, bukan dengan tingkat akses kustom.

  • Sebaiknya jangan negasi tingkat akses dengan kondisi berbasis alamat IP internal karena dapat menyebabkan perilaku yang tidak terduga.

  • Batasan dalam menambahkan jaringan VPC ke perimeter layanan juga berlaku.

  • Saat mencatat log audit kebijakan yang ditolak, Kontrol Layanan VPC akan menyamarkan nama jaringan VPC sebagai __UNKNOWN__ dalam log audit.

  • Jaringan VPC yang SUBNET_MODE-nya disetel ke custom, tetapi tidak memiliki subnet, tidak didukung. Untuk mengaktifkan alamat IP internal, jaringan VPC harus berisi setidaknya satu subnet.

  • Anda hanya dapat menentukan 500 jaringan VPC di semua tingkat akses dalam kebijakan akses Anda.

  • Saat Anda menghapus jaringan VPC yang direferensikan oleh tingkat akses atau perimeter layanan, lalu membuat ulang jaringan VPC lain dengan nama yang sama, Kontrol Layanan VPC tidak otomatis mengaktifkan alamat IP internal di jaringan VPC yang dibuat ulang. Untuk mengatasi keterbatasan ini, buat jaringan VPC dengan nama yang berbeda dan tambahkan ke perimeter.

  • Anda tidak dapat menggunakan alamat IP internal untuk mengizinkan akses dari layanan yang dikelola Google. Misalnya, Cloud SQL.

  • Jika Anda menggunakan tingkat akses yang memiliki kondisi berbasis alamat IP internal dengan aturan keluar, sebaiknya jangan tambahkan kondisi lain seperti jenis perangkat, identitas pengguna ke tingkat akses.

  • Alamat IP internal tidak cocok dengan tingkat akses yang merujuk ke wilayah geografis.

Menggunakan alamat IP internal di tingkat akses

  1. Tentukan nama jaringan VPC dan rentang alamat IP di kolom vpcNetworkSources kondisi tingkat akses dasar.

    • Nama jaringan VPC. Anda harus menentukan nama jaringan VPC dalam format berikut:

      //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME
      

      Misalnya, //compute.googleapis.com/projects/my-project/global/networks/my-vpc.

    • Rentang alamat IP. Rentang alamat IP yang ditentukan di kolom VpcSubNetwork VpcNetworkSource harus mengikuti spesifikasi subnetwork IP blok CIDR. Anda dapat menggunakan rentang alamat IP apa pun yang merupakan rentang IPv4 yang valid untuk subnet.

  2. Gunakan tingkat akses ini dengan kondisi izin di IngressSource atau EgressSource.

Dengan menggunakan contoh skenario, bagian berikut menjelaskan cara melakukan langkah-langkah ini untuk mengaktifkan alamat IP internal.

Contoh penggunaan alamat IP internal untuk menyiapkan akses subnet

Pada contoh berikut, Anda memiliki dua project:

  1. Project host jaringan: Project1 menghosting jaringan VPC: default. Dua VM di Project1, VM1, dan VM2, menggunakan jaringan ini sebagai antarmuka jaringan untuk mengirim traffic.

  2. Project Cloud Storage: Project2 berisi bucket Cloud Storage.

Anda dapat menggunakan Kontrol Layanan VPC untuk hanya mengizinkan VM1 dari Project1 mengakses bucket Cloud Storage di Project2 menggunakan alamat IP internal. Untuk melakukan penyiapan ini, Anda perlu melakukan langkah-langkah berikut:

  1. Anda membuat perimeter layanan sp1 di sekitar Project1 dan perimeter layanan lainnya sp2 di sekitar Project2.

  2. Kemudian, Anda dapat menambahkan aturan masuk dan keluar ke perimeter layanan untuk hanya mengizinkan akses subnet VM1 ke bucket Cloud Storage.

Diagram berikut menunjukkan penyiapan yang dijelaskan dalam contoh ini.

Mengonfigurasi kebijakan akses di tingkat organisasi

  1. Pastikan Anda memiliki kebijakan akses di tingkat organisasi. Jika Anda tidak memiliki kebijakan akses di tingkat ini, jalankan perintah gcloud CLI berikut:

    gcloud access-context-manager policies create \
        --organization=ORGANIZATION_ID --title=POLICY_TITLE
    

    Ganti kode berikut:

    • ORGANIZATION_ID: ID numerik organisasi Anda.

    • POLICY_TITLE: Judul yang dapat dibaca manusia untuk kebijakan akses Anda.

    Untuk mengetahui informasi selengkapnya, lihat Membuat kebijakan akses tingkat organisasi.

  2. Dapatkan nama kebijakan akses Anda.

  3. Untuk menetapkan kebijakan ini sebagai kebijakan akses default, jalankan perintah gcloud CLI berikut:

    gcloud config set access_context_manager/policy POLICY_NAME
    

    Ganti POLICY_NAME dengan nama numerik kebijakan akses Anda.

    Untuk informasi selengkapnya, lihat Menetapkan kebijakan akses default untuk alat command line gcloud.

Membuat perimeter untuk melindungi project host jaringan dan project Cloud Storage

  1. Untuk membuat perimeter sp1 di sekitar Project1, jalankan perintah gcloud CLI berikut:

    gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Ganti kode berikut:

    • PROJECT_NUMBER: Nomor project project host jaringan. Contoh, projects/111.

    • POLICY_NAME: Nama numerik kebijakan akses Anda. Contoh, 1234567890.

  2. Untuk membuat perimeter sp2 di sekitar Project2 yang membatasi layanan Cloud Storage, jalankan perintah gcloud CLI berikut:

    gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Ganti kode berikut:

    • PROJECT_NUMBER: Nomor project untuk project Cloud Storage. Contoh, projects/222.

    • POLICY_NAME: Nama numerik kebijakan akses Anda. Contoh, 1234567890.

Untuk mengetahui informasi selengkapnya tentang pembuatan perimeter layanan, lihat Membuat perimeter layanan.

Setelah Anda membuat dua perimeter ini, bucket Cloud Storage tidak lagi dapat diakses dari dua VM.

Membuat tingkat akses dengan kondisi akses berbasis alamat IP internal

Buat tingkat akses yang hanya mengizinkan traffic yang berasal dari subnet VM1.

  1. Buat file YAML yang menentukan kondisi akses Anda. Contoh berikut hanya menampilkan atribut yang Anda perlukan untuk mengaktifkan alamat IP internal:

    echo """
    - vpcNetworkSources:
      - vpcSubnetwork:
          network: VPC_NETWORK_NAME
          vpcIpSubnetworks:
          - IP_RANGE
    
    """ > level.yaml
    

    Ganti kode berikut:

    • VPC_NETWORK_NAME: Nama jaringan VPC tempat VM1 berada. Contohnya, //compute.googleapis.com/projects/Project1/global/networks/default.

    • IP_RANGE: Rentang alamat IP subnet. Contoh, 10.10.0.0/24.

    Gunakan nama jaringan VPC dan format rentang alamat IP yang dijelaskan sebelumnya.

    Untuk informasi selengkapnya tentang file YAML, lihat file YAML basic-level-spec.

  2. Untuk membuat tingkat akses menggunakan file YAML, jalankan perintah gcloud CLI berikut:

    gcloud access-context-manager levels create LEVEL_NAME \
        --title="TITLE" --basic-level-spec=FILE_NAME
    

    Ganti kode berikut:

    • LEVEL_NAME: Nama unik untuk tingkat akses. Contoh, allowvm1.

    • TITLE: Judul singkat yang dapat dibaca manusia untuk tingkat akses. Contoh, allowvm1.

    • FILE_NAME: File YAML yang menentukan kondisi akses Anda untuk tingkat akses. Contoh, level.yaml.

    Untuk mengetahui informasi selengkapnya, lihat Membuat tingkat akses dasar.

Mengonfigurasi kebijakan ingress untuk mengizinkan traffic API masuk ke bucket Cloud Storage

Untuk hanya mengizinkan akses dari VM1, konfigurasikan kebijakan masuk di perimeter sp2 untuk mengizinkan traffic Cloud Storage API memasuki perimeter.

  1. Buat file YAML yang menentukan kebijakan ingress Anda.

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    

    Ganti kode berikut:

    • POLICY_NAME: Nama numerik kebijakan akses Anda. Contoh, 1234567890.

    • ACCESS_LEVEL_NAME: Nama tingkat akses Anda. Contoh, allowvm1.

    Untuk informasi selengkapnya tentang file YAML, lihat Referensi aturan traffic masuk.

  2. Untuk memperbarui kebijakan traffic masuk untuk perimeter layanan, jalankan perintah gcloud CLI berikut:

    gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
    

    Ganti kode berikut:

    • PERIMETER: Nama perimeter layanan Anda yang melindungi project Cloud Storage. Contoh, sp2.

    • FILE_NAME: File YAML yang menentukan kebijakan traffic masuk Anda. Contoh, ingress.yaml.

    Untuk informasi selengkapnya, lihat Memperbarui kebijakan traffic masuk dan keluar untuk perimeter layanan.

Mengonfigurasi kebijakan keluar untuk mengizinkan traffic API keluar ke bucket Cloud Storage

Selain itu, konfigurasikan kebijakan keluar di perimeter sp1 untuk mengizinkan traffic Cloud Storage API keluar dari perimeter.

  1. Buat file YAML yang menentukan kebijakan traffic keluar Anda. Pastikan Anda menetapkan kolom sourceRestriction sebagai SOURCE_RESTRICTION_ENABLED dalam file YAML.

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
        sourceRestriction: SOURCE_RESTRICTION_ENABLED
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > egress.yaml
    

    Ganti kode berikut:

    • POLICY_NAME: Nama numerik kebijakan akses Anda. Contoh, 1234567890.

    • ACCESS_LEVEL_NAME: Nama tingkat akses Anda. Contoh, allowvm1.

    Untuk informasi selengkapnya tentang file YAML, lihat Referensi aturan traffic keluar.

  2. Untuk memperbarui kebijakan traffic keluar untuk perimeter layanan, jalankan perintah berikut:

    gcloud access-context-manager perimeters update PERIMETER --set-egress-policies=FILE_NAME
    

    Ganti kode berikut:

    • PERIMETER: Nama perimeter layanan Anda yang melindungi project host jaringan. Contoh, sp1.

    • FILE_NAME: File YAML yang menentukan kebijakan keluar Anda. Contoh, egress.yaml.

    Untuk informasi selengkapnya, lihat Memperbarui kebijakan traffic masuk dan keluar untuk perimeter layanan.

Setelah Anda mengonfigurasi kebijakan masuk dan keluar, bucket Cloud Storage dapat diakses dari VM1, sedangkan bucket Cloud Storage tidak dapat diakses dari VM2.

Rekomendasi

  • Saat mengaktifkan alamat IP internal, sebaiknya nonaktifkan penerusan IP untuk VM Anda. Penerusan IP memungkinkan VM dalam jaringan VPC yang sama mengirim permintaan menggunakan alamat IP yang berbeda, sehingga menimbulkan risiko spoofing alamat IP.

  • Jika Anda ingin mengaktifkan penerusan IP, sebaiknya gunakan konfigurasi berikut untuk mengurangi risiko spoofing alamat IP:

    • Gunakan batasan kebijakan organisasi Restrict VM IP Forwarding (constraints/compute.vmCanIpForward) untuk memastikan hanya VM yang diotorisasi yang dapat mengaktifkan penerusan IP.

    • Gunakan sumber untuk aturan firewall untuk membatasi alamat IP yang dapat berkomunikasi dengan VM yang mengaktifkan penerusan IP. Selesaikan tugas berikut:

      • Siapkan aturan firewall masuk untuk mengizinkan traffic masuk hanya dari rentang alamat IP tertentu ke VM yang mengaktifkan penerusan IP.

      • Siapkan aturan firewall keluar untuk mengizinkan traffic keluar hanya ke rentang alamat IP tertentu dari VM yang mengaktifkan penerusan IP.