Skill de sécurité GCP — Standards et règles de sécurité obligatoires pour tous les déploiements GCP de l'équipe. Utilise ce skill quand on parle de sécurité GCP, IAM, permissions, secrets, Workload Identity, Service Accounts, VPC, audit logs, Secret Manager, ou quand on configure un nouveau projet GCP. Déclenche aussi pour : "configurer la sécurité", "bonnes pratiques IAM", "gérer les secrets", "principle of least privilege", "audit GCP". Ce skill DOIT être consulté avant tout déploiement en production.
Jamais de clé JSON. Jamais de secrets dans le code. Toujours le minimum de permissions.
❌ INTERDIT :
# Ne jamais créer de clé JSON
gcloud iam service-accounts keys create key.json # INTERDIT !
âś… OBLIGATOIRE :
# Toujours utiliser Workload Identity Federation
# Voir references/wif-setup.md pour la configuration complète
| RĂ´le | Permissions |
|---|---|
| GitHub Actions SA | appengine.deployer, cloudbuild.builds.editor, storage.admin, artifactregistry.admin, serviceusage.serviceUsageAdmin |
| App Engine SA | storage.admin sur bucket staging seulement |
| Développeur | appengine.appViewer, logging.viewer |
| DevOps | appengine.appAdmin, storage.admin |
roles/owner à un Service Accountroles/editor à un Service AccountallUsers sauf si app publique intentionnellement# Ne jamais faire ça !
DB_PASSWORD = "mon-mot-de-passe"
API_KEY = "abc123"
# Créer un secret
gcloud secrets create db-password \
--project=TON_PROJECT_ID \
--replication-policy="automatic"
# Ajouter la valeur
echo -n "mon-mot-de-passe" | gcloud secrets versions add db-password --data-file=-
# Donner accès au SA
gcloud secrets add-iam-policy-binding db-password \
--member="serviceAccount:[email protected]" \
--role="roles/secretmanager.secretAccessor"
# Dans le code Python
from google.cloud import secretmanager
def get_secret(secret_id, project_id):
client = secretmanager.SecretManagerServiceClient()
name = f"projects/{project_id}/secrets/{secret_id}/versions/latest"
response = client.access_secret_version(request={"name": name})
return response.payload.data.decode("UTF-8")
${{ secrets.NOM_SECRET }}references/secrets-list.md# Secrets — JAMAIS commiter
key.json
*.json.key
.env
.env.*
secrets/
credentials/
# Terraform state local
*.tfstate
*.tfstate.backup
.terraform/
*.tfvars
# Activer audit logs sur le projet
gcloud projects get-iam-policy TON_PROJECT_ID > policy.yaml
# Ajouter auditConfigs dans policy.yaml
gcloud projects set-iam-policy TON_PROJECT_ID policy.yaml
.gitignore inclut key.json et .envkey.json absent du repo GitHub📖 references/wif-setup.md — Configuration Workload Identity complète
📖 references/iam-policies.md — Politiques IAM par environnement
📖 references/secrets-management.md — Guide Secret Manager