SSH memungkinkan Anda membuat koneksi shell interaktif yang aman ke instance penampung yang sedang berjalan. Hal ini memberikan akses langsung ke sistem file dan lingkungan runtime container, sehingga Anda dapat memeriksa resource sistem, memverifikasi konfigurasi, dan memecahkan masalah.
SSH untuk Cloud Run menggunakan layanan berikut untuk mengamankan koneksi:
- Penerusan TCP Identity-Aware Proxy mem-proxy koneksi SSH, sehingga permintaan harus lulus pemeriksaan autentikasi dan otorisasi sebelum mencapai penampung Anda. Anda dapat memperluas kebijakan akses IAP dengan akses kontekstual untuk membatasi akses berdasarkan atribut seperti alamat IP dan perangkat pengguna akhir.
- Login OS menggunakan autentikasi sertifikat SSH untuk mengautentikasi pengguna. Saat Anda terhubung, gcloud CLI akan membuat sertifikat SSH berumur pendek untuk Anda yang akan berakhir setelah lima menit. Sertifikat divalidasi di dalam penampung Anda. Google memeriksa izin IAM untuk setiap upaya login.
SSH untuk Cloud Run secara otomatis menambahkan biner yang dikelola Google yang diperlukan, termasuk sshd dan biner yang memvalidasi sertifikat Anda, ke sistem file container Anda. Biner ini hanya dapat diakses selama durasi sesi SSH dan akan dihapus setelah sesi berakhir. Konfigurasi SSH yang ada, termasuk entri /etc/passwd, diabaikan oleh SSH Cloud Run dan digantikan dengan konfigurasi yang dikelola Google.
Pemberitahuan hak cipta open source pihak ketiga untuk dependensi SSH yang dikelola Google dipasang di dalam container Anda saat sesi SSH dibuat di jalur berikut: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.
Sesi SSH dan instance layanan
Saat Anda terhubung ke layanan menggunakan SSH, perhatikan hal berikut:
- Jika tidak ada instance layanan yang berjalan, Cloud Run akan memulai instance baru untuk sesi SSH.
- Cloud Run berupaya menjaga agar instance layanan tetap aktif selama durasi sesi SSH. Anda akan ditagih untuk instance seperti biasa saat instance aktif.
Batasan
Batasan berikut berlaku untuk SSH:
- Sesi SSH berlangsung maksimal 24 jam. Setelah 24 jam, sesi akan terputus dan Anda harus menghubungkan kembali.
- IAP akan memutuskan koneksi sesi SSH setelah satu jam tidak ada aktivitas. Untuk mengetahui informasi selengkapnya, lihat Batasan umum penerusan TCP IAP.
- SSH hanya tersedia untuk layanan yang berjalan di lingkungan generasi kedua Cloud Run dan instance Cloud Run.
- Saat menggunakan SSH, kunci host dalam image akan ditimpa. Kunci akan tetap ditimpa setelah sesi SSH berakhir, hingga instance layanan dimulai ulang.
- Windows: PuTTY tidak didukung. Gunakan klien OpenSSH.
- Anda harus lebih berhati-hati untuk mengamankan container saat menggunakan SSH. Pertimbangkan praktik terbaik keamanan seperti menjalankan kode aplikasi sebagai pengguna non-root.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Aktifkan Cloud Run Admin API, Cloud Resource Manager API, Identity-Aware Proxy API, dan Cloud OS Login API:
gcloud services enable run.googleapis.com \ cloudresourcemanager.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- Instal dan lakukan inisialisasi gcloud CLI.
-
Perbarui komponen:
gcloud components update
-
Windows: Pastikan klien OpenSSH telah diinstal.
Klien OpenSSH biasanya diinstal secara default di Windows 10 dan yang lebih baru. Jika tidak diinstal, Anda dapat menginstalnya dengan menjalankan perintah berikut di PowerShell sebagai Administrator:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Untuk mengetahui informasi selengkapnya, lihat Menginstal OpenSSH.
- Tinjau halaman harga Cloud Run. Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. SSH menagih byte traffic keluar jaringan. Anda juga akan ditagih seperti biasa untuk instance tersebut selama instance tersebut tetap aktif untuk sesi SSH.
-
Jika project Anda menggunakan
Kontrol Layanan VPC
(VPC-SC), perhatikan bahwa proses tunneling memeriksa
iaptunnel.googleapis.comsebagai nama layanan, bukanrun.googleapis.com.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan langkah-langkah ini, minta administrator untuk memberi Anda peran IAM berikut:
- 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 - Admin Kebijakan IAP (
roles/iap.admin) pada project untuk operasi pengelolaan IAP
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.
Jika Anda bukan anggota organisasi tempat project berada, Cloud Run akan memblokir akses SSH. Untuk mendapatkan akses SSH, tambahkan peran, roles/compute.osLoginExternalUser
atau dengan menggunakan peran khusus dengan izin compute.oslogin.updateExternalUser.
Anda dapat memberikan peran Pengguna Tunnel yang diamankan IAP di tingkat project. Untuk membatasi peran ini untuk layanan atau instance Cloud Run tertentu, jalankan perintah berikut:
Untuk layanan tertentu
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Ganti kode berikut:
SERVICE: nama layanan Anda.REGION: region tempat layanan Anda di-deploy.MEMBER: identitas yang akan diberi akses.
Untuk instance tertentu
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Ganti kode berikut:
INSTANCE: nama instance Anda.REGION: region tempat layanan Anda di-deploy.MEMBER: identitas yang akan diberi akses.
Untuk memberikan roles/iap.tunnelResourceAccessor di tingkat project dan region, lihat Mengonfigurasi kebijakan akses IAP.
Menggunakan SSH dengan layanan Cloud Run
Konfigurasi akses SSH tingkat layanan dan hubungkan ke layanan menggunakan SSH.
Mengonfigurasi akses SSH tingkat layanan
Anda dapat mengizinkan akses inspeksi pada layanan tertentu menggunakan gcloud CLI atau YAML:
gcloud
Untuk mengaktifkan akses pada layanan yang ada, gunakan perintah berikut:
gcloud beta run services update SERVICE --ssh
Anda juga dapat mengizinkan akses inspeksi pada layanan menggunakan flag --ssh saat
men-deploy layanan.
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Contoh berikut berisi konfigurasi YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLGanti kode berikut:
SERVICE: nama layanan Cloud Run Anda.REGION: Google Cloud region—misalnya,us-central1.IMAGE_URL: referensi ke image container, misalnya,us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Buat atau update layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Perintah
gcloud run services replacesecara default menggunakan fileservice.yamljika ada.
Anda dapat menonaktifkan akses SSH berdasarkan per layanan menggunakan gcloud CLI atau YAML:
gcloud
Untuk menonaktifkan akses pada layanan, gunakan perintah berikut:
gcloud beta run services update SERVICE --no-ssh
YAML
Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:
gcloud run services describe SERVICE --format export > service.yaml
Contoh berikut berisi konfigurasi YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLGanti kode berikut:
SERVICE: nama layanan Cloud Run Anda.REGION: Google Cloud region—misalnya,us-central1.IMAGE_URL: referensi ke image container, misalnya,us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Buat atau update layanan menggunakan perintah berikut:
gcloud run services replace service.yaml
Perintah
gcloud run services replacesecara default menggunakan fileservice.yamljika ada.
Menghubungkan ke layanan dengan SSH
Untuk terhubung ke layanan menggunakan SSH, gunakan gcloud CLI:
Untuk terhubung ke layanan menggunakan SSH, gunakan perintah Google Cloud CLI berikut:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
Ganti kode berikut:
SERVICE: nama layanan Anda.REGION: region tempat layanan Anda di-deploy.PROJECT_ID: Google Cloud Project IDJika Anda diminta memasukkan frasa sandi untuk kunci SSH, Anda dapat membiarkannya kosong. Namun, jika Anda memasukkan frasa sandi, pastikan Anda menggunakan frasa sandi yang sama untuk sesi SSH berikutnya dari ruang kerja yang sama.
Jika sesi SSH berhasil diselesaikan, Cloud Run akan menampilkan pesan berikut:
Project: PROJECT_ID Region:REGIONService: SERVICE Revision: REVISION Instance: INSTANCE_ID Container: CONTAINER Image: IMAGEUntuk mengakhiri sesi SSH, ketik
exit. Setiap perubahan yang Anda buat pada penampung akan tetap ada selama penampung tetap aktif. Keluar dari sesi tidak akan memulai ulang atau menghentikan penampung.
Menentukan instance layanan
Untuk terhubung ke instance layanan tertentu menggunakan SSH, gunakan Google Cloud CLI.
Untuk terhubung ke instance layanan Cloud Run menggunakan SSH, gunakan perintah Google Cloud CLI berikut:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
Ganti kode berikut:
SERVICE: nama layanan Anda.REGION: region tempat layanan Anda di-deploy.PROJECT_ID: Google Cloud Project IDINSTANCE_ID: ID instance. Untuk menemukan ID instance layanan, buka halaman Logs di bagian Observability. ID instance terletak di kolomlabelsuntuk entri log. Anda tidak dapat menemukan ID instance jika Anda menghentikan instance tertentu sebelum terhubung ke instance tersebut.
Menentukan revisi
Untuk terhubung ke revisi tertentu menggunakan SSH, gunakan Google Cloud CLI.
Untuk terhubung ke revisi layanan Cloud Run menggunakan SSH, gunakan perintah Google Cloud CLI berikut:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
Ganti kode berikut:
SERVICE: nama layanan Anda.REGION: region tempat layanan Anda di-deploy.PROJECT_ID: Google Cloud Project IDREVISION: nama revisi.
Menggunakan SSH dengan instance Cloud Run
Konfigurasi akses SSH tingkat instance dan hubungkan ke instance menggunakan SSH.
Mengonfigurasi akses SSH tingkat instance
SSH diaktifkan secara default untuk instance.
Anda dapat menonaktifkan akses SSH per instance menggunakan gcloud CLI atau YAML:
gcloud
Untuk menonaktifkan akses pada instance, gunakan perintah berikut:
gcloud beta run instances update INSTANCE --no-ssh
YAML
Jika Anda membuat instance baru, lewati langkah ini. Jika Anda mengupdate instance yang ada, download konfigurasi YAML-nya:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Contoh berikut berisi konfigurasi YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLGanti kode berikut:
INSTANCE: nama instance Cloud Run Anda.REGION: Google Cloud region—misalnya,us-central1.IMAGE_URL: referensi ke image container, sepertius-docker.pkg.dev/cloudrun/container/hello:latest.
Buat atau perbarui instance menggunakan perintah berikut:
gcloud beta run instances replace instance.yaml
Anda dapat mengizinkan akses inspeksi pada instance tertentu menggunakan gcloud CLI atau YAML.
gcloud
Untuk mengaktifkan akses pada instance yang sudah ada, gunakan perintah berikut:
gcloud beta run instances update INSTANCE --ssh
Anda juga dapat mengizinkan akses inspeksi pada instance menggunakan flag --ssh saat
men-deploy instance.
YAML
Jika Anda membuat instance baru, lewati langkah ini. Jika Anda mengupdate instance yang ada, download konfigurasi YAML-nya:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
Contoh berikut berisi konfigurasi YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLGanti kode berikut:
INSTANCE: nama instance Cloud Run Anda.REGION: Google Cloud region—misalnya,us-central1.IMAGE_URL: referensi ke image container, sepertius-docker.pkg.dev/cloudrun/container/hello:latest.
Buat atau perbarui instance menggunakan perintah berikut:
gcloud beta run instances replace instance.yaml
Hubungkan ke instance menggunakan SSH
Untuk terhubung ke instance menggunakan SSH, gunakan perintah Google Cloud CLI berikut:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
Ganti kode berikut:
INSTANCE: nama instance Anda.REGION: region tempat layanan Anda di-deploy.PROJECT_ID: Google Cloud Project ID
Jika Anda diminta memasukkan frasa sandi untuk kunci SSH, Anda dapat membiarkannya kosong. Namun, jika Anda memasukkan frasa sandi, pastikan Anda menggunakan frasa sandi yang sama untuk sesi SSH berikutnya dari ruang kerja yang sama.
Jika sesi SSH berhasil diselesaikan, Cloud Run akan menampilkan pesan berikut:
Project: PROJECT_ID
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
Untuk mengakhiri sesi SSH, ketik exit.
Menggunakan klien OpenSSH untuk terhubung
Untuk menggunakan klien OpenSSH Anda agar terhubung:
- Jalankan perintah
gcloud beta run services sshdi layanan target. Tindakan ini akan memulai tunnel SSH dan membuat sertifikat. Tambahkan kode berikut ke konfigurasi SSH Anda:
Host cloud-run-ssh HostName cloud-run-default User root IdentityFile /Users/USER/.ssh/google_compute_engine CertificateFile /Users/USER/.ssh/google_compute_engine_cert/PROJECT_ID_REGION_SERVICE-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 /Users/USER/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 --region=REGIONGanti kode berikut:
USER: nama pengguna di mesin lokal Anda.PROJECT_ID: Google Cloud Project IDPROJECT_NUMBER: Google Cloud nomor project.REGION: region tempat layanan Anda di-deploy.SERVICE: nama layanan Anda.
Jika gcloud CLI diinstal di folder lain, Anda mungkin perlu memperbarui lokasi di baris terakhir.
Jalankan perintah berikut:
ssh cloud-run-ssh
Masa berlaku sertifikat SSH Anda akan berakhir setelah lima menit. Jika Anda mencoba membuat koneksi SSH dengan layanan Anda setelah lima menit, Anda harus menjalankan ulang gcloud beta run services ssh untuk membuat ulang sertifikat.
Log Akses SSH
Untuk merekam log audit pengelolaan kunci SSH, Anda harus mengaktifkan log audit untuk Cloud OS Login API. Lihat Melihat log audit Login OS. Untuk mengakses log SSH resource Cloud Run, Anda harus memiliki akses ke Cloud Audit Logs untuk project tersebut.
Contoh berikut mengkueri semua layanan Cloud Run selama sehari terakhir:
gcloud logging read '
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
protoPayload.serviceName="oslogin.googleapis.com" AND
protoPayload.request.instance:"run.googleapis.com"
' --project=PROJECT_ID \
--freshness=1d \
--format="table(timestamp, protoPayload.authenticationInfo.principalSubject:label=USER, protoPayload.request.instance:label=CLOUD_RUN_SERVICE)"
Mengamankan dan mengontrol akses SSH
Anda dapat mengontrol siapa saja yang dapat menggunakan SSH dan cara pembatasannya di lingkungan Anda.
Menonaktifkan akses SSH dengan kebijakan organisasi
Untuk menyetel kebijakan organisasi guna menonaktifkan SSH, gunakan batasan kustom yang membatasi pengaktifan akses pen-debug SSH pada layanan Cloud Run.
Langkah berikutnya
- Pelajari lebih lanjut cara memecahkan masalah Cloud Run.
- Pelajari lebih lanjut cara memecahkan masalah layanan Cloud Run.
- Baca tentang masalah umum di Cloud Run.