Aller au contenu

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
export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/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

Error: 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 :

gcloud config get-value universe/domain

Comparer avec la valeur configurée dans vos fichiers HCL, provider OpenTofu ou variables Ansible.