GCP – Google Cloud Platform

Reference complete pour Google Cloud Platform : projets, IAM, Compute Engine, reseau et gcloud CLI.

Sommaire

🏗️ Architecture GCP

Hierarchie des ressources

Organization (niveau entreprise)
    └── Folder (groupement logique)
        └── Project (conteneur principal)
            └── Resources (VM, Storage, DB...)
NiveauDescriptionExemple
OrganizationNœud racine entreprisecompany.com
FolderRegroupement de projetsprod/, dev/
ProjectConteneur de ressources + facturationmyapp-prod-123456
ResourceServices GCP individuelsVM, Bucket, Database

Regions et Zones

RegionLocalisationUsage
europe-west9France (Paris) 🇫🇷Conformite RGPD, latence FR
europe-west1BelgiqueEurope de l'Ouest
europe-west4Pays-BasEurope de l'Ouest
europe-west3Allemagne (Francfort)Europe centrale
europe-north1FinlandeEurope du Nord
Criteres de choix d'une region :
Latence : Plus proche des utilisateurs = plus rapide
Couts : Varient selon region (+/- 20%)
Compliance : RGPD → donnees en Europe obligatoire
Disponibilite : Multi-zones = Haute disponibilite

📁 Projets GCP

Pourquoi utiliser des projets ?

AvantageDescription
Separation environnementsdev/staging/prod isoles
Isolation facturationCouts par projet
Gestion IAM simplifieePermissions par projet
Securite renforceeIsolation des ressources
Maintenance faciliteeVue claire des ressources

Identifiants d'un projet

TypeCaracteristiqueExempleUsage
Project IDUnique global, immuablemyapp-prod-456789APIs, CLI
Project NameLisible, modifiableMyApp ProductionConsole
Project NumberNumerique, genere123456789012Interne GCP

Commandes projets

# 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

Naming conventions

# 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

🔐 IAM (Identity & Access Management)

Concept cle

IAM controle qui peut faire quoi sur quelles ressources
Principal (qui) + Role (quoi) + Resource (ou) = Permission

Types de membres (Principals)

TypeFormatUsage
Google Accountuser:alice@gmail.comUtilisateur individuel
Service Accountsa@project.iam.gserviceaccount.comApplication/VM
Google Groupgroup:devs@example.comGroupe d'utilisateurs
Domaindomain:example.comTous users domaine

Roles Basic (labs uniquement)

⚠️ En production, eviter ces roles : trop larges, preferer des roles specifiques
RoleIDPermissions
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

Roles predefinis (Production)

ServiceRoleDescription
Compute Engineroles/compute.instanceAdmin.v1Gerer les VMs
roles/compute.networkAdminGerer le reseau
roles/compute.securityAdminGerer la securite
roles/compute.viewerLecture seule Compute
Storageroles/storage.adminAdmin buckets
roles/storage.objectAdminAdmin objets
roles/storage.objectViewerLecture objets
roles/storage.objectCreatorCreer objets
BigQueryroles/bigquery.adminAdmin BigQuery
roles/bigquery.dataEditorModifier donnees
roles/bigquery.dataViewerLecture donnees
roles/bigquery.jobUserExecuter des jobs

Gerer IAM via gcloud

# 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"

Service Accounts

# 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
Cas d'usage Service Accounts :
✅ VM qui accede a Cloud Storage
✅ Application qui ecrit dans BigQuery
✅ Pipeline CI/CD qui deploie sur GCP
✅ Cloud Functions qui appelle des APIs

🔌 APIs & Services

Concept cle

Sur GCP, un projet ne peut pas utiliser n'importe quel service par defaut.
La plupart des services necessitent l'activation d'une API.

Pourquoi activer des APIs ?

RaisonBenefice
SecuriteControle des services utilises
CoutsEvite usage accidentel de services payants
QuotasGestion des limites par API
MonitoringTracking de l'usage par API

Activer/Gerer les APIs

# 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

APIs essentielles par service

ServiceAPI
Compute Enginecompute.googleapis.com
Cloud Storagestorage.googleapis.com
Cloud SQLsqladmin.googleapis.com
BigQuerybigquery.googleapis.com
Dataflowdataflow.googleapis.com
Vertex AIaiplatform.googleapis.com
Cloud DNSdns.googleapis.com
⚠️ Activation d'une API = GRATUIT
💰 Utilisation de l'API = Peut etre payant

💻 Compute Engine

Concept cle

Compute Engine = Service de machines virtuelles (VM) sur GCP.
VM = Serveur virtuel avec CPU, RAM, disque, reseau

Types de machines

SerieMachine TypevCPURAMUsage
E2 (Economique)e2-micro0.251 GBFree Tier eligible, dev
e2-small0.52 GBDev, test
e2-medium14 GBPetites apps web
e2-standard-4416 GBApps standard
N2 (Equilibre)n2-standard-228 GBProduction, API
n2-standard-4416 GBApps moyennes
n2-standard-8832 GBApps importantes
C2 (Calcul)c2-standard-4416 GBCalcul intensif, ML
M2 (Memoire)m2-ultramem-2082085888 GBBase de donnees

Creer une VM

# 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'

Gerer les VMs

# 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

Se connecter a une VM

MethodeCommandeUsage
SSH NavigateurConsole → VM → Bouton SSHLe plus simple
Cloud Shellgcloud compute ssh VM_NAME --zone=ZONEPratique en lab
SSH localgcloud compute config-ssh puis ssh VM_NAME.ZONE.PROJECTDepuis PC local

Boot Disk (Disque de demarrage)

OSImage FamilyProject
Debian 12debian-12debian-cloud
Ubuntu 22.04 LTSubuntu-2204-ltsubuntu-os-cloud
CentOS Stream 9centos-stream-9centos-cloud
Windows Server 2022windows-2022windows-cloud

Disques persistants

# 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

🌐 Reseau & Firewall

IP externe vs interne

TypeCaracteristiquesCout
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

Firewall Rules

Regles par defaut

RegleDescription
default-allow-internalAutorise tout le trafic entre VMs du meme reseau
default-allow-sshAutorise SSH (port 22) depuis n'importe ou
default-allow-rdpAutorise RDP (port 3389) pour Windows
default-allow-icmpAutorise ping

Creer des regles firewall

# 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
Bonnes pratiques firewall :
✅ Utiliser des source ranges specifiques
❌ Eviter 0.0.0.0/0 (tout Internet) sauf necessaire
✅ Utiliser des tags pour grouper les VMs
✅ Nommer clairement les regles

⌨️ Cloud Shell & gcloud CLI

Cloud Shell

Cloud Shell = Terminal dans le navigateur avec gcloud preconfigure
• Environnement: Debian Linux
• gcloud SDK preinstalle
• 5 GB de stockage persistant ($HOME)
• Session expire apres 20 min d'inactivite

Configuration gcloud

# 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

Authentification

# 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 de sortie et filtres

# 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"

🚀 Tutoriels pratiques

Tuto 1 : Deployer un serveur web NGINX

Objectif : Creer une VM Linux, installer NGINX, et rendre le site accessible sur Internet

Etape 1 : Creer la VM avec HTTP autorise

# 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

Etape 2 : Se connecter en SSH

# Via console : Bouton SSH
# Ou via gcloud :
gcloud compute ssh vm-nginx --zone=europe-west9-a

Etape 3 : Installer NGINX

# 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

Etape 4 : Tester l'acces web

# 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!"

Tuto 2 : Creer une VM Windows avec RDP

Objectif : Lancer une VM Windows Server et s'y connecter en bureau distant

Etape 1 : Creer la VM Windows

# 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

Etape 2 : Verifier que Windows est pret

# 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"

Etape 3 : Generer le mot de passe Windows

# 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 !

Etape 4 : Se connecter en RDP

OSMethode
Windows 1. Ouvrir Remote Desktop Connection
2. Computer = EXTERNAL_IP
3. Username = admin
4. Password = celui genere
Mac 1. Installer Microsoft Remote Desktop
2. Ajouter PC avec IP externe
3. Username = admin
4. Connect
Chrome 1. Extension Spark View (RDP)
2. Address = EXTERNAL_IP
3. Username = admin
4. Password = celui genere

Tuto 3 : Deployer avec Startup Script

Objectif : Automatiser l'installation d'un serveur web au demarrage de la VM

Methode 1 : Script inline

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'

Methode 2 : Script depuis fichier

# 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

Tuto 4 : Verifier l'etat d'une VM

# 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

💰 Gestion des couts

Ce qui coute

RessourceCout approximatifNote
VM runningFacture a la secondeMinimum 1 minute
VM stoppedDisque toujours facture !Supprimer pour eviter
IP externe statique~7€/mois si inutiliseeLiberer si non utilisee
Disques persistants~0.04€/GB/mois (SSD)Meme si VM arretee
Trafic sortant~0.12€/GB vers InternetTrafic entrant gratuit

Tarifs indicatifs VM (europe-west9)

Machine TypePrix/heurePrix/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€

Optimisation des couts

1. Arreter les VMs inutilisees

# 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

2. Supprimer ressources orphelines

# Disques non attaches
gcloud compute disks list --filter="-users:*"

# IPs statiques non utilisees
gcloud compute addresses list --filter="status=RESERVED"

3. VMs preemptibles

VMs Preemptibles : 80% moins cher
• Duree max: 24h
• Peut etre arretee a tout moment par GCP
• Ideal pour: Batch processing, CI/CD, dev/test
# Creer une VM preemptible
gcloud compute instances create vm-preempt \
  --preemptible \
  --zone=europe-west9-a

Checklist fin de lab

ActionCommande
Arreter VMsgcloud compute instances stop VM_NAME
Supprimer VMsgcloud compute instances delete VM_NAME
Lister disquesgcloud compute disks list
Liberer IPsgcloud compute addresses delete IP_NAME
Lister firewallgcloud compute firewall-rules list

🔧 Troubleshooting

Probleme 1 : RDP ne se connecte pas (Windows)

SymptomeCause probableSolution
Connection refused VM pas encore prete gcloud compute instances get-serial-port-output VM_NAME
Attendre "ready for RDP"
Permission denied Mot de passe incorrect gcloud compute reset-windows-password VM_NAME --user=admin
Re-generer le mot de passe
Timeout Firewall bloque RDP (port 3389) Verifier : gcloud compute firewall-rules list
Doit 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)"

Probleme 2 : Site web inaccessible (HTTP)

SymptomeCause probableSolution
Timeout / Can't reach Firewall bloque HTTP (port 80) Console : VM → Edit → Cocher "Allow HTTP traffic"
gcloud : Ajouter tag http-server
gcloud 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 nginx
sudo systemctl start nginx
HTTPS ne fonctionne pas Utilise HTTPS au lieu de HTTP Utiliser http:// (pas https)
Ou configurer certificat SSL/TLS

Probleme 3 : SSH ne fonctionne pas

SymptomeCause probableSolution
Connection refused VM arretee Verifier status :
gcloud compute instances list
Demarrer : 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

Probleme 4 : Permission denied sur gcloud

Message d'erreurCauseSolution
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 list
Changer : gcloud config set account CORRECT_ACCOUNT

Probleme 5 : Quota exceeded

# Voir les quotas actuels
gcloud compute project-info describe \
  --format="yaml(quotas)"

# Demander augmentation :
# Console → IAM & Admin → Quotas
# Selectionner quota → Edit Quotas → Justifier

Commandes de diagnostic

# 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

✅ Bonnes pratiques

Organisation

DomaineRecommandation
NamingFormat: {service}-{env}-{purpose}-{number}
Ex: vm-prod-web-01
LabelsMinimum: env, team, owner, cost-center
DocumentationArchitecture, contacts, procedures dans README

Securite

PrincipeApplication
Moindre privilegeRoles specifiques au lieu de Editor/Owner
Service AccountsDedies par application, rotation des cles
Firewall restrictifSource ranges specifiques, tags, pas 0.0.0.0/0
Secrets ManagementUtiliser Secret Manager, pas metadata/env vars

Monitoring

# 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

Automatisation

Infrastructure as Code recommande :
Terraform : Multi-cloud, tres populaire
Deployment Manager : GCP natif
Pulumi : Code TypeScript/Python

Avantages : Reproductibilite, version control, peer review, rollback facile