Auf dieser Seite wird beschrieben, wie Sie SSH verwenden, um über die TCP-Weiterleitung von Identity-Aware Proxy (IAP) eine Verbindung zu Cloud Run-Diensten herzustellen.
Wenn Sie Ihre SSH-Verbindungen mit IAP sichern, können Sie einzelne Containerinstanzen in einer sicheren Umgebung debuggen.
Hinweis
- Achten Sie darauf, dass Ihr Cloud Run-Dienst in einer Ausführungsumgebung der zweiten Generation ausgeführt wird und alle Debugging-Tools enthält, die Sie zum Ausführen von Befehlen nach dem Herstellen der Verbindung benötigen. Weitere Informationen finden Sie unter Ausführungsumgebungen.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Sie die aktuelle Version der Google Cloud CLI verwenden:
gcloud components updateAktivieren Sie die Cloud Run API, die Cloud Resource Manager API, die Cloud OS Login API und die Identity-Aware Proxy API in Ihrem Projekt.
Aktivieren Sie die APIs mit folgendem Befehl:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren von Richtlinien und zum Herstellen einer Verbindung zu Arbeitslasten benötigen:
-
Richtlinien konfigurieren:
- IAP-Richtlinienadministrator (
roles/iap.admin) für das Projekt - Cloud Run-Administrator (
roles/run.admin) für das Projekt
- IAP-Richtlinienadministrator (
-
Verbindung zu Arbeitslasten herstellen:
- Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto - Cloud Run SSH Root Access (
roles/run.sshRoot) 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
- Dienstkontonutzer (
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.
Beschränkungen
Für SSH für Cloud Run gelten die folgenden Einschränkungen:
- Es werden nur Cloud Run-Dienste und -Instanzen unterstützt.
- Für Dienste wird nur die Ausführungsumgebung der zweiten Generation unterstützt.
- Cloud Run-Jobs werden nicht unterstützt.
- Worker-Pools werden nicht unterstützt.
- Wenn Sie SSH verwenden, werden Hostschlüssel im Image überschrieben. Die Schlüssel bleiben nach dem Ende der SSH-Sitzung überschrieben, bis der Dienst neu gestartet wird.
- Windows: PuTTY wird nicht unterstützt. Verwenden Sie den OpenSSH-Client.
IAP-Autorisierungsrichtlinien konfigurieren
Sie können den Zugriff auf Cloud Run-Ressourcen auf Projekt-, Regions- oder Dienstebene entweder mit der gcloud CLI oder der IAP REST API verwalten.
Sie können Richtlinien für die folgenden Cloud Identity API-IDs konfigurieren:
- Cloud Identity: z. B.
user:EMAIL@example.com - Workforce Identity-Föderation: Beispiel:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Weitere Informationen und Beispiele für Hauptkontotypen finden Sie in der Liste der Hauptkonto-IDs.
Vorhandenen Cloud Run-Dienst aktualisieren
Führen Sie den folgenden Befehl aus, um den Dienst zu aktualisieren und SSH zu aktivieren:
gcloud beta run services update \
SERVICE_NAME \
--region=LOCATION \
--ssh
Ersetzen Sie Folgendes:
SERVICE_NAME: der Name Ihres Cloud Run-Dienstes.LOCATION: die Google Cloud -Region, in der der Dienst bereitgestellt wird (z. B.us-central1).
Sie können einen Cloud Run-Dienst auch bereitstellen, indem Sie --ssh zu gcloud beta run deploy hinzufügen.
Zugriff auf alle Cloud Run-Ressourcen in einem Projekt gewähren
Wenn Sie den Zugriff für alle Ressourcen in einem Projekt verwalten möchten, wenden Sie die IAM-Richtlinienbindung auf Projektebene an.
gcloud
Führen Sie dazu diesen Befehl aus:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Ersetzen Sie USER durch die Hauptkonto-ID des Nutzers, z. B. user:user@example.com oder das Hauptkonto der Mitarbeiteridentitätsföderation.
REST API
Senden Sie eine POST-Anfrage an den Endpunkt der Projektrichtlinie:
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"
Ersetzen Sie Folgendes:
USER: die Hauptkonto-ID des Nutzers.PROJECT_NUMBER: die Projektnummer von Google Cloud, in dem die Ressourcen gehostet werden.
Zugriff auf alle Cloud Run-Ressourcen an einem bestimmten Standort gewähren
Wenn Sie den Zugriff auf alle Ressourcen in einer bestimmten Region (z. B. us-central1) einschränken möchten, wenden Sie die Richtlinienbindung auf Standortebene an.
gcloud
Führen Sie dazu diesen Befehl aus:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Ersetzen Sie Folgendes:
USER: die Hauptkonto-ID des Nutzers.LOCATION: die Google Cloud -Region, in der die Ressourcen bereitgestellt werden (z. B.us-central1).
REST API
Senden Sie eine POST-Anfrage an den Endpunkt der Standortrichtlinie:
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"
Ersetzen Sie Folgendes:
USER: die Hauptkonto-ID des NutzersPROJECT_NUMBER: die Projektnummer von Google CloudLOCATION: die Google Cloud -Region
Zugriff auf einen bestimmten Cloud Run-Dienst gewähren
Wenn Sie den Zugriff auf einen einzelnen benannten Dienst in Ihrem Projekt einschränken möchten, wenden Sie die Richtlinienbindung auf Dienstebene an.
gcloud
Führen Sie dazu diesen Befehl aus:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Ersetzen Sie Folgendes:
USER: die Hauptkonto-ID des NutzersSERVICE_NAME: der Name der Dienstlogik, zu der eine Verbindung hergestellt werden sollLOCATION: die Google Cloud -Region, in der der Dienst bereitgestellt wird
REST API
Senden Sie eine POST-Anfrage an den Endpunkt der Dienstrichtlinie:
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"
Ersetzen Sie Folgendes:
USER: die Hauptkonto-ID des NutzersPROJECT_NUMBER: die Projektnummer von Google CloudLOCATION: die Google Cloud -RegionSERVICE_NAME: der Name des Dienstes
Über SSH verbinden
Wenn Sie einen SSH-Tunnel zu einer Cloud Run-Ressource herstellen möchten, müssen Sie die gcloud CLI verwenden.
Mit einem Dienst verbinden
Führen Sie dazu diesen Befehl aus:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Ersetzen Sie Folgendes:
SERVICE_NAME: der Name des Dienstes, zu dem eine Verbindung hergestellt werden sollLOCATION: die Google Cloud -Region, in der sich der Dienst befindetPROJECT_ID: die ID Ihres Projekts in Google Cloud
Sitzung beenden
Geben Sie exit ein, um die SSH-Sitzung zu beenden.
Alle Änderungen, die Sie am Container vornehmen, bleiben nur so lange erhalten, wie der Container aktiv ist. Wenn Sie die Sitzung beenden, wird der Container nicht automatisch beendet oder neu gestartet.
Lokalen OpenSSH-Client verwenden
So verwenden Sie einen lokalen OpenSSH-Client für Verbindungen:
Führen Sie den folgenden Befehl aus, um den SSH-Tunnel zu initiieren und das erforderliche Zertifikat zu generieren:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDErsetzen Sie Folgendes:
SERVICE_NAME: der Name des DienstesLOCATION: die Google Cloud -RegionPROJECT_ID: Ihre Google Cloud Projekt-ID
Fügen Sie Ihrer lokalen
~/.ssh/config-Datei den folgenden Konfigurationscode hinzu: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=LOCATIONWenn Ihr
gcloud-Installationspfad anders ist, aktualisieren Sie das Präfix imProxyCommand-Pfad.Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID in Google CloudLOCATION: die Google Cloud -RegionSERVICE_NAME: der Name des DienstesPROJECT_NUMBER: Ihre Google Cloud Projektnummer
Stellen Sie über OpenSSH eine Verbindung zum Dienst her:
ssh cloud-run-ssh