Reference complete pour Google Cloud Platform : projets, IAM, Compute Engine, reseau et gcloud CLI.
Organization (niveau entreprise)
└── Folder (groupement logique)
└── Project (conteneur principal)
└── Resources (VM, Storage, DB...)
| Niveau | Description | Exemple |
|---|---|---|
| Organization | Nœud racine entreprise | company.com |
| Folder | Regroupement de projets | prod/, dev/ |
| Project | Conteneur de ressources + facturation | myapp-prod-123456 |
| Resource | Services GCP individuels | VM, Bucket, Database |
| Region | Localisation | Usage |
|---|---|---|
europe-west9 | France (Paris) 🇫🇷 | Conformite RGPD, latence FR |
europe-west1 | Belgique | Europe de l'Ouest |
europe-west4 | Pays-Bas | Europe de l'Ouest |
europe-west3 | Allemagne (Francfort) | Europe centrale |
europe-north1 | Finlande | Europe du Nord |
| Avantage | Description |
|---|---|
| Separation environnements | dev/staging/prod isoles |
| Isolation facturation | Couts par projet |
| Gestion IAM simplifiee | Permissions par projet |
| Securite renforcee | Isolation des ressources |
| Maintenance facilitee | Vue claire des ressources |
| Type | Caracteristique | Exemple | Usage |
|---|---|---|---|
| Project ID | Unique global, immuable | myapp-prod-456789 | APIs, CLI |
| Project Name | Lisible, modifiable | MyApp Production | Console |
| Project Number | Numerique, genere | 123456789012 | Interne GCP |
# Lister tous les projets
gcloud projects list
# Creer un projet
gcloud projects create myapp-prod-456789 \
--name="MyApp Production"
# Definir comme projet actif
gcloud config set project myapp-prod-456789
# Voir le projet actif
gcloud config get-value project
# Voir details
gcloud projects describe myapp-prod-456789
# Ajouter des labels
gcloud projects update myapp-prod-456789 \
--update-labels=env=prod,team=data,owner=idir
# Supprimer (soft delete, 30 jours de grace)
gcloud projects delete PROJECT_ID
# Format recommande
{app}-{environment}-{team/region}
# ✅ Bons exemples
crm-prod-sales
analytics-dev-data
website-staging-frontend
ml-model-prod-datascience
# ❌ Mauvais exemples
test
project1
mon-truc
Principal (qui) + Role (quoi) + Resource (ou) = Permission
| Type | Format | Usage |
|---|---|---|
| Google Account | user:alice@gmail.com | Utilisateur individuel |
| Service Account | sa@project.iam.gserviceaccount.com | Application/VM |
| Google Group | group:devs@example.com | Groupe d'utilisateurs |
| Domain | domain:example.com | Tous users domaine |
| Role | ID | Permissions |
|---|---|---|
| Viewer | roles/viewer |
Lecture seule, aucune modification |
| Editor | roles/editor |
Creer/modifier/supprimer ressources ❌ Pas gestion IAM ni facturation |
| Owner | roles/owner |
Tout Editor + gestion IAM + facturation |
| Service | Role | Description |
|---|---|---|
| Compute Engine | roles/compute.instanceAdmin.v1 | Gerer les VMs |
roles/compute.networkAdmin | Gerer le reseau | |
roles/compute.securityAdmin | Gerer la securite | |
roles/compute.viewer | Lecture seule Compute | |
| Storage | roles/storage.admin | Admin buckets |
roles/storage.objectAdmin | Admin objets | |
roles/storage.objectViewer | Lecture objets | |
roles/storage.objectCreator | Creer objets | |
| BigQuery | roles/bigquery.admin | Admin BigQuery |
roles/bigquery.dataEditor | Modifier donnees | |
roles/bigquery.dataViewer | Lecture donnees | |
roles/bigquery.jobUser | Executer des jobs |
# Ajouter un membre avec un role
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:alice@example.com' \
--role='roles/compute.instanceAdmin.v1'
# Voir la policy IAM du projet
gcloud projects get-iam-policy PROJECT_ID
# Retirer un membre
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:alice@example.com' \
--role='roles/compute.instanceAdmin.v1'
# Lister les roles disponibles
gcloud iam roles list
# Chercher un role specifique
gcloud iam roles list --filter="name:compute"
# Creer un Service Account
gcloud iam service-accounts create my-sa \
--display-name="My Service Account"
# Donner des permissions
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='serviceAccount:my-sa@PROJECT_ID.iam.gserviceaccount.com' \
--role='roles/compute.instanceAdmin.v1'
# Lister les SAs
gcloud iam service-accounts list
# Generer une cle JSON
gcloud iam service-accounts keys create key.json \
--iam-account=my-sa@PROJECT_ID.iam.gserviceaccount.com
| Raison | Benefice |
|---|---|
| Securite | Controle des services utilises |
| Couts | Evite usage accidentel de services payants |
| Quotas | Gestion des limites par API |
| Monitoring | Tracking de l'usage par API |
# Activer une API
gcloud services enable compute.googleapis.com
# Activer plusieurs APIs
gcloud services enable \
compute.googleapis.com \
storage.googleapis.com \
bigquery.googleapis.com
# Lister les APIs activees
gcloud services list --enabled
# Lister toutes les APIs disponibles
gcloud services list --available
# Desactiver une API (⚠️ peut casser des ressources !)
gcloud services disable dialogflow.googleapis.com
| Service | API |
|---|---|
| Compute Engine | compute.googleapis.com |
| Cloud Storage | storage.googleapis.com |
| Cloud SQL | sqladmin.googleapis.com |
| BigQuery | bigquery.googleapis.com |
| Dataflow | dataflow.googleapis.com |
| Vertex AI | aiplatform.googleapis.com |
| Cloud DNS | dns.googleapis.com |
VM = Serveur virtuel avec CPU, RAM, disque, reseau
| Serie | Machine Type | vCPU | RAM | Usage |
|---|---|---|---|---|
| E2 (Economique) | e2-micro | 0.25 | 1 GB | Free Tier eligible, dev |
e2-small | 0.5 | 2 GB | Dev, test | |
e2-medium | 1 | 4 GB | Petites apps web | |
e2-standard-4 | 4 | 16 GB | Apps standard | |
| N2 (Equilibre) | n2-standard-2 | 2 | 8 GB | Production, API |
n2-standard-4 | 4 | 16 GB | Apps moyennes | |
n2-standard-8 | 8 | 32 GB | Apps importantes | |
| C2 (Calcul) | c2-standard-4 | 4 | 16 GB | Calcul intensif, ML |
| M2 (Memoire) | m2-ultramem-208 | 208 | 5888 GB | Base de donnees |
# VM basique
gcloud compute instances create vm-web-01 \
--zone=europe-west9-a \
--machine-type=e2-medium \
--image-family=debian-12 \
--image-project=debian-cloud
# VM avec options avancees
gcloud compute instances create vm-web-prod \
--zone=europe-west9-a \
--machine-type=n2-standard-2 \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--boot-disk-size=50GB \
--boot-disk-type=pd-balanced \
--tags=http-server,https-server \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl start nginx'
# Lister toutes les VMs
gcloud compute instances list
# Voir details d'une VM
gcloud compute instances describe VM_NAME --zone=ZONE
# Demarrer une VM arretee
gcloud compute instances start VM_NAME --zone=ZONE
# Arreter une VM
gcloud compute instances stop VM_NAME --zone=ZONE
# Supprimer une VM
gcloud compute instances delete VM_NAME --zone=ZONE
# Changer le machine type (VM doit etre arretee)
gcloud compute instances set-machine-type VM_NAME \
--machine-type=n2-standard-4 \
--zone=ZONE
| Methode | Commande | Usage |
|---|---|---|
| SSH Navigateur | Console → VM → Bouton SSH | Le plus simple |
| Cloud Shell | gcloud compute ssh VM_NAME --zone=ZONE | Pratique en lab |
| SSH local | gcloud compute config-ssh puis ssh VM_NAME.ZONE.PROJECT | Depuis PC local |
| OS | Image Family | Project |
|---|---|---|
| Debian 12 | debian-12 | debian-cloud |
| Ubuntu 22.04 LTS | ubuntu-2204-lts | ubuntu-os-cloud |
| CentOS Stream 9 | centos-stream-9 | centos-cloud |
| Windows Server 2022 | windows-2022 | windows-cloud |
# Creer un disque
gcloud compute disks create my-disk \
--size=100GB \
--zone=europe-west9-a \
--type=pd-balanced
# Attacher un disque a une VM
gcloud compute instances attach-disk VM_NAME \
--disk=my-disk \
--zone=ZONE
# Lister les disques
gcloud compute disks list
# Snapshot (backup)
gcloud compute disks snapshot my-disk \
--snapshot-names=my-snapshot \
--zone=ZONE
# Creer un disque depuis un snapshot
gcloud compute disks create restored-disk \
--source-snapshot=my-snapshot \
--zone=ZONE
| Type | Caracteristiques | Cout |
|---|---|---|
| IP Externe |
• Accessible depuis Internet • Ephemere (change au redemarrage) ou Statique (fixe) • Necessaire pour services publics |
Payant si statique |
| IP Interne |
• Accessible uniquement dans le VPC • Privee (non routable sur Internet) • Communication inter-VMs |
Gratuit |
| Regle | Description |
|---|---|
default-allow-internal | Autorise tout le trafic entre VMs du meme reseau |
default-allow-ssh | Autorise SSH (port 22) depuis n'importe ou |
default-allow-rdp | Autorise RDP (port 3389) pour Windows |
default-allow-icmp | Autorise ping |
# Autoriser HTTP (port 80)
gcloud compute firewall-rules create allow-http \
--direction=INGRESS \
--priority=1000 \
--network=default \
--action=ALLOW \
--rules=tcp:80 \
--source-ranges=0.0.0.0/0 \
--target-tags=http-server
# Autoriser HTTPS (port 443)
gcloud compute firewall-rules create allow-https \
--direction=INGRESS \
--priority=1000 \
--network=default \
--action=ALLOW \
--rules=tcp:443 \
--source-ranges=0.0.0.0/0 \
--target-tags=https-server
# Appliquer des tags aux VMs
gcloud compute instances add-tags VM_NAME \
--tags=http-server,https-server \
--zone=ZONE
# Lister les regles
gcloud compute firewall-rules list
# Supprimer une regle
gcloud compute firewall-rules delete RULE_NAME
# Voir la configuration active
gcloud config list
# Definir le projet par defaut
gcloud config set project PROJECT_ID
# Definir la region/zone par defaut
gcloud config set compute/region europe-west9
gcloud config set compute/zone europe-west9-a
# Creer une configuration nommee
gcloud config configurations create prod
gcloud config configurations create dev
# Activer une configuration
gcloud config configurations activate prod
# Lister les configurations
gcloud config configurations list
# Se connecter
gcloud auth login
# Voir le compte actif
gcloud auth list
# Changer de compte
gcloud config set account ACCOUNT
# Service Account authentication
gcloud auth activate-service-account --key-file=key.json
# Format JSON
gcloud compute instances list --format=json
# Format YAML
gcloud compute instances list --format=yaml
# Extraire une valeur specifique
gcloud compute instances describe VM_NAME \
--format="value(networkInterfaces[0].networkIP)"
# Filtrer les VMs en running
gcloud compute instances list --filter="status=RUNNING"
# Filtrer par zone
gcloud compute instances list --filter="zone:europe-west9"
# Filtrer par label
gcloud compute instances list --filter="labels.env=prod"
# Via Console : Compute Engine → Create Instance
# Cocher : ✅ Allow HTTP traffic
# Ou via gcloud :
gcloud compute instances create vm-nginx \
--zone=europe-west9-a \
--machine-type=e2-medium \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=http-server
# Via console : Bouton SSH
# Ou via gcloud :
gcloud compute ssh vm-nginx --zone=europe-west9-a
# Mettre a jour les packages
sudo apt-get update
# Installer NGINX
sudo apt-get install -y nginx
# Verifier que NGINX tourne
ps auwx | grep nginx
# Recuperer l'IP externe
gcloud compute instances describe vm-nginx \
--zone=europe-west9-a \
--format="value(networkInterfaces[0].accessConfigs[0].natIP)"
# Ouvrir dans le navigateur :
http://EXTERNAL_IP/
# Tu dois voir : "Welcome to nginx!"
# Via console : Compute Engine → Create Instance
# OS and storage → Change → Windows Server 2022 Datacenter
# Ou via gcloud :
gcloud compute instances create vm-windows \
--zone=europe-west9-a \
--machine-type=e2-medium \
--image-family=windows-2022 \
--image-project=windows-cloud
# Verifier les logs de demarrage
gcloud compute instances get-serial-port-output vm-windows \
--zone=europe-west9-a
# Relancer plusieurs fois jusqu'a voir "ready for RDP"
# Creer/reset le mot de passe pour l'utilisateur admin
gcloud compute reset-windows-password vm-windows \
--zone=europe-west9-a \
--user=admin
# Copier le mot de passe affiche !
| OS | Methode |
|---|---|
| Windows |
1. Ouvrir Remote Desktop Connection 2. Computer = EXTERNAL_IP3. Username = admin4. Password = celui genere |
| Mac |
1. Installer Microsoft Remote Desktop 2. Ajouter PC avec IP externe 3. Username = admin4. Connect |
| Chrome |
1. Extension Spark View (RDP) 2. Address = EXTERNAL_IP3. Username = admin4. Password = celui genere |
gcloud compute instances create vm-auto \
--zone=europe-west9-a \
--machine-type=e2-medium \
--tags=http-server \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl start nginx
echo "Hello from $(hostname)" > /var/www/html/index.html'
# Creer startup.sh
cat > startup.sh << 'EOF'
#!/bin/bash
apt-get update
apt-get install -y nginx git
systemctl enable nginx
systemctl start nginx
EOF
# Creer la VM avec le script
gcloud compute instances create vm-auto \
--zone=europe-west9-a \
--tags=http-server \
--metadata-from-file=startup-script=startup.sh
# Serial port output (logs bas niveau)
gcloud compute instances get-serial-port-output VM_NAME \
--zone=ZONE
# Utile quand :
# - SSH ne fonctionne pas
# - VM Windows pas encore prete
# - Probleme de boot
| Ressource | Cout approximatif | Note |
|---|---|---|
| VM running | Facture a la seconde | Minimum 1 minute |
| VM stopped | Disque toujours facture ! | Supprimer pour eviter |
| IP externe statique | ~7€/mois si inutilisee | Liberer si non utilisee |
| Disques persistants | ~0.04€/GB/mois (SSD) | Meme si VM arretee |
| Trafic sortant | ~0.12€/GB vers Internet | Trafic entrant gratuit |
| Machine Type | Prix/heure | Prix/mois (24/7) |
|---|---|---|
e2-micro | ~0.008€ | ~6€ (Free tier: 1 gratuite) |
e2-small | ~0.017€ | ~12€ |
e2-medium | ~0.034€ | ~25€ |
n2-standard-2 | ~0.099€ | ~72€ |
n2-standard-4 | ~0.198€ | ~144€ |
# Arreter une VM
gcloud compute instances stop VM_NAME --zone=ZONE
# Supprimer une VM
gcloud compute instances delete VM_NAME --zone=ZONE
# Script pour arreter toutes les VMs
for vm in $(gcloud compute instances list --format="value(name,zone)"); do
name=$(echo $vm | cut -d' ' -f1)
zone=$(echo $vm | cut -d' ' -f2)
gcloud compute instances stop $name --zone=$zone
done
# Disques non attaches
gcloud compute disks list --filter="-users:*"
# IPs statiques non utilisees
gcloud compute addresses list --filter="status=RESERVED"
# Creer une VM preemptible
gcloud compute instances create vm-preempt \
--preemptible \
--zone=europe-west9-a
| Action | Commande |
|---|---|
| Arreter VMs | gcloud compute instances stop VM_NAME |
| Supprimer VMs | gcloud compute instances delete VM_NAME |
| Lister disques | gcloud compute disks list |
| Liberer IPs | gcloud compute addresses delete IP_NAME |
| Lister firewall | gcloud compute firewall-rules list |
| Symptome | Cause probable | Solution |
|---|---|---|
| Connection refused | VM pas encore prete |
gcloud compute instances get-serial-port-output VM_NAMEAttendre "ready for RDP" |
| Permission denied | Mot de passe incorrect |
gcloud compute reset-windows-password VM_NAME --user=adminRe-generer le mot de passe |
| Timeout | Firewall bloque RDP (port 3389) |
Verifier : gcloud compute firewall-rules listDoit contenir default-allow-rdp
|
| Mauvaise IP | Utilise Internal IP au lieu d'External |
Recuperer External IP :gcloud compute instances describe VM_NAME --format="value(networkInterfaces[0].accessConfigs[0].natIP)"
|
| Symptome | Cause probable | Solution |
|---|---|---|
| Timeout / Can't reach | Firewall bloque HTTP (port 80) |
Console : VM → Edit → Cocher "Allow HTTP traffic" gcloud : Ajouter tag http-servergcloud compute instances add-tags VM_NAME --tags=http-server
|
| Welcome to nginx pas affiche | Serveur web pas demarre |
SSH dans la VM :sudo systemctl status nginxsudo systemctl start nginx
|
| HTTPS ne fonctionne pas | Utilise HTTPS au lieu de HTTP |
Utiliser http:// (pas https)Ou configurer certificat SSL/TLS |
| Symptome | Cause probable | Solution |
|---|---|---|
| Connection refused | VM arretee |
Verifier status :gcloud compute instances listDemarrer : gcloud compute instances start VM_NAME
|
| Permission denied | Cles SSH en cours de generation |
Attendre quelques secondes et reessayer Ou utiliser SSH navigateur (Console) |
| Zone incorrecte | VM dans une autre zone |
Specifier la bonne zone :gcloud compute ssh VM_NAME --zone=ZONE_CORRECTE
|
| Message d'erreur | Cause | Solution |
|---|---|---|
| PERMISSION_DENIED | Pas les droits IAM necessaires |
Verifier les permissions :gcloud projects get-iam-policy PROJECT_ID | grep $(gcloud config get-value account)Demander role Editor ou Owner |
| API not enabled | API Compute Engine pas activee |
gcloud services enable compute.googleapis.com
|
| Wrong account | Mauvais compte actif |
Verifier : gcloud auth listChanger : gcloud config set account CORRECT_ACCOUNT
|
# Voir les quotas actuels
gcloud compute project-info describe \
--format="yaml(quotas)"
# Demander augmentation :
# Console → IAM & Admin → Quotas
# Selectionner quota → Edit Quotas → Justifier
# Logs de la VM (bas niveau)
gcloud compute instances get-serial-port-output VM_NAME
# Logs Cloud Logging
gcloud logging read "resource.type=gce_instance" --limit=50
# Verifier connectivite depuis la VM
# (apres SSH dans la VM)
ping -c 4 8.8.8.8 # Test Internet
ping -c 4 google.com # Test DNS
curl -I https://google.com # Test HTTP
# Voir ports ouverts sur la VM
sudo netstat -tlnp
sudo ss -tlnp
| Domaine | Recommandation |
|---|---|
| Naming | Format: {service}-{env}-{purpose}-{number}Ex: vm-prod-web-01 |
| Labels | Minimum: env, team, owner, cost-center |
| Documentation | Architecture, contacts, procedures dans README |
| Principe | Application |
|---|---|
| Moindre privilege | Roles specifiques au lieu de Editor/Owner |
| Service Accounts | Dedies par application, rotation des cles |
| Firewall restrictif | Source ranges specifiques, tags, pas 0.0.0.0/0 |
| Secrets Management | Utiliser Secret Manager, pas metadata/env vars |
# Installer agent monitoring sur VM
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
# Voir logs d'une VM
gcloud logging read "resource.type=gce_instance" --limit=50
# Logs avec filtre erreur
gcloud logging read 'jsonPayload.message=~"ERROR"' --limit=50