Cette page explique comment utiliser SSH pour se connecter aux services Cloud Run via le transfert TCP d'Identity-Aware Proxy (IAP).
En sécurisant vos connexions SSH avec IAP, vous pouvez déboguer des instances de conteneur individuelles dans un environnement sécurisé.
Avant de commencer
- Assurez-vous que votre service Cloud Run s'exécute dans un environnement d'exécution de deuxième génération et qu'il inclut tous les outils de débogage dont vous avez besoin pour exécuter des commandes une fois connecté. Pour en savoir plus, consultez Environnements d'exécution.
Pour vous assurer que vous utilisez la dernière version de la Google Cloud CLI, exécutez la commande suivante :
gcloud components updateActivez les API Cloud Run, Cloud Resource Manager, Cloud OS Login et Identity-Aware Proxy dans votre projet.
Pour activer les API, exécutez la commande suivante :
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Rôles requis
Pour obtenir les autorisations nécessaires pour configurer des règles et vous connecter à des charges de travail, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Configurez les règles :
- Administrateur de stratégies IAP (
roles/iap.admin) sur le projet - Administrateur Cloud Run (
roles/run.admin) sur le projet
- Administrateur de stratégies IAP (
-
Se connecter aux charges de travail :
- Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur le compte de service - Accès racine à Cloud Run via SSH (
roles/run.sshRoot) sur le service - Utilisateur de tunnels sécurisés par IAP (
roles/iap.tunnelResourceAccessor) sur le service - Développeur Cloud Run (
roles/run.developer) sur le service - Accesseur de vues de journaux (
roles/logging.viewAccessor) sur le projet - Navigateur (
roles/browser) sur le projet - Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer) sur le projet
- Utilisateur du compte de service (
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Limites
SSH pour Cloud Run présente les limites suivantes :
- Seuls les services et instances Cloud Run sont compatibles.
- Pour les services, seul l'environnement d'exécution de deuxième génération est compatible.
- Les jobs Cloud Run ne sont pas compatibles.
- Les pools de nœuds de calcul ne sont pas acceptés.
- Lorsque vous utilisez SSH, les clés d'hôte de l'image sont écrasées. Les clés restent écrasées après la fin de la session SSH, jusqu'au redémarrage du service.
- Windows : PuTTY n'est pas compatible. Utilisez le client OpenSSH.
Configurer des règles d'autorisation IAP
Vous pouvez gérer l'accès aux ressources Cloud Run au niveau du projet, de la région ou du service à l'aide de la gcloud CLI ou de l'API REST IAP.
Vous pouvez configurer des règles pour les identifiants d'API Cloud Identity suivants :
- Cloud Identity : par exemple,
user:EMAIL@example.com - Fédération des identités des employés : par exemple :
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Pour en savoir plus et obtenir des exemples de types de comptes principaux, consultez la liste des identifiants de comptes principaux.
Mettre à jour un service Cloud Run existant
Pour mettre à jour le service afin d'activer SSH, exécutez la commande suivante :
gcloud beta run services update \
SERVICE_NAME \
--region=LOCATION \
--ssh
Remplacez les éléments suivants :
SERVICE_NAME: nom de votre service Cloud Run.LOCATION: Google Cloud région où le service est déployé (par exemple,us-central1).
Vous pouvez également déployer un service Cloud Run en ajoutant --ssh à gcloud beta run deploy.
Accorder l'accès à toutes les ressources Cloud Run d'un projet
Pour gérer l'accès à toutes les ressources d'un projet, appliquez la liaison de stratégie IAM au niveau du projet.
gcloud
Exécutez la commande suivante :
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Remplacez USER par l'identifiant principal de l'utilisateur, par exemple user:user@example.com ou le compte principal de Workforce Identity Federation.
API REST
Envoyez une requête POST au point de terminaison de la stratégie du projet :
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"
Remplacez les éléments suivants :
USER: identifiant principal de l'utilisateur.PROJECT_NUMBER: numéro du projet Google Cloudoù les ressources sont hébergées.
Accorder l'accès à toutes les ressources Cloud Run dans un emplacement spécifique
Pour restreindre l'accès à toutes les ressources d'une région spécifique (par exemple, us-central1), appliquez la liaison de stratégie au niveau de l'emplacement.
gcloud
Exécutez la commande ci-dessous.
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Remplacez les éléments suivants :
USER: identifiant principal de l'utilisateur.LOCATION: Google Cloud région où les ressources sont déployées (par exemple,us-central1).
API REST
Envoyez une requête POST au point de terminaison de la règle d'emplacement :
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"
Remplacez les éléments suivants :
USER: identifiant principal de l'utilisateurPROJECT_NUMBER: numéro de projet Google CloudLOCATION: région Google Cloud
Accorder l'accès à un service Cloud Run spécifique
Pour limiter l'accès à un seul service nommé dans votre projet, appliquez la liaison de stratégie au niveau du service.
gcloud
Exécutez la commande ci-dessous.
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Remplacez les éléments suivants :
USER: identifiant principal de l'utilisateurSERVICE_NAME: nom de la logique de service à laquelle se connecterLOCATION: région Google Cloud dans laquelle le service est déployé
API REST
Envoyez une requête POST au point de terminaison de la règle de service :
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"
Remplacez les éléments suivants :
USER: identifiant principal de l'utilisateurPROJECT_NUMBER: numéro de projet Google CloudLOCATION: région Google CloudSERVICE_NAME: nom du service.
Se connecter avec SSH
Pour établir un tunnel SSH vers une ressource Cloud Run, vous devez utiliser la gcloud CLI.
Se connecter à un service
Exécutez la commande suivante :
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Remplacez les éléments suivants :
SERVICE_NAME: nom du service auquel se connecterLOCATION: région Google Cloud où se trouve le servicePROJECT_ID: ID de votre projet Google Cloud
Quittez la session.
Pour mettre fin à votre session SSH, saisissez exit.
Toutes les modifications que vous apportez au conteneur ne sont conservées que tant que le conteneur est maintenu actif. Le fait de quitter votre session n'arrête pas ni ne redémarre automatiquement le conteneur.
Utiliser un client OpenSSH local
Pour utiliser un client OpenSSH local pour les connexions :
Pour lancer le tunnel SSH et générer le certificat nécessaire, exécutez la commande suivante :
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDRemplacez les éléments suivants :
SERVICE_NAME: nom du service.LOCATION: région Google CloudPROJECT_ID: ID de votre projet Google Cloud
Ajoutez le code de configuration suivant à votre fichier
~/.ssh/configlocal :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=LOCATIONSi votre chemin d'installation
gcloudest différent, mettez à jour le préfixe dans le chemin d'accèsProxyCommand.Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google CloudLOCATION: région Google CloudSERVICE_NAME: nom du service.PROJECT_NUMBER: numéro de votre projet Google Cloud
Connectez-vous au service à l'aide d'OpenSSH :
ssh cloud-run-ssh