Halaman ini menjelaskan cara menggunakan SSH untuk terhubung ke layanan Cloud Run melalui penerusan TCP Identity-Aware Proxy (IAP).
Dengan mengamankan koneksi SSH menggunakan IAP, Anda dapat men-debug instance container individual di lingkungan yang aman.
Sebelum memulai
- Pastikan layanan Cloud Run Anda berjalan di lingkungan eksekusi generasi kedua dan menyertakan alat proses debug yang Anda perlukan untuk menjalankan perintah setelah terhubung. Untuk mengetahui informasi selengkapnya, lihat lingkungan eksekusi.
Untuk memastikan Anda menggunakan Google Cloud CLI versi terbaru, jalankan perintah berikut:
gcloud components updateAktifkan Cloud Run, Cloud Resource Manager API, Cloud OS Login API, dan Identity-Aware Proxy API di project Anda.
Untuk mengaktifkan API, jalankan perintah berikut:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi kebijakan dan terhubung ke workload, minta administrator untuk memberi Anda peran IAM berikut:
-
Konfigurasi kebijakan:
- IAP Policy Admin (
roles/iap.admin) pada project - Cloud Run Admin (
roles/run.admin) di project
- IAP Policy Admin (
-
Menghubungkan ke workload:
- Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di akun layanan - Akses Root SSH Cloud Run (
roles/run.sshRoot) pada layanan - IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor) di layanan - Developer Cloud Run (
roles/run.developer) pada layanan - Logs View Accessor (
roles/logging.viewAccessor) di project - Browser (
roles/browser) di project - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) di project
- Pengguna Akun Layanan (
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Batasan
SSH untuk Cloud Run memiliki batasan berikut:
- Hanya layanan dan instance Cloud Run yang didukung.
- Untuk layanan, hanya lingkungan eksekusi generasi kedua yang didukung.
- Tugas Cloud Run tidak didukung.
- Kumpulan worker tidak didukung.
- Saat menggunakan SSH, kunci host dalam image akan ditimpa. Kunci akan tetap ditimpa setelah sesi SSH berakhir, hingga layanan dimulai ulang.
- Windows: PuTTY tidak didukung. Menggunakan klien OpenSSH.
Mengonfigurasi kebijakan otorisasi IAP
Anda dapat mengelola akses ke resource Cloud Run di level project, region, atau layanan menggunakan gcloud CLI atau REST API IAP.
Anda dapat mengonfigurasi kebijakan untuk ID Cloud Identity API berikut:
- Cloud Identity: misalnya,
user:EMAIL@example.com - Workforce Identity Federation: misalnya:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Untuk mengetahui informasi selengkapnya dan contoh jenis akun utama, lihat daftar ID utama.
Memperbarui layanan Cloud Run yang ada
Untuk mengupdate layanan agar mengaktifkan SSH, jalankan perintah berikut:
gcloud beta run services update \
SERVICE_NAME \
--region=LOCATION \
--ssh
Ganti kode berikut:
SERVICE_NAME: nama layanan Cloud Run Anda.LOCATION: region Google Cloud tempat layanan di-deploy (misalnya,us-central1).
Anda juga dapat men-deploy layanan Cloud Run dengan menambahkan --ssh ke gcloud beta run deploy.
Memberikan akses ke semua resource Cloud Run dalam sebuah project
Untuk mengelola akses bagi semua resource dalam sebuah project, terapkan binding kebijakan IAM di level project.
gcloud
Jalankan perintah berikut:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Ganti USER dengan ID utama pengguna, misalnya, user:user@example.com atau akun utama Workforce Identity Federation.
REST API
Kirim permintaan POST ke endpoint kebijakan project:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun:setIamPolicy"
Ganti kode berikut:
USER: ID utama pengguna.PROJECT_NUMBER: nomor project Google Cloud tempat resource dihosting.
Memberikan akses ke semua resource Cloud Run di lokasi tertentu
Untuk membatasi akses ke semua resource dalam region tertentu (misalnya,
us-central1), terapkan binding kebijakan di tingkat lokasi.
gcloud
Jalankan perintah berikut:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Ganti kode berikut:
USER: ID utama pengguna.LOCATION: region Google Cloud tempat resource di-deploy (misalnya,us-central1).
REST API
Kirim permintaan POST ke endpoint kebijakan lokasi:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION:setIamPolicy"
Ganti kode berikut:
USER: ID utama penggunaPROJECT_NUMBER: Google Cloud nomor projectLOCATION: region Google Cloud
Memberikan akses ke layanan Cloud Run tertentu
Untuk membatasi akses ke satu layanan bernama dalam project Anda, terapkan binding kebijakan di tingkat layanan.
gcloud
Jalankan perintah berikut:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Ganti kode berikut:
USER: ID utama penggunaSERVICE_NAME: nama logika layanan yang akan dihubungkanLOCATION: region Google Cloud tempat layanan di-deploy
REST API
Kirim permintaan POST ke endpoint kebijakan layanan:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION/services/\
SERVICE_NAME:setIamPolicy"
Ganti kode berikut:
USER: ID utama penggunaPROJECT_NUMBER: Google Cloud nomor projectLOCATION: region Google CloudSERVICE_NAME: nama layanan
Hubungkan dengan SSH
Untuk membuat tunnel SSH ke resource Cloud Run, Anda harus menggunakan gcloud CLI.
Menghubungkan ke layanan
Jalankan perintah berikut:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Ganti kode berikut:
SERVICE_NAME: nama layanan yang akan dihubungkanLOCATION: region Google Cloud tempat layanan beradaPROJECT_ID: ID project Google Cloud Anda
Keluar dari sesi
Untuk mengakhiri sesi SSH, ketik exit.
Setiap perubahan yang Anda buat pada container hanya akan bertahan selama container tetap aktif. Keluar dari sesi tidak akan otomatis menghentikan atau memulai ulang container.
Menggunakan klien OpenSSH lokal
Untuk menggunakan klien OpenSSH lokal untuk koneksi:
Untuk memulai tunnel SSH dan membuat sertifikat yang diperlukan, jalankan perintah berikut:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDGanti kode berikut:
SERVICE_NAME: nama layananLOCATION: region Google CloudPROJECT_ID: Project ID Google Cloud Anda
Tambahkan kode konfigurasi berikut ke file
~/.ssh/configlokal Anda:Host cloud-run-ssh HostName cloud-run-default User root IdentityFile ~/.ssh/google_compute_engine CertificateFile ~/.ssh/google_compute_engine_cert/PROJECT_ID_LOCATION_SERVICE_NAME-cert.pub CheckHostIP no HashKnownHosts no HostKeyAlias cloud-run-default IdentitiesOnly yes StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyUseFdpass no ProxyCommand /usr/local/bin/python3 -S ~/google-cloud-sdk/lib/gcloud.py beta run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE_NAME --region=LOCATIONJika jalur penginstalan
gcloudAnda berbeda, perbarui awalan di jalurProxyCommand.Ganti kode berikut:
PROJECT_ID: Project ID Google Cloud AndaLOCATION: region Google CloudSERVICE_NAME: nama layananPROJECT_NUMBER: nomor project Google Cloud Anda
Hubungkan ke layanan menggunakan OpenSSH:
ssh cloud-run-ssh