Questa pagina descrive come utilizzare SSH per connetterti ai servizi Cloud Run tramite l'inoltro TCP di Identity-Aware Proxy (IAP).
Proteggendo le connessioni SSH con IAP, puoi eseguire il debug delle singole istanze di container in un ambiente sicuro.
Prima di iniziare
- Assicurati che il servizio Cloud Run sia in esecuzione in un ambiente di esecuzione di seconda generazione e includa tutti gli strumenti di debug necessari per eseguire i comandi una volta stabilita la connessione. Per saperne di più, consulta Ambienti di esecuzione.
Per assicurarti di utilizzare l'ultima versione di Google Cloud CLI, esegui questo comando:
gcloud components updateAbilita le API Cloud Run, API Cloud Resource Manager, API Cloud OS Login e Identity-Aware Proxy nel tuo progetto.
Per abilitare le API, esegui questo comando:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare le policy e connetterti ai workload, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Configura le policy:
- IAP Policy Admin (
roles/iap.admin) sul progetto - Cloud Run Admin (
roles/run.admin) sul progetto
- IAP Policy Admin (
-
Connettiti ai workload:
- Utente dell'account di servizio (
roles/iam.serviceAccountUser) sul service account - Cloud Run SSH Root Access (
roles/run.sshRoot) 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
- Utente dell'account di servizio (
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.
Limitazioni
SSH per Cloud Run presenta le seguenti limitazioni:
- Sono supportati solo i servizi e le istanze Cloud Run.
- Per i servizi, è supportato solo l'ambiente di esecuzione di seconda generazione.
- I job Cloud Run non sono supportati.
- I pool di worker non sono supportati.
- Quando utilizzi SSH, le chiavi host nell'immagine vengono sovrascritte. Le chiavi rimangono sovrascritte al termine della sessione SSH, fino al riavvio del servizio.
- Windows: PuTTY non è supportato. Utilizza il client OpenSSH.
Configura le policy di autorizzazione IAP
Puoi gestire l'accesso alle risorse Cloud Run a livello di progetto, regione o servizio utilizzando gcloud CLI o l'API REST di IAP.
Puoi configurare le policy per i seguenti identificatori dell'API Cloud Identity:
- Cloud Identity: ad esempio,
user:EMAIL@example.com - Federazione delle identità per la forza lavoro: ad esempio:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Per ulteriori informazioni ed esempi di tipi di entità, consulta l'elenco degli identificatori delle entità.
Aggiorna un servizio Cloud Run esistente
Per aggiornare il servizio in modo da abilitare SSH, esegui questo comando:
gcloud beta run services update \
SERVICE_NAME \
--region=LOCATION \
--ssh
Sostituisci quanto segue:
SERVICE_NAME: il nome del tuo servizio Cloud Run.LOCATION: la regione Google Cloud in cui viene eseguito il deployment del servizio (ad esempio,us-central1).
Puoi anche eseguire il deployment di un servizio Cloud Run aggiungendo --ssh a gcloud beta run deploy.
Concedi l'accesso a tutte le risorse Cloud Run in un progetto
Per gestire l'accesso a tutte le risorse di un progetto, applica l'associazione della policy IAM a livello di progetto.
gcloud
Esegui questo comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Sostituisci USER con l'identificatore dell'entità dell'utente, ad esempio user:user@example.com o l'entità della federazione delle identità per la forza lavoro.
API REST
Invia una richiesta POST all'endpoint della policy del progetto:
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"
Sostituisci quanto segue:
USER: l'identificatore principale dell'utente.PROJECT_NUMBER: il numero di progetto Google Cloud in cui sono ospitate le risorse.
Concedi l'accesso a tutte le risorse Cloud Run in una località specifica
Per limitare l'accesso a tutte le risorse all'interno di una regione specifica (ad esempio, us-central1), applica l'associazione della policy a livello di località.
gcloud
Esegui questo comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Sostituisci quanto segue:
USER: l'identificatore principale dell'utente.LOCATION: la regione Google Cloud in cui viene eseguito il deployment delle risorse (ad esempio,us-central1).
API REST
Invia una richiesta POST all'endpoint della policy di località:
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"
Sostituisci quanto segue:
USER: l'identificatore entità dell'utentePROJECT_NUMBER: il numero di progetto Google CloudLOCATION: la regione Google Cloud
Concedi l'accesso a un servizio Cloud Run specifico
Per limitare l'accesso a un singolo servizio denominato nel progetto, applica l'associazione della policy a livello di servizio.
gcloud
Esegui questo comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Sostituisci quanto segue:
USER: l'identificatore entità dell'utenteSERVICE_NAME: il nome della logica di servizio a cui connettersiLOCATION: la regione Google Cloud in cui viene eseguito il deployment del servizio
API REST
Invia una richiesta POST all'endpoint della policy di servizio:
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"
Sostituisci quanto segue:
USER: l'identificatore entità dell'utentePROJECT_NUMBER: il numero di progetto Google CloudLOCATION: la regione Google CloudSERVICE_NAME: il nome del servizio
Connessione tramite SSH
Per stabilire un tunnel SSH a una risorsa Cloud Run, devi utilizzare gcloud CLI.
Connettiti a un servizio
Esegui questo comando:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Sostituisci quanto segue:
SERVICE_NAME: il nome del servizio a cui connettersiLOCATION: la regione Google Cloud in cui si trova il servizioPROJECT_ID: l'ID del tuo progetto Google Cloud
Esci dalla sessione
Per terminare la sessione SSH, digita exit.
Le modifiche apportate al container vengono mantenute solo per il periodo di tempo in cui il container viene mantenuto attivo. L'uscita dalla sessione non interrompe né riavvia automaticamente il container.
Utilizza un client OpenSSH locale
Per utilizzare un client OpenSSH locale per le connessioni:
Per avviare il tunnel SSH e generare il certificato necessario, esegui il seguente comando:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDSostituisci quanto segue:
SERVICE_NAME: il nome del servizioLOCATION: la regione Google CloudPROJECT_ID: il tuo ID progetto Google Cloud
Aggiungi il seguente codice di configurazione al file
~/.ssh/configlocale: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=LOCATIONSe il percorso di installazione di
gcloudè diverso, aggiorna il prefisso nel percorsoProxyCommand.Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto Google CloudLOCATION: la regione Google CloudSERVICE_NAME: il nome del servizioPROJECT_NUMBER: il tuo numero di progetto Google Cloud
Connettiti al servizio utilizzando OpenSSH:
ssh cloud-run-ssh