Fehlerbehebung bei Cloud Run mit SSH

Mit SSH können Sie eine sichere, interaktive Shell-Verbindung zu Ihren laufenden Containerinstanzen herstellen. Dadurch erhalten Sie direkten Zugriff auf das Dateisystem und die Laufzeitumgebung des Containers, sodass Sie Systemressourcen prüfen, Konfigurationen überprüfen und Fehler beheben können.

Bei SSH für Cloud Run werden die erforderlichen sshd-Binärdateien automatisch dem Dateisystem Ihres Containers hinzugefügt. Diese Binärdateien sind nur für die Dauer der SSH-Sitzung verfügbar und werden nach Beendigung der Sitzung entfernt. Vorhandene SSH-Konfigurationen, einschließlich /etc/passwd-Einträge, werden von Cloud Run SSH zugunsten von von Google verwalteten Konfigurationen ignoriert.

Urheberrechtshinweise von Drittanbietern für Open-Source-Software für von Google verwaltete SSH-Abhängigkeiten werden in Ihrem Container bereitgestellt, wenn eine SSH-Sitzung unter dem folgenden Pfad eingerichtet wird: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.

Beschränkungen

Für SSH gelten die folgenden Einschränkungen:

  • SSH ist nur für Dienste verfügbar, die in der Umgebung der zweiten Generation von Cloud Run und auf Cloud Run-Instanzen ausgeführt werden.
  • Bei Verwendung von SSH werden Hostschlüssel im Image überschrieben. Die Schlüssel bleiben nach dem Ende der SSH-Sitzung überschrieben, bis die Dienstinstanz neu gestartet wird.
  • Windows: PuTTY wird nicht unterstützt. OpenSSH-Client verwenden
  • Wenn Sie SSH verwenden, sollten Sie besonders darauf achten, Ihren Container zu schützen. Berücksichtigen Sie Best Practices für die Sicherheit, z. B. das Ausführen von Anwendungscode als Nutzer ohne Rootberechtigung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  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. Aktivieren Sie die Cloud Run Admin API, die Cloud Resource Manager API, die Identity-Aware Proxy API und die Cloud OS Login APIs:
      gcloud services enable run.googleapis.com \
          iap.googleapis.com \
          oslogin.googleapis.com
      
  7. Installieren und initialisieren Sie die gcloud CLI.
  8. Aktualisieren Sie die Komponenten:
    gcloud components update
  9. Windows:Prüfen Sie, ob der OpenSSH-Client installiert ist.

    Der OpenSSH-Client ist in Windows 10 und höher in der Regel standardmäßig installiert. Wenn sie nicht installiert ist, können Sie sie installieren, indem Sie den folgenden Befehl in PowerShell als Administrator ausführen:

    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

    Weitere Informationen finden Sie unter OpenSSH installieren.

  10. Preise für Cloud Run Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Für SSH werden Gebühren für ausgehende Netzwerk-Byte berechnet.
  11. Wenn in Ihrem Projekt VPC Service Controls (VPC-SC) verwendet werden, wird beim Tunneling-Prozess iaptunnel.googleapis.com als Dienstname geprüft und nicht run.googleapis.com.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Schritte benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Wenn Sie kein Mitglied der Organisation sind, zu der das Projekt gehört, blockiert Cloud Run den SSH-Zugriff. Um SSH-Zugriff zu erhalten, fügen Sie die Rolle roles/compute.osLoginExternalUser oder eine benutzerdefinierte Rolle mit der Berechtigung compute.oslogin.updateExternalUser hinzu.

Sie können die Rolle „Nutzer IAP-gesicherter Tunnel“ auf Projektebene gewähren. Wenn Sie diese Rolle auf einen bestimmten Cloud Run-Dienst oder eine bestimmte Cloud Run-Instanz beschränken möchten, führen Sie den folgenden Befehl aus:

Für einen bestimmten Dienst

gcloud beta iap tcp add-iam-policy-binding \
    --resource-type=cloud-run \
    --service=SERVICE \
    --region=REGION \
    --member=MEMBER \
    --role=roles/iap.tunnelResourceAccessor

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dienstes.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • MEMBER: die Identität, für die Zugriff gewährt werden soll.

Für eine bestimmte Instanz

gcloud beta iap tcp add-iam-policy-binding \
    --resource-type=cloud-run \
    --instance=INSTANCE \
    --region=REGION \
    --member=MEMBER \
    --role=roles/iap.tunnelResourceAccessor

Ersetzen Sie Folgendes:

  • INSTANCE: Der Name der Instanz.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • MEMBER: die Identität, für die Zugriff gewährt werden soll.

Informationen zum Zuweisen der roles/iap.tunnelResourceAccessor auf Projekt- und Regionsebene finden Sie unter IAP-Zugriffsrichtlinien konfigurieren.

SSH mit Cloud Run-Diensten verwenden

SSH-Zugriff auf Dienstebene konfigurieren und über SSH eine Verbindung zum Dienst herstellen

SSH-Zugriff auf Dienstebene konfigurieren

Sie können den Prüfzugriff für einen bestimmten Dienst mit der gcloud CLI oder YAML zulassen:

gcloud

Verwenden Sie den folgenden Befehl, um den Zugriff auf einen vorhandenen Dienst zu aktivieren:

gcloud beta run services update SERVICE --ssh

Sie können den Prüfzugriff auf einen Dienst auch mit dem Flag --ssh beim Bereitstellen des Dienstes zulassen.

YAML

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Das folgende Beispiel enthält die YAML-Konfiguration:

    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
    

    Ersetzen Sie Folgendes:

    • SERVICE: der Name Ihres Cloud Run-Dienstes.
    • REGION: die Google Cloud Region, z. B. us-central1.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

    Standardmäßig wird mit dem Befehl gcloud run services replace die Datei service.yaml verwendet, sofern sie vorhanden ist.

Sie können den SSH-Zugriff für jeden Dienst einzeln über die gcloud CLI oder YAML deaktivieren:

gcloud

Verwenden Sie den folgenden Befehl, um den Zugriff auf den Dienst zu deaktivieren:

gcloud beta run services update SERVICE --no-ssh

YAML

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Das folgende Beispiel enthält die YAML-Konfiguration:

    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
    

    Ersetzen Sie Folgendes:

    • SERVICE: der Name Ihres Cloud Run-Dienstes.
    • REGION: die Google Cloud Region, z. B. us-central1.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

    Standardmäßig wird mit dem Befehl gcloud run services replace die Datei service.yaml verwendet, sofern sie vorhanden ist.

Über SSH eine Verbindung zum Dienst herstellen

So stellen Sie über die gcloud CLI eine Verbindung zu einem Dienst über SSH her:

Verwenden Sie den folgenden Google Cloud CLI-Befehl, um über SSH eine Verbindung zu einem Dienst herzustellen:

  gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dienstes.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.

    Wenn Sie aufgefordert werden, eine Passphrase für den SSH-Schlüssel einzugeben, können Sie das Feld leer lassen. Wenn Sie eine Passphrase eingeben, müssen Sie für alle nachfolgenden SSH-Sitzungen aus demselben Arbeitsbereich dieselbe Passphrase verwenden.

    Wenn die SSH-Sitzung erfolgreich abgeschlossen wurde, wird in Cloud Run die folgende Meldung angezeigt:

    Project: my-project
    Region: REGION
    Service: busybox
    Revision: busybox-REVISION
    Instance:
    INSTANCE-ID
    Container: busybox-1
    Image: IMAGE
    

    Geben Sie exit ein, um die SSH-Sitzung zu beenden. Alle Änderungen, die Sie am Container vorgenommen haben, bleiben so lange erhalten, wie der Container aktiv ist. Wenn Sie die Sitzung beenden, wird der Container nicht neu gestartet oder beendet.

Dienstinstanz angeben

Wenn Sie über SSH eine Verbindung zu einer bestimmten Dienstinstanz herstellen möchten, verwenden Sie die Google Cloud CLI.

Verwenden Sie den folgenden Google Cloud CLI-Befehl, um eine SSH-Verbindung zu einer Cloud Run-Dienstinstanz herzustellen:

  gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dienstes.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.
  • INSTANCE_ID: Instanz-ID. Die Dienstinstanz-ID finden Sie im Bereich Beobachtbarkeit auf der Seite Logs. Die Instanz-ID befindet sich im Feld labels eines Logeintrags. Sie können die Instanz-ID nicht finden, wenn Sie die entsprechende Instanz beenden, bevor Sie eine Verbindung zu ihr herstellen.

Version angeben

Wenn Sie über SSH eine Verbindung zu einer bestimmten Revision herstellen möchten, verwenden Sie die Google Cloud CLI.

Verwenden Sie den folgenden Google Cloud CLI-Befehl, um eine SSH-Verbindung zu einer Cloud Run-Dienstrevision herzustellen:

  gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dienstes.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.
  • REVISION: der Name der Überarbeitung.

SSH mit Cloud Run-Instanzen verwenden

Konfigurieren Sie den SSH-Zugriff auf Instanzebene und stellen Sie mit SSH eine Verbindung zur Instanz her.

SSH-Zugriff auf Instanzebene konfigurieren

SSH ist für Instanzen standardmäßig aktiviert.

Sie können den SSH-Zugriff für einzelne Instanzen mit der gcloud CLI oder YAML deaktivieren:

gcloud

Verwenden Sie den folgenden Befehl, um den Zugriff auf die Instanz zu deaktivieren:

gcloud beta run instances update INSTANCE --no-ssh

YAML

  1. Wenn Sie eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Das folgende Beispiel enthält die YAML-Konfiguration:

    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
    

    Ersetzen Sie Folgendes:

    • INSTANCE: der Name Ihrer Cloud Run-Instanz.
    • REGION: die Google Cloud Region, z. B. us-central1.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest
  3. Erstellen oder aktualisieren Sie die Instanz mit dem folgenden Befehl:

    gcloud beta run instances replace instance.yaml

Sie können den Prüfzugriff für eine bestimmte Instanz mit der gcloud CLI oder YAML zulassen.

gcloud

Verwenden Sie den folgenden Befehl, um den Zugriff auf eine vorhandene Instanz zu aktivieren:

gcloud beta run instances update INSTANCE --ssh

Sie können den Prüfzugriff auf eine Instanz auch mit dem Flag --ssh beim Bereitstellen der Instanz zulassen.

YAML

  1. Wenn Sie eine neue Instanz erstellen, überspringen Sie diesen Schritt. Wenn Sie eine vorhandene Instanz aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Das folgende Beispiel enthält die YAML-Konfiguration:

    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
    

    Ersetzen Sie Folgendes:

    • INSTANCE: der Name Ihrer Cloud Run-Instanz.
    • REGION: die Google Cloud Region, z. B. us-central1.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest
  3. Erstellen oder aktualisieren Sie die Instanz mit dem folgenden Befehl:

    gcloud beta run instances replace instance.yaml

SSH-Verbindung zur Instanz herstellen

Verwenden Sie den folgenden Google Cloud CLI-Befehl, um eine Verbindung zu einer Instanz über SSH herzustellen:

  gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • INSTANCE: Der Name der Instanz.
  • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.

Wenn Sie aufgefordert werden, eine Passphrase für den SSH-Schlüssel einzugeben, können Sie das Feld leer lassen. Wenn Sie jedoch eine Passphrase eingeben, müssen Sie dieselbe Passphrase für alle nachfolgenden SSH-Sitzungen aus demselben Arbeitsbereich verwenden.

Wenn die SSH-Sitzung erfolgreich abgeschlossen wurde, wird in Cloud Run die folgende Meldung angezeigt:

  Project: my-project
  Region: REGION
  Instance: INSTANCE
  Revision: REVISION
  Container: CONTAINER
  Image: IMAGE

Geben Sie exit ein, um die SSH-Sitzung zu beenden.

Mit dem OpenSSH-Client eine Verbindung herstellen

So stellen Sie mit Ihrem OpenSSH-Client eine Verbindung her:

  1. Führen Sie den Befehl gcloud beta run services ssh für den Zieldienst aus.
  2. Starten Sie den SSH-Tunnel und generieren Sie das Zertifikat.
  3. Fügen Sie Ihrer SSH-Konfiguration Folgendes hinzu:

    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
    

    Ersetzen Sie Folgendes:

    • USER: Der Nutzername auf Ihrem lokalen Computer.
    • PROJECT_ID: die Google Cloud Projekt-ID.
    • PROJECT_NUMBER: die Google Cloud Projektnummer.
    • REGION: die Region, in der Ihr Dienst bereitgestellt wird.
    • SERVICE: der Name Ihres Dienstes.

    Wenn die gcloud CLI in einem anderen Ordner installiert ist, müssen Sie den Speicherort in der letzten Zeile möglicherweise aktualisieren.

  4. Führen Sie dazu diesen Befehl aus:

    ssh cloud-run-ssh
    

Ihr SSH-Zertifikat läuft nach fünf Minuten ab. Wenn Sie nach fünf Minuten versuchen, eine SSH-Verbindung zu Ihrem Dienst herzustellen, müssen Sie gcloud beta run services ssh noch einmal ausführen, um das Zertifikat neu zu generieren.

SSH-Zugriffsprotokolle

Wenn Sie Audit-Logs für die SSH-Schlüsselverwaltung erfassen möchten, müssen Sie Audit-Logs für die Cloud OS Login API aktivieren. Weitere Informationen finden Sie unter OS Login-Audit-Logs aufrufen. Wenn Sie auf SSH-Logs von Cloud Run-Ressourcen zugreifen möchten, benötigen Sie Zugriff auf Cloud-Audit-Logs für das entsprechende Projekt.

Im folgenden Beispiel werden alle Cloud Run-Dienste für den letzten Tag abgefragt:

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)"

SSH-Zugriff sichern und steuern

Sie können festlegen, wer SSH verwenden darf und wie die Verwendung in Ihrer Umgebung eingeschränkt wird.

SSH-Zugriff mit Organisationsrichtlinien deaktivieren

Wenn Sie eine Organisationsrichtlinie zum Deaktivieren von SSH festlegen möchten, verwenden Sie die benutzerdefinierte Einschränkung, die die Aktivierung des SSH-Debuggingzugriffs für Cloud Run-Dienste einschränkt.

Nächste Schritte