Menggunakan IAP untuk penerusan TCP

Halaman ini menjelaskan cara menggunakan penerusan TCP Identity-Aware Proxy (IAP) untuk mengaktifkan akses administratif ke instance VM yang tidak memiliki alamat IP eksternal atau tidak mengizinkan akses langsung melalui internet.

Penerusan TCP IAP memungkinkan Anda membuat tunnel terenkripsi yang dapat digunakan untuk meneruskan SSH, RDP, dan traffic lainnya ke instance VM. Penerusan TCP IAP juga memberi Anda kontrol terperinci atas pengguna mana yang diizinkan untuk membuat tunnel dan instance VM mana yang diizinkan untuk dihubungkan oleh pengguna.

Untuk mempelajari lebih lanjut cara kerja penerusan TCP IAP, lihat ringkasan penerusan TCP.

Menyiapkan project Anda untuk penerusan TCP IAP

Bagian ini akan memandu Anda melalui langkah-langkah yang diperlukan untuk mengaktifkan penerusan TCP IAP di project Google Cloud Anda.

Membuat aturan firewall

Untuk mengizinkan IAP terhubung ke instance VM Anda, buat aturan firewall yang:

  • berlaku untuk semua instance VM yang ingin Anda buat dapat diakses oleh menggunakan IAP.
  • mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan TCP.

    Untuk VM IPv6, gunakan rentang IP berikut: 2600:2d00:1:7::/64.

  • mengizinkan koneksi ke semua port yang ingin Anda akses menggunakan penerusan TCP IAP, misalnya, port 22 untuk SSH dan port 3389 untuk RDP.

Konsol

Untuk mengizinkan akses RDP dan SSH ke semua instance VM di jaringan Anda, lakukan hal berikut:

  1. Buka halaman Aturan Firewall.

    Buka halaman Aturan Firewall

    Langkah-langkah selanjutnya akan muncul di Google Cloud konsol.

  2. Pilih project Google Cloud .
  3. Di halaman Firewall Rules, klik Create firewall rule.
  4. Konfigurasikan setelan berikut:
    • Nama: allow-ingress-from-iap
    • Direction of traffic: Ingress
    • Target: Semua instance dalam jaringan
    • Filter sumber: Rentang IP
    • Rentang IP sumber: 35.235.240.0/20
    • Protocols and ports: Pilih TCP, lalu masukkan 3389,22 untuk mengizinkan RDP dan SSH.
  5. Klik Buat.

gcloud

Untuk mengizinkan akses RDP ke semua instance VM di jaringan Anda, jalankan:

gcloud compute firewall-rules create allow-rdp-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:3389 \
  --source-ranges=35.235.240.0/20

Untuk akses SSH, jalankan:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Untuk protokol lainnya, jalankan

gcloud compute firewall-rules create allow-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:PORT \
  --source-ranges=35.235.240.0/20

dengan PORT adalah port yang digunakan oleh protokol.

Memberikan peran untuk penerusan TCP IAP

Untuk mengontrol pengguna dan grup mana yang diizinkan menggunakan penerusan TCP IAP dan instance VM mana yang diizinkan untuk dihubungkan, berikan peran Identity and Access Management (IAM) yang sesuai di project.

Jika Anda menggunakan Login OS (direkomendasikan), lihat Mengonfigurasi peran Login OS di akun pengguna.

Tabel berikut menunjukkan peran standar yang perlu Anda berikan kepada administrator tepercaya untuk penerusan TCP dan tugas terkait:

Tugas Peran Informasi selengkapnya
Penerusan TCP IAP-secured Tunnel User (roles/iap.tunnelResourceAccessor) Lihat Memberikan akses ke semua instance VM dalam project atau Memberikan akses ke VM tertentu.
Akses SSH Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)
Menggunakan akun layanan (roles/iam.serviceAccountUser) Pengguna Akun Layanan Lihat Peran serviceAccountUser.

Jika Anda ingin membuat peran khusus hanya dengan izin tertentu yang diperlukan untuk tugas ini, lihat Detail izin.

Anda dapat memberi pengguna atau grup akses ke semua instance VM dalam project, atau ke VM tertentu, bergantung pada cara Anda memberikan peran yang diperlukan.

Tag tidak didukung

Pemberian izin menggunakan tag untuk penerusan TCP IAP saat ini tidak didukung.

Memberikan akses ke semua instance VM dalam project

Anda dapat memberi pengguna atau grup akses ke semua instance VM dalam project dengan memberikan peran IAM yang diperlukan di tingkat project:

Konsol

  1. Buka halaman IAM & Admin di Google Cloud console.

    Buka halaman IAM & Admin

    Langkah-langkah selanjutnya akan muncul di Google Cloud konsol.

  2. Di halaman IAM & Admin, klik Tambahkan dan konfigurasi setelan berikut:
    • Akun utama baru: Tentukan pengguna atau grup yang ingin Anda beri akses.
    • Select a role: Pilih Cloud IAP > IAP-Secured Tunnel User.
  3. Secara opsional, klik Tambahkan kondisi, lalu konfigurasi kondisi:
    • Judul: Masukkan nama untuk kondisi.
    • Ekspresi: Masukkan kondisi yang harus dipenuhi pengguna untuk mendapatkan izin dalam peran IAP-Secured Tunnel User.

    Misalnya, ekspresi CEL berikut memberikan akses hanya ke port 22:

    destination.port == 22

    Anda juga dapat memberikan akses berdasarkan tingkat akses:

    destination.port == 22 &&
    "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels

    Dengan FULL_ACCESS_LEVEL_NAME adalah tingkat akses yang ada dan menggunakan format berikut:

    accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME

  4. Klik Tambahkan peran lain dan konfigurasi setelan berikut:
    • Pilih peran Pilih Compute Engine > Compute Instance Admin (v1).
  5. Klik Simpan.

gcloud

Berikan kedua peran kepada pengguna dengan menjalankan perintah berikut:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:EMAIL \
    --role=roles/iap.tunnelResourceAccessor
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:EMAIL \
    --role=roles/compute.instanceAdmin.v1

Ganti kode berikut:

  • PROJECT_ID: ID project
  • EMAIL: alamat email pengguna yang ingin Anda beri akses, misalnya user@example.com.

Memberikan akses ke VM tertentu

Untuk memberi pengguna atau grup akses ke VM tertentu, Anda harus memberikan peran roles/iap.tunnelResourceAccessor di VM tersebut. Peran lainnya harus diberikan di project.

Konsol

  1. Buka halaman admin IAP, lalu pilih tab SSH and TCP Resources.

    Buka halaman admin IAP

    Langkah-langkah selanjutnya akan muncul di Google Cloud konsol.

  2. Di tab SSH and TCP Resources pada halaman admin IAP, pilih instance VM yang ingin Anda konfigurasi.
  3. Klik Tampilkan panel info jika panel info tidak terlihat.
  4. Klik Tambahkan prinsipal dan konfigurasi setelan berikut:

    • Akun utama baru: Tentukan pengguna atau grup yang ingin Anda beri akses.
    • Select a role: Pilih Cloud IAP > IAP-Secured Tunnel User.
  5. Secara opsional, klik Tambahkan kondisi, lalu konfigurasi kondisi:

    • Judul: Masukkan nama untuk kondisi.
    • Ekspresi: Masukkan kondisi yang harus dipenuhi pengguna untuk mendapatkan izin dalam peran IAP-Secured Tunnel User.

    Misalnya, ekspresi CEL berikut memberikan akses hanya ke port 22:

          destination.port == 22

    Anda juga dapat memberikan akses berdasarkan tingkat akses:

        destination.port == 22 &&
        "FULL_ACCESS_LEVEL_NAME" in request.auth.access_levels

    Dengan FULL_ACCESS_LEVEL_NAME adalah tingkat akses yang ada dan menggunakan format accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME.

  6. Klik Simpan.

API

Untuk mengedit file policy.json aplikasi Anda, ikuti proses di bawah. Lihat Mengelola akses ke resource yang diamankan IAP untuk mengetahui informasi selengkapnya tentang penggunaan IAM API untuk mengelola kebijakan akses.

  1. Ekspor variabel berikut.

    export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  2. Dapatkan kebijakan IAM untuk instance Compute Engine menggunakan metode getIamPolicy. Bit data kosong di akhir mengubah curl permintaan menjadi POST, bukan GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \
         -d ''

  3. Beri peran iap.tunnelResourceAccessor kepada akun utama Anda dengan mengubah file JSON kebijakan IAM.

  4. Secara opsional, berikan peran hanya kepada prinsipal yang memenuhi kriteria tertentu, berdasarkan Kondisi IAM dan tingkat akses.

    Berikut adalah contoh file policy.json yang telah diedit yang memberikan peran iap.tunnelResourceAccessor kepada sekelompok admin instance VM, sehingga mereka dapat mengakses resource tunnel yang diamankan IAP. Kondisi IAM telah ditambahkan untuk membuat resource dapat diakses hanya oleh prinsipal dalam grup admin instance VM dengan alamat IP pribadi 10.0.0.1 di port 22 menggunakan Kondisi IAM destination.ip dan destination.port. Mereka juga harus memenuhi persyaratan ACCESS_LEVEL_NAMEtingkat akses.

    Perhatikan bahwa jika akun utama memiliki peran Pemilik, akun tersebut memiliki izin untuk menggunakan IAP untuk penerusan TCP.


    Contoh file policy.json

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.tunnelResourceAccessor",
            "members": ["group:instance-admins@example.com"],
            "condition": {
              "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }

    Untuk menemukan nama kebijakan , panggil accessPolicies.list:

    GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
    
  5. Tetapkan file policy.json baru menggunakan metode setIamPolicy.

    curl -i -H "Content-Type:application/json" \
              -H "Authorization: Bearer $(gcloud auth print-access-token)" \
              ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \
              -d @${JSON_NEW_POLICY}

Detail izin

Izin yang diperlukan bervariasi, bergantung pada cara pengguna akan menggunakan penerusan TCP IAP:

Skenario Izin diperlukan
Semua
  • iap.tunnelInstances.accessViaIAP
Menggunakan gcloud compute [start-iap-tunnel, ssh, scp]
  • compute.instances.get
  • compute.instances.list
Menggunakan gcloud compute [ssh, scp]
  • compute.projects.get
VM yang menggunakan Login OS Lihat petunjuk ini.
Tidak menggunakan Login OS
  • compute.instances.setMetadata
  • compute.projects.setCommonInstanceMetadata
  • compute.globalOperations.get
SSH ke VM menggunakan akun layanan
  • iam.serviceAccounts.actAs
SSH dari browser Lihat petunjuk ini.

Misalnya, jika pengguna ingin terhubung menggunakan gcloud compute ssh ke VM yang tidak menggunakan Login OS, tetapi menggunakan akun layanan, pengguna tersebut memerlukan izin berikut:

  • iap.tunnelInstances.accessViaIAP
  • compute.instances.get
  • compute.instances.list
  • compute.projects.get
  • compute.instances.setMetadata
  • compute.projects.setCommonInstanceMetadata
  • compute.globalOperations.get
  • iam.serviceAccounts.actAs

Melakukan tunneling koneksi SSH

Anda dapat terhubung ke instance Linux yang tidak memiliki alamat IP eksternal dengan melakukan tunnel traffic SSH melalui IAP.

Saat Anda menggunakan tunneling IAP, proxy IAP terhubung ke alamat IPv4 internal utama nic0 di VM.

Konsol

Untuk terhubung ke instance, gunakan tombol SSH di konsolGoogle Cloud . Konfigurasi akses instance Anda (ditentukan melalui izin IAM) harus mengizinkan tunneling TCP melalui IAP.

gcloud

Untuk terhubung ke instance Anda, gunakan perintah gcloud compute ssh. Konfigurasi akses instance Anda (ditentukan melalui izin IAM) harus mengizinkan tunneling TCP melalui IAP.

gcloud compute ssh INSTANCE_NAME

Ganti INSTANCE_NAME dengan nama instance yang akan di-SSH.

Jika instance tidak memiliki alamat IP eksternal, koneksi akan otomatis menggunakan tunneling TCP IAP. Jika instance memiliki alamat IP eksternal, koneksi akan menggunakan alamat IP eksternal, bukan tunneling TCP IAP.

Anda dapat menggunakan flag --tunnel-through-iap agar gcloud compute ssh selalu menggunakan tunneling TCP IAP.

Gunakan tanda --internal-ip agar gcloud compute ssh tidak pernah menggunakan tunneling TCP IAP dan sebagai gantinya, terhubung langsung ke IP internal VM. Tindakan ini berguna bagi klien yang terhubung ke jaringan VPC yang sama dengan VM target.

Desktop IAP

Anda dapat menggunakan IAP Desktop untuk terhubung ke instance VM menggunakan SSH dan penerusan TCP IAP.

  1. Di aplikasi, pilih File > Tambahkan project Google Cloud.

  2. Masukkan ID atau nama project Anda, lalu klik OK.

  3. Di jendela Project Explorer, klik kanan instance VM yang ingin Anda hubungkan, lalu pilih Hubungkan.

Desktop IAP

Untuk mengetahui informasi selengkapnya tentang IAP Desktop, lihat halaman project GitHub.

Aplikasi PuTTY

Anda dapat menyiapkan aplikasi emulator terminal Windows PuTTY agar menggunakan penerusan TCP IAP untuk terhubung ke instance VM. Konfigurasi akses (ditentukan melalui izin IAM) instance Anda harus mengizinkan tunneling TCP melalui IAP.

Sebelum mengonfigurasi aplikasi PuTTY, gunakan perintah gcloud compute ssh sekali untuk memastikan Anda memiliki kunci SSH pribadi di komputer lokal dan kunci SSH publik Anda dipublikasikan ke Compute Engine:

  1. Buka command prompt dan jalankan perintah berikut untuk terhubung ke instance VM:

    gcloud compute ssh INSTANCE_NAME `
      --tunnel-through-iap `
      --project PROJECT_ID `
      --zone ZONE

    Ganti kode berikut:

    • INSTANCE_NAME: nama instance yang akan dihubungkan
    • PROJECT_ID: project ID project tempat instance VM berada
    • ZONE: zona tempat instance VM berada

    Jika perlu, konfirmasi bahwa Anda ingin membuat kunci SSH dengan menekan Y.

  2. Di VM, tentukan nama pengguna Anda dengan menjalankan perintah berikut:

    whoami

    Anda akan memerlukan nama pengguna ini nanti.

Sekarang Anda dapat mengonfigurasi aplikasi PuTTY untuk menggunakan penerusan TCP IAP:

  1. Buka aplikasi PuTTY dan pilih kategori Connection > Proxy.
  2. Konfigurasi setelan proxy berikut:

    • Untuk Jenis proxy, pilih Lokal.
    • Di kolom Telnet command, or local proxy command, masukkan perintah berikut:

      gcloud.cmd compute start-iap-tunnel %host %port --listen-on-stdin --project PROJECT_ID --zone ZONE

      Ganti kode berikut:

      • PROJECT_ID: Project ID project tempat instance VM berada
      • ZONE: Zona tempat instance VM berada
    • Untuk Cetak diagnostik proxy di jendela terminal, pilih Hanya hingga sesi dimulai.

  3. Pilih kategori Connection > SSH > Auth.

  4. Klik Browse dan tempelkan nama file berikut, lalu klik Open:

    %USERPROFILE%\.ssh\google_compute_engine.ppk
  5. Pilih kategori Sesi.

  6. Konfigurasi setelan proxy berikut:

    • Di kolom Host name (or IP address), masukkan berikut ini:

      USERNAME@INSTANCE_NAME

      Ganti kode berikut:

      • USERNAME: nama pengguna Linux yang Anda tentukan sebelumnya
      • INSTANCE_NAME: nama instance VM yang ingin Anda hubungkan
    • Sesi tersimpan: Masukkan nama untuk sesi.

  7. Klik Simpan.

  8. Klik Open untuk memulai sesi SSH.

ssh

Anda dapat langsung menggunakan perintah ssh dengan opsi ProxyCommand yang menggunakan gcloud untuk memulai tunnel. Gunakan ini untuk membuat perintah ssh lengkap:

gcloud compute ssh INSTANCE_NAME --dry-run

Membuat tunnel koneksi RDP

Anda dapat terhubung ke instance Windows yang tidak memiliki alamat IP eksternal dengan melakukan tunnel pada traffic RDP melalui IAP:

Desktop IAP

Anda dapat menggunakan IAP Desktop untuk terhubung ke Desktop Jarak Jauh dari satu atau beberapa instance VM menggunakan penerusan TCP IAP.

  1. Di aplikasi, pilih File > Tambahkan project Google Cloud.

  2. Masukkan ID atau nama project Anda, lalu klik OK.

  3. Di jendela Project Explorer, klik kanan instance VM yang ingin Anda hubungkan, lalu pilih Hubungkan.

Desktop IAP

Untuk mengetahui informasi selengkapnya tentang IAP Desktop, lihat halaman project GitHub.

gcloud

Untuk terhubung ke Desktop Jarak Jauh instance VM, Anda harus membuat tunnel terlebih dahulu.

  1. Gunakan perintah gcloud compute start-iap-tunnel untuk membuat tunnel terenkripsi ke port RDP instance VM.

    gcloud compute start-iap-tunnel INSTANCE_NAME 3389 \
        --local-host-port=localhost:LOCAL_PORT \
        --zone=ZONE

    Ganti INSTANCE_NAME dengan nama instance VM yang ingin Anda hubungkan. Ganti LOCAL_PORT dengan port localhost tempat Anda ingin mengikat proxy atau gunakan 0 agar port yang tidak digunakan dipilih secara otomatis. Ganti ZONE dengan zona tempat instance VM berada.

  2. gcloud melakukan uji konektivitas dengan instance VM, lalu membuka tunnel dan menampilkan nomor port.

    Listening on port [LOCAL_PORT].

    Semua traffic yang dikirim ke localhost:LOCAL_PORT diteruskan ke instance VM. Port hanya dapat diakses oleh aplikasi yang berjalan di komputer lokal Anda.

  3. Biarkan gcloud tetap berjalan dan buka aplikasi Microsoft Windows Remote Desktop Connection.

  4. Masukkan endpoint tunnel sebagai nama komputer:

    localhost:LOCAL_PORT

    Ganti LOCAL_PORT dengan nomor port yang ditampilkan saat tunnel dibuka oleh gcloud.

  5. Klik Hubungkan.

Membuat tunnel untuk koneksi TCP lainnya

Anda dapat menggunakan penerusan TCP IAP untuk protokol berbasis TCP lainnya dengan menggunakan perintah gcloud compute start-iap-tunnel untuk mengalokasikan port lokal. Port lokal meneruskan traffic data dari komputer lokal ke komputer jarak jauh dalam aliran HTTPS. IAP kemudian menerima data, menerapkan kontrol akses, dan meneruskan data yang tidak di-wrap ke port jarak jauh. Sebaliknya, semua data dari port jarak jauh juga di-wrap sebelum dikirim ke port lokal, lalu di-unwrap.

gcloud

Buat tunnel terenkripsi ke port instance VM:

gcloud compute start-iap-tunnel INSTANCE_NAME INSTANCE_PORT \
    --local-host-port=localhost:LOCAL_PORT \
    --zone=ZONE

Ganti INSTANCE_NAME dan INSTANCE_PORT dengan nama dan port instance VM yang ingin Anda hubungkan. Ganti LOCAL_PORT dengan port localhost tempat Anda ingin proxy terikat. Ganti ZONE dengan zona tempat instance VM berada.

gcloud melakukan uji konektivitas dengan instance VM, lalu membuka tunnel dan menampilkan nomor port.

Listening on port [LOCAL_PORT].

Semua traffic yang dikirim ke localhost:LOCAL_PORT diteruskan ke instance VM. Port hanya dapat diakses oleh aplikasi yang berjalan di komputer lokal Anda.

Meningkatkan bandwidth upload TCP IAP

Untuk meningkatkan bandwidth upload TCP IAP, pertimbangkan untuk menginstal NumPy di mesin yang sama tempat gcloud CLI diinstal.

Linux

Untuk menginstal NumPy menggunakan pip di platform Unix, jalankan perintah berikut di instance terminal baru:

$(gcloud info --format="value(basic.python_location)") -m pip install numpy
Untuk mengetahui informasi selengkapnya, lihat: NumPy.org

Jika pesan error tetap muncul setelah menginstal NumPy, selesaikan langkah berikut: Jalankan perintah berikut untuk mengizinkan gcloud mengakses paket eksternal:

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Windows

Untuk menginstal NumPy menggunakan pip di platform Windows, jalankan perintah berikut di instance PowerShell baru:

start (gcloud info --format="value(basic.python_location)") "-m pip install numpy"
Untuk mengetahui informasi selengkapnya, lihat: NumPy.org

Jika pesan masih muncul setelah menginstal NumPy, langkah lain diperlukan. Jalankan perintah berikut untuk mengizinkan gcloud mengakses paket eksternal:

$env:CLOUDSDK_PYTHON_SITEPACKAGES="1"

Batasan umum

Bandwidth: Fitur penerusan TCP IAP tidak ditujukan untuk transfer data secara massal. IAP berhak membatasi kapasitas pengguna yang menyalahgunakan layanan ini.

Durasi koneksi: IAP otomatis memutuskan koneksi sesi setelah satu jam tidak aktif. Saat ini, gcloud compute start-iap-tunnel mencoba membangun kembali tunnel jika koneksi terputus.

Langkah berikutnya