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 conteneurs 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 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 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 :
-
Configurer des 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 - Lecteur Cloud Run (
roles/run.viewer) 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 les instances Cloud Run sont compatibles.
- Pour les services, seul l'environnement d'exécution de deuxième génération est pris en charge.
- 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 remplacées. Les clés restent écrasées après la fin de la session SSH, jusqu'à ce que le service soit redémarré.
- Windows : PuTTY n'est pas compatible. Utilisez le client OpenSSH.
Configurer les 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 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 d'identité de personnel : par exemple :
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Pour obtenir plus d'informations et des exemples de types de comptes principaux, consultez la liste des identifiants 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 \
--ssh
Remplacez SERVICE_NAME par le nom de votre service Cloud Run. Vous pouvez 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 l'association 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 la fédération d'identité du personnel).
API REST
Envoyez une requête POST au point de terminaison de la règle de 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 Clouddans lequel 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 l'association 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: région Google Cloud dans laquelle 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 de localisation :
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 restreindre l'accès à un seul service nommé dans votre projet, appliquez l'association de règles 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: Google Cloud région 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ù réside le servicePROJECT_ID: ID de votre projet Google Cloud
Quitter 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 actif. Quitter votre session n'arrête 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 cheminProxyCommand.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