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 instance container individual di lingkungan yang aman.

Sebelum memulai

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

  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: region Google Cloud
    • PROJECT_ID: Project ID Google Cloud 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: region Google Cloud
    • SERVICE_NAME: nama layanan
    • PROJECT_NUMBER: nomor project Google Cloud Anda
  3. Hubungkan ke layanan menggunakan OpenSSH:

    ssh cloud-run-ssh