Memecahkan masalah Cloud Run dengan SSH

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 secara otomatis menambahkan biner sshd yang diperlukan 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.

Batasan

Batasan berikut berlaku untuk SSH:

  • 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

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Aktifkan Cloud Run Admin API, Cloud Resource Manager API, Identity-Aware Proxy API, dan Cloud OS Login API:
      gcloud services enable run.googleapis.com \
          iap.googleapis.com \
          oslogin.googleapis.com
      
  7. Instal dan lakukan inisialisasi gcloud CLI.
  8. Perbarui komponen:
    gcloud components update
  9. 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.

  10. Tinjau halaman harga Cloud Run. Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. SSH menagih byte traffic keluar jaringan.
  11. Jika project Anda menggunakan Kontrol Layanan VPC (VPC-SC), perhatikan bahwa proses tunneling memeriksa iaptunnel.googleapis.com sebagai nama layanan, bukan run.googleapis.com.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan langkah-langkah ini, minta administrator untuk memberi Anda peran IAM berikut:

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

  1. 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
  2. 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_URL
    

    Ganti 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 format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

    Perintah gcloud run services replace secara default menggunakan file service.yaml jika 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

  1. 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
  2. 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_URL
    

    Ganti 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 format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

    Perintah gcloud run services replace secara default menggunakan file service.yaml jika 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 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: my-project
    Region: REGION
    Service: busybox
    Revision: busybox-REVISION
    Instance:
    INSTANCE-ID
    Container: busybox-1
    Image: IMAGE
    

    Untuk 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 ID
  • INSTANCE_ID: ID instance. Untuk menemukan ID instance layanan, buka halaman Logs di bagian Observability. ID instance terletak di kolom labels untuk 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 ID
  • REVISION: 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

  1. 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
  2. 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_URL
    

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • REGION: Google Cloud region—misalnya, us-central1.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
  3. 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

  1. 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
  2. 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_URL
    

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • REGION: Google Cloud region—misalnya, us-central1.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
  3. 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: my-project
  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:

  1. Jalankan perintah gcloud beta run services ssh di layanan target.
  2. Mulai tunnel SSH dan buat sertifikat.
  3. 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 alpha run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE --region=REGION
    

    Ganti kode berikut:

    • USER: nama pengguna di mesin lokal Anda.
    • PROJECT_ID: Google Cloud Project ID
    • PROJECT_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.

  4. 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