Menggunakan SSH untuk Cloud Run

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

  1. 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.
  2. Untuk memastikan Anda menggunakan Google Cloud CLI versi terbaru, jalankan perintah berikut:

    gcloud components update
    
  3. Aktifkan 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:

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 pengguna
  • PROJECT_NUMBER: nomor Google Cloud project
  • LOCATION: 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 pengguna
  • SERVICE_NAME: nama logika layanan yang akan dihubungkan
  • LOCATION: 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 pengguna
  • PROJECT_NUMBER: nomor Google Cloud project
  • LOCATION: Google Cloud region
  • SERVICE_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 dihubungkan
  • LOCATION: Google Cloud region tempat layanan berada
  • PROJECT_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:

  1. Untuk memulai tunnel SSH dan membuat sertifikat yang diperlukan, jalankan perintah berikut:

    gcloud beta run services ssh SERVICE_NAME \
        --region=LOCATION \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • SERVICE_NAME: nama layanan
    • LOCATION: Google Cloud region
    • PROJECT_ID: Google Cloud project ID Anda
  2. Tambahkan kode konfigurasi berikut ke file ~/.ssh/config lokal 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=LOCATION
    

    Jika jalur penginstalan gcloud Anda berbeda, perbarui awalan di jalur ProxyCommand.

    Ganti kode berikut:

    • PROJECT_ID: Project ID Google Cloud Anda
    • LOCATION: Google Cloud region
    • SERVICE_NAME: nama layanan
    • PROJECT_NUMBER: nomor Google Cloud project Anda
  3. Hubungkan ke layanan menggunakan OpenSSH:

    ssh cloud-run-ssh