Lección 3 — Construire pas à pas

Compte de service au moindre privilège

4 min de lectura

Este contenido aún no está traducido. Se muestra la versión original.

Compte de service au moindre privilège

Le principe du moindre privilège

Donner à chaque identité uniquement les droits nécessaires à sa tâche, sur le plus petit périmètre possible. Pour notre agent, la tâche est : appeler Gemini sur Vertex AI. Rien d'autre.

flowchart LR
  subgraph Mauvais["Compte par défaut (à éviter)"]
    D["PROJECT_NUMBER-compute@... : souvent Éditeur"] --> T1["lire / modifier / supprimer presque tout le projet"]
  end
  subgraph Bon["Compte dédié (ce lab)"]
    S["lab-agent-cloud-run-iam@... : roles/aiplatform.user"] --> T2["appeler les modèles Vertex AI"]
  end

Sans option --service-account, Cloud Run utilise le compte de service Compute Engine par défaut. Selon l'âge et la configuration du projet, ce compte peut avoir le rôle Éditeur : c'est pratique pour démarrer, dangereux en production.

Ce que contient roles/aiplatform.user

Permission (exemples)Utile à l'agent ?
aiplatform.endpoints.predictoui : c'est elle qu'utilise generateContent sur les modèles Gemini
lecture des ressources Vertex AIrarement, sans danger
création de ressources Vertex AI (jeux de données, jobs…)non ; c'est le prix d'un rôle prédéfini

Pourquoi n'accorde-t-on PAS roles/logging.logWriter au compte de service de l'agent ?

Les commandes

Extrait de deployer.sh. Le nom du compte reprend le préfixe du lab (lab-agent-cloud-run-iam, 30 caractères au plus) pour qu'on le retrouve et le supprime sans ambiguïté :

files/deployer.sh
SERVICE="lab-agent-cloud-run-iam"
SA="${SERVICE}@${PROJECT_ID}.iam.gserviceaccount.com"

# 1. Compte de service dédié, sans aucun rôle au départ
gcloud iam service-accounts describe "$SA" --project "$PROJECT_ID" >/dev/null 2>&1 || \
  gcloud iam service-accounts create "$SERVICE" --project "$PROJECT_ID" \
    --display-name "Lab agent-cloud-run-iam : identité de l'agent"

# 2. Un seul rôle : appeler Gemini sur Vertex AI
gcloud projects add-iam-policy-binding "$PROJECT_ID" \
  --member "serviceAccount:${SA}" --role roles/aiplatform.user --condition None

Pour déployer un service avec ce compte, vous (la personne qui déploie) devez avoir le droit d'« agir en tant que » ce compte (iam.serviceAccounts.actAs, inclus dans Propriétaire, Éditeur ou roles/iam.serviceAccountUser). C'est une protection : sans elle, n'importe quel développeur pourrait lancer du code sous une identité plus puissante que la sienne.

Alice a le rôle Développeur Cloud Run mais pas iam.serviceAccountUser sur le compte lab-agent-cloud-run-iam. Que se passe-t-il si elle déploie avec --service-account sur ce compte ?

Vérifier ce qui a été accordé

terminal
gcloud projects get-iam-policy "$PROJECT_ID" \
  --flatten="bindings[].members" \
  --filter="bindings.members:serviceAccount:lab-agent-cloud-run-iam@" \
  --format="value(bindings.role)"

Résultat obtenu

Sortie réelle du 2026-10-15, après deployer.sh (identifiants masqués) :

terminal (2026-10-15)
Created service account [lab-agent-cloud-run-iam].
Updated IAM policy for project [mon-projet-gcp].
$ gcloud projects get-iam-policy ... --format="value(bindings.role)"
roles/aiplatform.user

Un seul rôle, comme prévu. Et l'agent répond bien (leçon suivante) : la preuve que ce rôle suffit.

Exercice

Votre assistant doit maintenant lire un fichier de politiques dans un bucket gs://politiques-internes. Quelles commandes ajoutez-vous, et lesquelles évitez-vous ?

Voir la solution

Accorder la lecture seule, sur ce seul bucket :

gcloud storage buckets add-iam-policy-binding gs://politiques-internes \
  --member "serviceAccount:lab-agent-cloud-run-iam@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role roles/storage.objectViewer

À éviter :

  • gcloud projects add-iam-policy-binding ... --role roles/storage.objectViewer : lecture de tous les buckets du projet ;
  • roles/storage.admin ou roles/storage.objectAdmin : droit d'écrire et de supprimer, inutile pour lire.

Et pensez à retirer ce droit dans nettoyer.sh (ou à supprimer le bucket).

Je sais faire

  • Créer un compte de service dédié, nommé avec le préfixe du lab
  • Accorder un rôle unique et vérifier les rôles effectifs
  • Expliquer le rôle de iam.serviceAccounts.actAs
  • Restreindre un droit à une ressource précise plutôt qu'au projet
Siguiente