Auf dieser Seite wird beschrieben, wie Sie mit SSH über die TCP-Weiterleitung von Identity-Aware Proxy (IAP) eine Verbindung zu Cloud Run-Diensten herstellen.
Wenn Sie Ihre SSH-Verbindungen mit IAP schützen, können Sie einzelne Containerinstanzen in einer sicheren Umgebung debuggen.
Hinweis
- Achten Sie darauf, dass Ihr Cloud Run-Dienst in einer Ausführungsumgebung der 2. Generation ausgeführt wird und alle Debugging-Tools enthält, die Sie zum Ausführen von Befehlen nach der Verbindung benötigen. Weitere Informationen finden Sie unter Ausführungsumgebungen.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Sie die neueste 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 APIs 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:
- Administrator für IAP-Richtlinien (
roles/iap.admin) für das Projekt - Cloud Run Admin (
roles/run.admin) für das Projekt
- Administrator für IAP-Richtlinien (
-
Mit Arbeitslasten verbinden:
- 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
- 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.
- Bei Verwendung von SSH 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. OpenSSH-Client verwenden
IAP-Autorisierungsrichtlinien konfigurieren
Sie können den Zugriff auf Cloud Run-Ressourcen auf Projekt-, Regions- oder Dienstebene entweder über die gcloud CLI oder die IAP REST API verwalten.
Sie können Richtlinien für die folgenden Cloud Identity API-Kennungen 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 \
--ssh
Ersetzen Sie SERVICE_NAME durch den Namen Ihres Cloud Run-Dienstes. Sie können einen Cloud Run-Dienst 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 Prinzipal-ID des Nutzers, z. B. user:user@example.com oder den Prinzipal der Mitarbeiteridentitätsföderation.
REST API
Senden Sie eine POST-Anfrage an den Endpunkt für Projektrichtlinien:
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 Haupt-ID des Nutzers.PROJECT_NUMBER: die Google CloudProjektnummer, unter der 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 Standorteebene 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 Haupt-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 Haupt-ID des NutzersPROJECT_NUMBER: die Google Cloud ProjektnummerLOCATION: 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 Haupt-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 für Dienstrichtlinien:
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 Haupt-ID des NutzersPROJECT_NUMBER: die Google Cloud ProjektnummerLOCATION: 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.
Verbindung zu einem Dienst herstellen
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 Google Cloud-Projekts
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 starten 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 sich der Installationspfad von
gcloudunterscheidet, aktualisieren Sie das Präfix im PfadProxyCommand.Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Google Cloud Projekt-IDLOCATION: die Google Cloud RegionSERVICE_NAME: der Name des DienstesPROJECT_NUMBER: Ihre Google Cloud Projektnummer
Stellen Sie mit OpenSSH eine Verbindung zum Dienst her:
ssh cloud-run-ssh