Souveraineté & Universe Domain¶
Configuration de Google Cloud Platform pour les environnements souverains (Trusted Partner Sovereignty).
Trusted Partner Sovereignty¶
GCP propose un modèle de souveraineté des données via le programme Trusted Partner Sovereignty. Ce modèle permet d'opérer GCP dans un environnement isole, avec des garanties de localisation des données, de contrôle des accès et de conformité reglementaire.
Universe Domain¶
Dans un environnement GCP standard, les APIs sont accessibles via googleapis.com. Dans un environnement souverain, les APIs utilisent un domaine différent appelé universe domain.
| Environnement | Universe domain |
|---|---|
| GCP standard | googleapis.com |
| Souverain (exemple) | my-universe.gcp.example.com |
Placeholder
Dans cette documentation, nous utilisons my-universe.gcp.example.com comme universe domain. Remplacez-le par votre domaine réel.
Configuration gcloud¶
gcloud config set universe/domain my-universe.gcp.example.com
gcloud config set project MON-PROJET-ID
Impact sur les outils IaC¶
Le universe_domain doit être configuré dans chaque outil IaC qui interagit avec les APIs GCP :
| Outil | Configuration | Tutoriel |
|---|---|---|
| Packer | Variable universe_domain dans le source googlecompute | Packer |
| OpenTofu | Attribut universe_domain dans le provider google | OpenTofu |
| Ansible | Modules google.cloud.* avec endpoints custom | Ansible |
Cohérence
Le universe_domain doit être identique dans gcloud, Packer, OpenTofu et Ansible. Une incoherence provoque l'erreur universe domain mismatch.
Workload Identity Fédération (WIF)¶
Workload Identity Fédération permet à un service externe (CI/CD, outil IaC) de s'authentifier aupres de GCP sans clé JSON, en echangeant un token d'identité externe contre un token GCP.
Pourquoi WIF ?¶
| Clé JSON | WIF | |
|---|---|---|
| Secret a stocker | Oui (fichier JSON) | Non |
| Rotation nécessaire | Oui | Non (token éphémère) |
| Risque de fuite | Élevé | Faible |
| Recommandation | Dev/test uniquement | Production |
Mise en place¶
1. Créer un pool d'identité¶
gcloud iam workload-identity-pools create mon-pool \
--location="global" \
--display-name="Mon Workload Identity Pool"
2. Créer un provider OIDC¶
gcloud iam workload-identity-pools providers create-oidc mon-provider \
--location="global" \
--workload-identity-pool="mon-pool" \
--issuer-uri="https://votre-issuer.example.com" \
--attribute-mapping="google.subject=assertion.sub"
3. Lier le service account¶
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud iam service-accounts add-iam-policy-binding \
mon-service@${PROJECT_ID}.iam.gserviceaccount.com \
--role="roles/iam.workloadIdentityUser" \
--member="principalSet://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/mon-pool/*"
4. Générer le fichier de credentials¶
gcloud iam workload-identity-pools create-cred-config \
projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/mon-pool/providers/mon-provider \
--service-account=mon-service@${PROJECT_ID}.iam.gserviceaccount.com \
--output-file=wif-config.json
Avantage WIF
Pas de clé a faire tourner, pas de secret a stocker. Le token est éphémère et généré à la volee.
Troubleshooting¶
Universe domain mismatch¶
Cause : le universe_domain configuré dans l'outil (Packer, OpenTofu) ne correspond pas a celui de gcloud ou du service account.
Résolution : vérifier la cohérence :
Comparer avec la valeur configurée dans vos fichiers HCL, provider OpenTofu ou variables Ansible.