SSH ti consente di stabilire una connessione shell sicura e interattiva alle istanze container in esecuzione. In questo modo, puoi accedere direttamente al file system e all'ambiente di runtime del container, il che ti consente di esaminare le risorse di sistema, verificare le configurazioni e risolvere i problemi.
SSH per Cloud Run aggiunge automaticamente i file binari sshd
richiesti al file system del container. Questi file binari sono accessibili solo per la
durata della sessione SSH e vengono rimossi al termine della sessione. Le configurazioni SSH esistenti, incluse le voci /etc/passwd, vengono ignorate da Cloud Run SSH a favore delle configurazioni gestite da Google.
Le note sul copyright open source di terze parti per le dipendenze SSH gestite da Google vengono montate all'interno del container quando viene stabilita una sessione SSH nel seguente percorso: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.
Limitazioni
Si applicano le seguenti limitazioni a SSH:
- SSH è disponibile solo per i servizi eseguiti nell'ambiente di seconda generazione di Cloud Run e per le istanze Cloud Run.
- Quando utilizzi SSH, le chiavi host nell'immagine vengono sovrascritte. Le chiavi rimangono sovrascritte dopo la fine della sessione SSH, fino al riavvio dell'istanza del servizio.
- Windows: PuTTY non è supportato. Utilizza il client OpenSSH.
- Quando utilizzi SSH, presta particolare attenzione a proteggere il container. Prendi in considerazione le best practice di sicurezza, ad esempio l'esecuzione del codice dell'applicazione come utente non root.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
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.
-
Abilita le API Cloud Run Admin, Cloud Resource Manager, Identity-Aware Proxy e Cloud OS Login:
gcloud services enable run.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- Installa e inizializza gcloud CLI.
-
Aggiorna i componenti:
gcloud components update
-
Windows: assicurati che il client OpenSSH sia installato.
Il client OpenSSH è in genere installato per impostazione predefinita su Windows 10 e versioni successive. Se non è installato, puoi installarlo eseguendo questo comando in PowerShell come amministratore:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Per saperne di più, consulta Installare OpenSSH.
- Consulta la pagina Prezzi di Cloud Run. Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi. SSH fattura i byte di traffico di rete in uscita.
-
Se il tuo progetto utilizza
Controlli di servizio VPC
(VPC-SC), tieni presente che il processo di tunneling controlla
iaptunnel.googleapis.comcome nome del servizio, anzichérun.googleapis.com.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare questi passaggi, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Service Account User (
roles/iam.serviceAccountUser) sul account di servizio - Cloud Run SSH Root Access (
roles/run.sshRoot) sul servizio - Visualizzatore Cloud Run (
roles/run.viewer) sul servizio - IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor) sul servizio - Cloud Run Developer (
roles/run.developer) sul servizio - Logs View Accessor (
roles/logging.viewAccessor) sul progetto - Browser (
roles/browser) sul progetto - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) sul progetto - Amministratore policy IAP (
roles/iap.admin) sul progetto per le operazioni di gestione IAP
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Se non fai parte dell'organizzazione a cui appartiene il progetto, Cloud Run blocca l'accesso SSH. Per ottenere l'accesso SSH, aggiungi il ruolo roles/compute.osLoginExternalUser
o utilizza un ruolo personalizzato con l'autorizzazione compute.oslogin.updateExternalUser.
Puoi concedere il ruolo Utente tunnel protetto da IAP a livello di progetto. Per limitare questo ruolo a un servizio o a un'istanza Cloud Run specifici, esegui questo comando:
Per un servizio specifico
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Sostituisci quanto segue:
SERVICE: il nome del servizio.REGION: la regione in cui è stato eseguito il deployment del servizio.MEMBER: l'identità a cui concedere l'accesso.
Per un'istanza specifica
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Sostituisci quanto segue:
INSTANCE: il nome dell'istanza.REGION: la regione in cui è stato eseguito il deployment del servizio.MEMBER: l'identità a cui concedere l'accesso.
Per concedere il ruolo roles/iap.tunnelResourceAccessor a livello di progetto e regione, consulta Configurare le policy di accesso IAP.
Utilizzare SSH con i servizi Cloud Run
Configura l'accesso SSH a livello di servizio e connettiti al servizio utilizzando SSH.
Configurare l'accesso SSH a livello di servizio
Puoi consentire l'accesso di ispezione a un servizio specifico utilizzando gcloud CLI o YAML:
gcloud
Per abilitare l'accesso a un servizio esistente, utilizza questo comando:
gcloud beta run services update SERVICE --ssh
Puoi anche consentire l'accesso di controllo a un servizio utilizzando il flag --ssh quando
esegui il deployment del servizio.
YAML
Se stai creando un nuovo servizio, ignora questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
L'esempio seguente contiene la configurazione YAML:
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_URLSostituisci quanto segue:
SERVICE: il nome del servizio Cloud Run.REGION: la Google Cloud regione, ad esempious-central1.IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Il comando
gcloud run services replaceutilizza per impostazione predefinita il fileservice.yaml, se presente.
Puoi disattivare l'accesso SSH in base al servizio utilizzando gcloud CLI o YAML:
gcloud
Per disattivare l'accesso al servizio, utilizza questo comando:
gcloud beta run services update SERVICE --no-ssh
YAML
Se stai creando un nuovo servizio, ignora questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
gcloud run services describe SERVICE --format export > service.yaml
L'esempio seguente contiene la configurazione YAML:
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_URLSostituisci quanto segue:
SERVICE: il nome del servizio Cloud Run.REGION: la Google Cloud regione, ad esempious-central1.IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Il comando
gcloud run services replaceutilizza per impostazione predefinita il fileservice.yaml, se presente.
Connettiti al servizio tramite SSH
Per connetterti a un servizio utilizzando SSH, utilizza gcloud CLI:
Per connetterti a un servizio utilizzando SSH, utilizza il seguente comando Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
Sostituisci quanto segue:
SERVICE: il nome del servizio.REGION: la regione in cui è stato eseguito il deployment del servizio.PROJECT_ID: l'ID progetto Google Cloud .Se ti viene chiesto di inserire una passphrase per la chiave SSH, puoi lasciare il campo vuoto. Tuttavia, se inserisci una passphrase, assicurati di utilizzare la stessa per le sessioni SSH successive dallo stesso workspace.
Al termine della sessione SSH, Cloud Run mostra il seguente messaggio:
Project: my-project Region:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGEPer terminare la sessione SSH, digita
exit. Le modifiche apportate al container vengono mantenute finché il container è attivo. L'uscita dalla sessione non riavvia o interrompe il container.
Specifica un'istanza di servizio
Per connetterti a un'istanza di servizio specifica utilizzando SSH, utilizza Google Cloud CLI.
Per connetterti a un'istanza del servizio Cloud Run utilizzando SSH, utilizza questo comando Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
Sostituisci quanto segue:
SERVICE: il nome del servizio.REGION: la regione in cui è stato eseguito il deployment del servizio.PROJECT_ID: l'ID progetto Google Cloud .INSTANCE_ID: l'ID istanza. Per trovare l'ID istanza del servizio, vai alla pagina Log nella sezione Osservabilità. L'ID istanza si trova nel campolabelsdi una voce di log. Non puoi trovare l'ID istanza se termini l'istanza specifica prima di connetterti.
Specificare una revisione
Per connetterti a una revisione specifica utilizzando SSH, utilizza Google Cloud CLI.
Per connetterti a una revisione del servizio Cloud Run utilizzando SSH, utilizza il seguente comando Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
Sostituisci quanto segue:
SERVICE: il nome del servizio.REGION: la regione in cui è stato eseguito il deployment del servizio.PROJECT_ID: l'ID progetto Google Cloud .REVISION: il nome della revisione.
Utilizzare SSH con le istanze Cloud Run
Configura l'accesso SSH a livello di istanza e connettiti all'istanza tramite SSH.
Configurare l'accesso SSH a livello di istanza
SSH è abilitato per impostazione predefinita per le istanze.
Puoi disattivare l'accesso SSH per ogni istanza utilizzando gcloud CLI o YAML:
gcloud
Per disattivare l'accesso all'istanza, utilizza il seguente comando:
gcloud beta run instances update INSTANCE --no-ssh
YAML
Se stai creando una nuova istanza, ignora questo passaggio. Se stai aggiornando un'istanza esistente, scarica la relativa configurazione YAML:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
L'esempio seguente contiene la configurazione YAML:
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_URLSostituisci quanto segue:
INSTANCE: il nome dell'istanza Cloud Run.REGION: la Google Cloud regione, ad esempious-central1.IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest.
Crea o aggiorna l'istanza utilizzando il seguente comando:
gcloud beta run instances replace instance.yaml
Puoi consentire l'accesso di controllo a un'istanza specifica utilizzando gcloud CLI o YAML.
gcloud
Per abilitare l'accesso su un'istanza esistente, utilizza il seguente comando:
gcloud beta run instances update INSTANCE --ssh
Puoi anche consentire l'accesso di ispezione a un'istanza utilizzando il flag --ssh quando
esegui il deployment dell'istanza.
YAML
Se stai creando una nuova istanza, ignora questo passaggio. Se stai aggiornando un'istanza esistente, scarica la relativa configurazione YAML:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
L'esempio seguente contiene la configurazione YAML:
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_URLSostituisci quanto segue:
INSTANCE: il nome dell'istanza Cloud Run.REGION: la Google Cloud regione, ad esempious-central1.IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest.
Crea o aggiorna l'istanza utilizzando il seguente comando:
gcloud beta run instances replace instance.yaml
Connettiti all'istanza tramite SSH
Per connetterti a un'istanza utilizzando SSH, utilizza il seguente comando Google Cloud CLI:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
Sostituisci quanto segue:
INSTANCE: il nome dell'istanza.REGION: la regione in cui è stato eseguito il deployment del servizio.PROJECT_ID: l'ID progetto Google Cloud .
Se ti viene chiesto di inserire una passphrase per la chiave SSH, puoi lasciare il campo vuoto. Tuttavia, se inserisci una passphrase, assicurati di utilizzare la stessa per le sessioni SSH successive dallo stesso workspace.
Al termine della sessione SSH, Cloud Run mostra il seguente messaggio:
Project: my-project
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
Per terminare la sessione SSH, digita exit.
Utilizzare il client OpenSSH per connettersi
Per utilizzare il client OpenSSH per connetterti:
- Esegui il comando
gcloud beta run services sshsul servizio di destinazione. - Avvia il tunnel SSH e genera il certificato.
Aggiungi quanto segue alla configurazione SSH:
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=REGIONSostituisci quanto segue:
USER: il nome utente sul computer locale.PROJECT_ID: l'ID progetto Google Cloud .PROJECT_NUMBER: il Google Cloud numero di progetto.REGION: la regione in cui è stato eseguito il deployment del servizio.SERVICE: il nome del servizio.
Se gcloud CLI è installato in una cartella diversa, potresti dover aggiornare la posizione nell'ultima riga.
Esegui questo comando:
ssh cloud-run-ssh
Il certificato SSH scade dopo cinque minuti. Se provi a stabilire una connessione SSH
con il tuo servizio dopo cinque minuti, devi eseguire di nuovo
gcloud beta run services ssh per rigenerare il certificato.
Log di accesso SSH
Per acquisire i log di controllo per la gestione delle chiavi SSH, devi abilitare i log di controllo per l'API Cloud OS Login. Consulta Visualizzare gli audit log di OS Login. Per accedere ai log SSH delle risorse Cloud Run, devi avere accesso a Cloud Audit Logs per il progetto.
Il seguente esempio esegue una query su tutti i servizi Cloud Run per l'ultimo giorno:
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)"
Proteggere e controllare l'accesso SSH
Puoi controllare chi può utilizzare SSH e come viene limitato nel tuo ambiente.
Disattivare l'accesso SSH con le policy dell'organizzazione
Per impostare una policy dell'organizzazione per disattivare SSH, utilizza il vincolo personalizzato che limita l'attivazione dell'accesso al debug SSH sui servizi Cloud Run.
Passaggi successivi
- Scopri di più sulla risoluzione dei problemi di Cloud Run.
- Scopri di più sulla risoluzione dei problemi dei servizi Cloud Run.
- Scopri di più sui problemi noti in Cloud Run.