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.
Dengan penerusan TCP IAP, Anda dapat membuat tunnel terenkripsi yang dapat digunakan untuk meneruskan SSH, RDP, dan traffic lainnya ke instance VM. Penerusan TCP IAP juga memberi Anda kontrol terperinci terkait pengguna yang diizinkan untuk membangun tunnel dan ke instance VM mana yang boleh terhubung dengan pengguna.
Untuk mempelajari lebih lanjut cara kerja penerusan TCP IAP, baca Ringkasan penerusan TCP.
Menyiapkan project Anda untuk penerusan TCP IAP
Bagian ini akan memandu Anda melakukan langkah-langkah yang diperlukan untuk mengaktifkan penerusan TCP IAP di project Google Cloud.
Membuat aturan firewall
Agar IAP dapat terhubung ke instance VM Anda, buat aturan firewall yang:
- berlaku untuk semua instance VM yang ingin dapat diakses menggunakan IAP.
- memungkinkan traffic masuk dari rentang IP
35.235.240.0/20
. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan TCP. - memungkinkan koneksi ke semua port yang ingin diakses dengan
menggunakan penerusan TCP IAP, misalnya, port
22
untuk SSH dan port3389
untuk RDP.
Konsol
Untuk mengizinkan akses RDP dan SSH ke semua instance VM di jaringan Anda, lakukan hal berikut:
- Buka halaman Firewall Rules.
Langkah-langkah selanjutnya akan muncul secara otomatis di Konsol Google Cloud.
- Pilih project Google Cloud.
Tampilkan . - Di halaman Firewall Rules, klik
Create firewall rule . - Konfigurasikan setelan berikut:
- Name:
allow-ingress-from-iap
- Arah traffic: Ingress
- Target: Semua instance dalam jaringan
- Filter sumber: Rentang IP
- Rentang IP sumber:
35.235.240.0/20
- Protocols and ports: Pilih TCP dan masukkan
22,3389
untuk mengizinkan RDP dan SSH.
- Name:
- Klik Create.
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 lain, 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 yang diizinkan untuk menggunakan penerusan TCP IAP dan instance VM yang boleh terhubung, berikan peran Identity and Access Management (IAM) yang sesuai pada project.
Tabel berikut menunjukkan peran bawaan 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 )
|
Baca bagian Memberikan akses ke semua instance VM dalam sebuah project atau Memberikan akses ke VM tertentu. |
Akses SSH |
Admin Instance Compute (v1) (roles/compute.instanceAdmin.v1 )
|
|
Login OS (direkomendasikan) | Beraneka ragam | Lihat Mengonfigurasi peran Login OS di akun pengguna. |
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 suatu project, atau ke VM tertentu, bergantung pada cara Anda memberikan peran yang diperlukan.
Memberikan akses ke semua instance VM dalam sebuah project
Anda dapat memberi pengguna atau grup akses ke semua instance VM dalam suatu project dengan memberikan peran IAM yang diperlukan di level project:
Konsol
- Buka halaman IAM & Admin di Konsol Google Cloud.
Langkah-langkah selanjutnya akan muncul secara otomatis di Konsol Google Cloud.
- Di halaman IAM & Admin, klik Add, lalu konfigurasikan hal berikut:
- Akun utama baru: Tentukan pengguna atau grup yang ingin Anda beri akses.
- Memilih peran: Pilih Cloud IAP > IAP-Secured Tunnel User.
- Anda juga dapat mengklik Tambahkan kondisi, lalu mengonfigurasi kondisi:
- Judul: Masukkan nama untuk ketentuan.
- 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
- Klik Tambahkan peran lain, lalu konfigurasi peran berikut:
- Pilih peran Pilih Compute Engine > Admin Instance Compute (v1).
- Klik Save.
gcloud
Berikan dua peran tersebut 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 projectEMAIL
: alamat email pengguna yang ingin diberi akses, misalnyauser@example.com
.
Memberikan akses ke VM tertentu
Untuk memberikan akses ke VM tertentu kepada pengguna atau grup, Anda perlu memberikan peran roles/iap.tunnelResourceAccessor
pada VM tersebut. Peran lain harus
diberikan pada proyek.
Konsol
- Buka halaman admin IAP dan pilih tab SSH and TCP Resources.
Buka halaman admin BeyondCorp Enterprise
Langkah-langkah selanjutnya akan muncul secara otomatis di Konsol Google Cloud.
- Pada tab SSH and TCP Resources di halaman admin IAP, pilih instance VM yang ingin dikonfigurasi.
- Klik Tampilkan panel info jika panel info tidak terlihat.
Klik Add principal dan konfigurasikan opsi berikut:
- Akun utama baru: Tentukan pengguna atau grup yang ingin Anda beri akses.
- Memilih peran: Pilih Cloud IAP > IAP-Secured Tunnel User.
Anda juga dapat mengklik Tambahkan kondisi, lalu konfigurasikan kondisi:
- Judul: Masukkan nama untuk ketentuan.
- 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 formataccessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
.- Klik Save.
API
Untuk mengedit file policy.json
aplikasi Anda, ikuti proses di bawah.
Lihat Mengelola akses ke resource yang diamankan BeyondCorp Enterprise untuk mengetahui informasi selengkapnya tentang penggunaan IAM API guna mengelola kebijakan akses.
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
Dapatkan kebijakan IAM untuk instance Compute Engine menggunakan metode
getIamPolicy
. Bit data kosong di bagian akhir mengubah permintaancurl
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 ''
Berikan peran
iap.tunnelResourceAccessor
ke akun utama Anda dengan mengubah file JSON kebijakan IAM.Secara opsional, berikan peran hanya ke akun utama yang memenuhi kriteria tertentu, berdasarkan Kondisi IAM dan tingkat akses.
Berikut adalah contoh file
policy.json
yang diedit dan memberikan peraniap.tunnelResourceAccessor
ke grup admin instance VM, sehingga memberi mereka akses ke resource tunnel yang diamankan oleh BeyondCorp Enterprise. Kondisi IAM telah ditambahkan untuk membuat resource hanya dapat diakses oleh akun utama dalam grup admin instance VM dengan alamat IP pribadi10.0.0.1
pada port22
menggunakan Kondisi IAMdestination.ip
dandestination.port
. Perangkat tersebut juga harus memenuhi persyaratan tingkat akses ACCESS_LEVEL_NAME.Perlu diperhatikan bahwa jika akun utama memiliki peran Pemilik, akun utama 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
Tetapkan file
policy.json
baru menggunakan metodesetIamPolicy
.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 berbeda-beda, bergantung pada cara pengguna menggunakan penerusan TCP IAP:
Skenario | Izin diperlukan | |
---|---|---|
Semua |
|
|
Menggunakan gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
Menggunakan gcloud compute [ssh, scp] |
|
|
VM menggunakan Login OS | Lihat petunjuk ini | |
Tidak menggunakan Login OS |
|
|
SSH ke VM menggunakan akun layanan |
|
|
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 meneruskan 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 Konsol Google Cloud. Konfigurasi akses instance Anda (ditentukan melalui izin IAM) harus mengizinkan tunneling TCP melalui IAP.
gcloud
Agar 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 tempat SSH tersambung.
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 flag --internal-ip
agar gcloud compute ssh
tidak pernah menggunakan tunneling TCP
IAP dan sebagai gantinya langsung terhubung ke IP internal VM. Cara 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 penerusan SSH dan TCP IAP.
Di aplikasi tersebut, pilih File > Add Google Cloud project.
Masukkan ID atau nama project Anda, lalu klik OK.
Di jendela Project Explorer, klik kanan instance VM yang ingin Anda hubungkan, lalu pilih Hubungkan.
Untuk mengetahui informasi selengkapnya tentang IAP Desktop, lihat halaman project GitHub.
Aplikasi PuTTY
Anda dapat menyiapkan aplikasi emulator terminal PuTTY Windows agar menggunakan penerusan TCP IAP untuk terhubung ke instance VM. Konfigurasi akses instance Anda (ditentukan melalui izin IAM) harus mengizinkan tunneling TCP melalui IAP.
Sebelum mengonfigurasi aplikasi PuTTY, gunakan perintah gcloud compute ssh
sekali untuk memastikan bahwa Anda memiliki kunci SSH pribadi di komputer lokal dan bahwa kunci SSH publik Anda dipublikasikan ke Compute Engine:
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: ID project project tempat instance VM berada
- ZONE: zona tempat instance VM berada
Jika perlu, konfirmasi bahwa Anda ingin membuat kunci SSH dengan menekan
Y
.Di VM, tentukan nama pengguna Anda dengan menjalankan perintah berikut:
whoami
Anda memerlukan nama pengguna ini nanti.
Sekarang Anda dapat mengonfigurasi aplikasi PuTTY untuk menggunakan penerusan TCP IAP:
- Buka aplikasi PuTTY dan pilih kategori Connection > Proxy.
Konfigurasikan setelan proxy berikut:
- Untuk Proxy type, pilih Local.
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 Print proxy diagnostik in the terminal window, pilih Only hingga sesi dimulai.
Pilih kategori Connection > SSH > Auth.
Klik Browse dan tempel nama file berikut, lalu klik Open:
%USERPROFILE%\.ssh\google_compute_engine.ppk
Pilih kategori Sesi.
Konfigurasikan setelan proxy berikut:
Pada kolom Host name (atau IP address), masukkan info berikut:
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.
Klik Save.
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
Melakukan tunneling koneksi RDP
Anda dapat terhubung ke instance Windows yang tidak memiliki alamat IP eksternal dengan meneruskan traffic RDP melalui IAP:
Desktop IAP
Anda dapat menggunakan Desktop IAP untuk terhubung ke Desktop Jarak Jauh satu atau beberapa instance VM menggunakan penerusan TCP IAP.
Di aplikasi tersebut, pilih File > Add Google Cloud project.
Masukkan ID atau nama project Anda, lalu klik OK.
Di jendela Project Explorer, klik kanan instance VM yang ingin Anda hubungkan, lalu pilih Hubungkan.
Untuk mengetahui informasi selengkapnya tentang IAP Desktop, lihat halaman project GitHub.
gcloud
Untuk terhubung ke Desktop Jarak Jauh instance VM, buat tunnel terlebih dahulu.
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 proxy diikat atau gunakan 0 untuk memilih proxy yang tidak digunakan secara otomatis. 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 ini hanya dapat diakses oleh aplikasi yang berjalan di komputer lokal Anda.
Biarkan
gcloud
tetap berjalan dan buka aplikasi Microsoft Windows Remote Desktop Connection.Masukkan endpoint tunnel sebagai nama komputer:
localhost:LOCAL_PORT
Ganti LOCAL_PORT dengan nomor port yang ditampilkan saat tunnel dibuka oleh
gcloud
.Klik Connect.
Melakukan tunneling 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 mesin jarak jauh dalam aliran HTTPS. IAP
kemudian menerima data, menerapkan kontrol akses, dan meneruskan data yang belum
digabungkan ke port jarak jauh. Sebaliknya, semua data dari port jarak jauh juga digabungkan sebelum dikirim ke port lokal tempat data tersebut dibuka.
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 diikat. 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 ini hanya dapat diakses oleh aplikasi yang berjalan di komputer lokal Anda.
Meningkatkan bandwidth upload TCP IAP
Untuk meningkatkan bandwidth upload TCP IAP, sebaiknya instal 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
Jika pesan error masih berlanjut 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"
Jika pesan masih berlanjut setelah menginstal NumPy, diperlukan langkah lain. 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 nilai pengguna yang menyalahgunakan layanan ini.
Durasi koneksi: IAP otomatis memutuskan sambungan sesi setelah tidak aktif selama satu jam. Saat ini, gcloud compute start-iap-tunnel
mencoba membangun kembali tunnel jika koneksinya terputus.
Langkah berikutnya
- Tetapkan aturan konteks yang lebih lengkap dengan menerapkan tingkat akses.
- Lihat permintaan akses dengan mengaktifkan Cloud Audit Logs.
- Pelajari IAP lebih lanjut.