Questa pagina descrive come utilizzare SSH per connettersi 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 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 connesso. 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, Cloud Resource Manager, 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 carichi di lavoro, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Configura i criteri:
- Amministratore delle norme IAP (
roles/iap.admin) sul progetto - Cloud Run Admin (
roles/run.admin) sul progetto
- Amministratore delle norme IAP (
-
Connettiti ai workload:
- 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
- Service Account User (
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.
Configurare 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 IAP.
Puoi configurare le policy per i seguenti identificatori dell'API Cloud Identity:
- Cloud Identity: ad esempio,
user:EMAIL@example.com - Federazione delle identità della 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 \
--ssh
Sostituisci SERVICE_NAME con il nome del tuo servizio Cloud Run. Puoi eseguire il deployment di un servizio Cloud Run aggiungendo --ssh a gcloud beta run deploy.
Concedere l'accesso a tutte le risorse Cloud Run in un progetto
Per gestire l'accesso per tutte le risorse all'interno di un progetto, applica il binding dei criteri 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 dell'entità dell'utente.PROJECT_NUMBER: il Google Cloud numero di progetto in cui sono ospitate le risorse.
Concedere 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 dell'entità dell'utente.LOCATION: la Google Cloud regione in cui vengono eseguito il deployment delle risorse (ad esempio,us-central1).
API REST
Invia una richiesta POST all'endpoint delle norme sulla posizione:
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 tuo progetto, applica il binding 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 Google Cloud regione 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.
Connettersi 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 Google Cloud regione 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 finché il container è attivo. L'uscita dalla sessione non interrompe o 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 questo 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 Google Cloud ID progettoLOCATION: la regione Google CloudSERVICE_NAME: il nome del servizioPROJECT_NUMBER: il tuo Google Cloud numero di progetto
Connettiti al servizio utilizzando OpenSSH:
ssh cloud-run-ssh