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
- 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.
-
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.
-
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
- Installieren und initialisieren Sie die gcloud CLI.
- Aktualisieren Sie die Komponenten:
gcloud components update
-
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.
- 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.
-
Wenn in Ihrem Projekt VPC Service Controls (VPC-SC) verwendet werden, wird beim Tunneling-Prozess
iaptunnel.googleapis.comals Dienstname geprüft und nichtrun.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:
- Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto - Rolle Cloud Run SSH Root Access (
roles/run.sshRoot) für den Dienst - Rolle Cloud Run-Betrachter (
roles/run.viewer) für den Dienst - Nutzer IAP-gesicherter Tunnel (
roles/iap.tunnelResourceAccessor) für den Dienst - Cloud Run-Entwickler (
roles/run.developer) für den Dienst - Zugriffsberechtigter für Logbetrachtung (
roles/logging.viewAccessor) für das Projekt - Browser (
roles/browser) für das Projekt - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) für das Projekt - IAP Policy Admin (
roles/iap.admin) für das Projekt für IAP-Verwaltungsvorgänge
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
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
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_URLErsetzen 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:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
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 replacedie Dateiservice.yamlverwendet, 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
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
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_URLErsetzen 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:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
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 replacedie Dateiservice.yamlverwendet, 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:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGEGeben Sie
exitein, 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 Feldlabelseines 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
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
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_URLErsetzen 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
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
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
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_URLErsetzen 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
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:
- Führen Sie den Befehl
gcloud beta run services sshfür den Zieldienst aus. - Starten Sie den SSH-Tunnel und generieren Sie das Zertifikat.
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=REGIONErsetzen 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.
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
- Weitere Informationen zur Fehlerbehebung bei Cloud Run
- Weitere Informationen zur Fehlerbehebung bei Cloud Run-Diensten
- Bekannte Probleme in Cloud Run