SSH ti consente di stabilire una connessione shell interattiva e sicura alle istanze di container in esecuzione. In questo modo, puoi accedere direttamente al file system e all'ambiente di runtime del container, ispezionare le risorse di sistema, verificare le configurazioni e risolvere i problemi.
SSH per Cloud Run utilizza i seguenti servizi per proteggere le connessioni:
- L'inoltro TCP di Identity-Aware Proxy funge da proxy per le connessioni SSH, quindi le richieste devono superare i controlli di autenticazione e autorizzazione prima di raggiungere il container. Puoi estendere le policy di accesso di IAP con l'accesso sensibile al contesto per limitare l'accesso in base ad attributi come l'indirizzo IP e il dispositivo dell'utente finale.
- OS Login utilizza l'autenticazione del certificato SSH per autenticare gli utenti. Quando ti connetti, gcloud CLI genera un certificato SSH di breve durata che scade dopo cinque minuti. Il certificato viene convalidato all'interno del container. Google controlla le autorizzazioni IAM per ogni tentativo di accesso.
SSH per Cloud Run aggiunge automaticamente i file binari gestiti da Google richiesti, tra cui sshd e i file binari che convalidano il certificato, 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 SSH di Cloud Run 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.
Sessioni SSH e istanze di servizio
Quando ti connetti a un servizio tramite SSH, tieni presente quanto segue:
- Se non è in esecuzione alcuna istanza del servizio, Cloud Run avvia una nuova istanza per la sessione SSH.
- Cloud Run mira a mantenere attiva l'istanza del servizio per la durata della sessione SSH. L'istanza ti viene fatturata come di consueto mentre è attiva.
Limitazioni
A SSH si applicano le seguenti limitazioni:
- Le sessioni SSH durano al massimo 24 ore. Dopo 24 ore, la sessione viene disconnessa e devi riconnetterti.
- IAP disconnette le sessioni SSH dopo un'ora di inattività. Per saperne di più, consulta Limitazioni note dell'inoltro TCP di IAP.
- SSH è disponibile solo per i servizi eseguiti nell'ambiente di seconda generazione di Cloud Run e nelle 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, devi prestare particolare attenzione alla protezione del container. Prendi in considerazione le best practice di sicurezza, ad esempio l'esecuzione del codice dell'applicazione come utente non root.
- Quando una connessione SSH avvia a freddo un servizio multi-container con l'ordine di avvio dei container (
container-dependencies), la richiesta viene instradata prima che l'ambiente del container sia pronto. Cloud Run restituisce un errore HTTP500e arresta immediatamente la nuova istanza. Se ti connetti utilizzando Google Cloud CLI, il comando non va a buon fine. Per risolvere il problema, connettiti tramite SSH solo quando un'istanza è già in esecuzione. Ad esempio, invia prima una richiesta al servizio per avviare un'istanza o configura il numero minimo di istanze.
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 workload.
-
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 l'API Cloud Run Admin, l'API Cloud Resource Manager, l'API Identity-Aware Proxy e le API Cloud OS Login:
gcloud services enable run.googleapis.com \ cloudresourcemanager.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 il seguente comando in PowerShell come amministratore:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Per saperne di più, consulta Installa OpenSSH.
- Consulta la pagina dei prezzi di Cloud Run. Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. SSH fattura i byte in uscita dalla rete. Inoltre, ti verrà addebitato il costo dell'istanza come di consueto mentre è attiva per una sessione SSH.
-
Se il tuo progetto utilizza i 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:
- Utente dell'account di servizio (
roles/iam.serviceAccountUser) sul service account - Cloud Run SSH Root Access (
roles/run.sshRoot) sul servizio - Cloud Run Viewer (
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 - IAP Policy Admin (
roles/iap.admin) sul progetto per le operazioni di gestione di 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 sei un membro dell'organizzazione di cui fa parte 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 un'istanza Cloud Run specifico, 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 Configura le policy di accesso di IAP.
Utilizza SSH con i servizi Cloud Run
Configura l'accesso SSH a livello di servizio e connettiti al servizio tramite SSH.
Configura l'accesso SSH a livello di servizio
Puoi consentire l'accesso in ispezione a un servizio specifico utilizzando gcloud CLI o YAML:
gcloud
Per abilitare l'accesso a un servizio esistente, utilizza il seguente comando:
gcloud beta run services update SERVICE --ssh
Puoi anche consentire l'accesso di ispezione a un servizio utilizzando il flag --ssh durante il deployment del servizio.
YAML
Se stai creando un nuovo servizio, salta 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 tuo servizio Cloud Run.REGION: la regione Google Cloud , 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 per ogni servizio utilizzando gcloud CLI o YAML:
gcloud
Per disattivare l'accesso al servizio, utilizza il seguente comando:
gcloud beta run services update SERVICE --no-ssh
YAML
Se stai creando un nuovo servizio, salta 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 tuo servizio Cloud Run.REGION: la regione Google Cloud , 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 con SSH
Per connetterti a un servizio utilizzando SSH, utilizza gcloud CLI:
Console
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic su un servizio per aprire la pagina Dettagli servizio.
Seleziona SSH. Viene aperto Cloud Shell con il comando SSH gcloud.
Premi Invio.
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 passphrase per tutte le sessioni SSH successive dalla stessa area di lavoro.
Al termine della sessione SSH, Cloud Run visualizza il seguente messaggio:
Project: PROJECT_ID Region:REGIONService: SERVICE Revision: REVISION Instance: INSTANCE_ID Container: CONTAINER Image: IMAGEPer terminare la sessione SSH, digita
exit. Tutte le modifiche apportate al container persistono per tutto il tempo in cui il container viene mantenuto attivo. L'uscita dalla sessione non riavvia né interrompe il container.
gcloud
Per connetterti a un servizio tramite SSH, utilizza il seguente comando di 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 passphrase per tutte le sessioni SSH successive dalla stessa area di lavoro.
Al termine della sessione SSH, Cloud Run visualizza il seguente messaggio:
Project: PROJECT_ID
Region: REGION
Service: SERVICE
Revision: REVISION
Instance: INSTANCE_ID
Container: CONTAINER
Image: IMAGE
Per terminare la sessione SSH, digita exit. Tutte le modifiche apportate al container persistono per tutto il tempo in cui il container viene mantenuto attivo. L'uscita dalla sessione non riavvia né interrompe il container.
Specifica un'istanza di servizio
Per connetterti a un'istanza di servizio specifica utilizzando SSH, utilizza Google Cloud CLI.
Console
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.
Seleziona Log.
Fai clic sulla voce di log dell'istanza di servizio per espanderla.
Seleziona Accedi a questa istanza tramite SSH. Viene aperto Cloud Shell con il comando SSH gcloud.
Premi Invio.
gcloud
Per connetterti a un'istanza di 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 \
--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 .REVISION: il nome della revisione.INSTANCE_ID: l'ID istanza. Per trovare l'ID istanza di 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.
Specifica una revisione
Per connetterti a una revisione specifica utilizzando SSH, utilizza Google Cloud CLI.
Console
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.
Seleziona Cronologia delle revisioni.
Fai clic sull'icona con i puntini di sospensione a destra della revisione a cui vuoi connetterti tramite SSH.
Seleziona Accedi alle revisioni tramite SSH. Viene aperto Cloud Shell con il comando SSH gcloud.
Premi Invio.
gcloud
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.
Utilizza SSH con le istanze Cloud Run
Configura l'accesso SSH a livello di istanza e connettiti all'istanza tramite SSH.
Configura l'accesso SSH a livello di istanza
SSH è abilitato per impostazione predefinita per le istanze.
Puoi disattivare l'accesso SSH per singola istanza utilizzando gcloud CLI o YAML:
gcloud
Per disattivare l'accesso nell'istanza, utilizza il seguente comando:
gcloud beta run instances update INSTANCE --no-ssh
YAML
Se stai creando una nuova istanza, salta 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 regione Google Cloud , 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 per l'ispezione a un'istanza specifica utilizzando gcloud CLI o YAML.
gcloud
Per attivare 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 durante il deployment dell'istanza.
YAML
Se stai creando una nuova istanza, salta 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 regione Google Cloud , 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 con SSH
Per connetterti a un'istanza tramite SSH, utilizza il seguente comando di 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 passphrase per tutte le sessioni SSH successive dalla stessa area di lavoro.
Al termine della sessione SSH, Cloud Run visualizza il seguente messaggio:
Project: PROJECT_ID
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
Per terminare la sessione SSH, digita exit.
Utilizza il client OpenSSH per connetterti
Per connetterti utilizzando il client OpenSSH:
- Esegui il comando
gcloud beta run services sshsul servizio di destinazione. In questo modo viene avviato il tunnel SSH e generato 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 beta 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 sulla tua macchina locale.PROJECT_ID: l'ID progetto Google Cloud .PROJECT_NUMBER: il numero di progetto Google Cloud .REGION: la regione in cui è stato eseguito il deployment del servizio.SERVICE: il nome del servizio.
Se gcloud CLI è installata in un'altra cartella, 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 nuovamente gcloud beta run services ssh per generare di nuovo il certificato.
Log di accesso SSH
Per acquisire gli audit log per la gestione delle chiavi SSH, devi attivare gli audit log per l'API Cloud OS Login. Consulta Visualizza gli audit log di OS Login. Per accedere ai log SSH delle risorse Cloud Run, devi avere accesso a Cloud Audit Logs per quel progetto.
L'esempio seguente esegue una query su tutti i servizi Cloud Run per il giorno precedente:
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)"
Proteggi e controlla l'accesso SSH
Puoi controllare chi può utilizzare SSH e come viene limitato nel tuo ambiente.
Disattiva 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 di debug SSH ai 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 i problemi noti di Cloud Run.