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 setiap instance container dalam lingkungan yang aman.
Sebelum memulai
- Pastikan layanan Cloud Run Anda berjalan di lingkungan eksekusi generasi kedua dan menyertakan alat 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:
- Admin Kebijakan IAP (
roles/iap.admin) di project - Cloud Run Admin (
roles/run.admin) di project
- Admin Kebijakan IAP (
-
Hubungkan ke beban kerja:
- Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di akun layanan - Akses Root SSH Cloud Run (
roles/run.sshRoot) di layanan - Cloud Run Viewer (
roles/run.viewer) pada layanan - IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor) di layanan - Cloud Run Developer (
roles/run.developer) di 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 pekerja 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. Gunakan klien OpenSSH.
Mengonfigurasi kebijakan otorisasi IAP
Anda dapat mengelola akses ke resource Cloud Run di tingkat project, region, atau layanan menggunakan gcloud CLI atau IAP REST API.
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 dan contoh jenis akun utama selengkapnya, 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 \
--ssh
Ganti SERVICE_NAME dengan nama layanan Cloud Run Anda Anda dapat men-deploy layanan Cloud Run
dengan menambahkan --ssh ke gcloud beta run deploy.
Memberikan akses ke semua resource Cloud Run dalam project
Untuk mengelola akses bagi semua resource dalam project, terapkan pengikatan kebijakan IAM di tingkat 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
principal 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 pengikatan 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: nomor Google Cloud projectLOCATION: Google Cloud region
Memberikan akses ke layanan Cloud Run tertentu
Untuk membatasi akses ke satu layanan bernama dalam project Anda, terapkan pengikatan 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: Google Cloud region 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: nomor Google Cloud projectLOCATION: Google Cloud regionSERVICE_NAME: nama layanan
Hubungkan dengan SSH
Untuk membuat tunnel SSH ke resource Cloud Run, Anda harus menggunakan CLI 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: Google Cloud region tempat layanan beradaPROJECT_ID: ID project Google Cloud Anda
Keluar dari sesi
Untuk mengakhiri sesi SSH, ketik exit.
Setiap modifikasi yang Anda lakukan pada penampung hanya akan dipertahankan selama penampung 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: Google Cloud regionPROJECT_ID: Google Cloud project ID 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: Google Cloud regionSERVICE_NAME: nama layananPROJECT_NUMBER: nomor Google Cloud project Anda
Hubungkan ke layanan menggunakan OpenSSH:
ssh cloud-run-ssh