Module Terraform IAM de Google
Il s'agit d'un ensemble de sous-modules qui facilitent la gestion non destructive de plusieurs rôles IAM pour les ressources sur Google Cloud Platform :
- Registre des artefacts IAM
- Configuration d'audit
- IAM BigQuery
- Comptes de facturation IAM
- IAM du service Cloud Run
- IAM de rôle personnalisé
- IAM de la zone DNS
- Dossiers IAM
- Clés de chiffrement KMS IAM
- KMS_Porte-clés IAM
- Organisations IAM
- Projets IAM
- Abonnements Pubsub IAM
- Sujets Pubsub IAM
- Gestionnaire de secrets IAM
- Comptes de service IAM
- Seaux de stockage IAM
- Sous-réseaux IAM
- Clés de balise IAM
- Valeurs des balises IAM
- Gestionnaire de sources sécurisées
Compatibilité
Ce module est destiné à être utilisé avec Terraform 1.3+ et testé avec Terraform 1.3+. Si vous constatez des incompatibilités en utilisant Terraform >=1.3, veuillez ouvrir un problème.
Mise à niveau
Les guides suivants sont disponibles pour vous aider lors des mises à niveau :
- 4.0 -> 5.0
- 3.0 -> 4.0
- 2.0 -> 3.0
Usage
Des exemples complets se trouvent dans le dossier Exemples, mais l'utilisation de base est la suivante pour gérer les rôles sur deux projets :
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
Le module propose également un mode faisant autorité qui supprimera tous les rôles non attribués via Terraform. Voici un exemple d'utilisation du mode faisant autorité pour gérer l'accès à un bucket de stockage :
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
Modes additifs et faisant autorité
La variable mode
contrôle le comportement d'un sous-module, par défaut elle est définie sur "additif", les options possibles sont :
- additif : ajoutez des membres au rôle, les anciens membres ne sont pas supprimés de ce rôle.
- faisant autorité : définissez les membres du rôle (y compris en supprimant ceux qui ne sont pas répertoriés), les rôles non répertoriés ne sont pas affectés.
En mode faisant autorité, un sous-module prend le contrôle total des liaisons IAM répertoriées dans le module. Cela signifie que tous les membres ajoutés aux rôles en dehors du module seront supprimés lors de la prochaine exécution de Terraform. Cependant, les rôles non répertoriés dans le module ne seront pas affectés.
En mode additif, un sous-module laisse les liaisons existantes inchangées. Au lieu de cela, tous les membres répertoriés dans le module seront ajoutés à l'ensemble existant de liaisons IAM. Cependant, les membres répertoriés dans le module sont entièrement contrôlés par le module. Cela signifie que si vous ajoutez une liaison via le module et que vous la supprimez ultérieurement, le module gérera correctement la suppression de la liaison de rôle.
Mises en garde
Référencer des valeurs/attributs à partir d’autres ressources
Chaque sous-module effectue des opérations sur certaines variables avant d'apporter des modifications aux liaisons IAM dans GCP. En raison des limitations de for_each
(plus d'informations), qui est largement utilisé dans les sous-modules, il existe certaines limitations quant au type de valeurs dynamiques que vous pouvez fournir à un sous-module :
- Les entités dynamiques (par exemple
projects
) ne sont autorisées que pour 1 entité. - Si vous transmettez 2 entités ou plus (par
projects
), la configuration DOIT être statique, ce qui signifie qu'elle ne peut utiliser aucun des champs des autres ressources pour obtenir le nom de l'entité (cela inclut l'obtention des hachages générés aléatoirement via random_id
ressource). - Les noms de rôle eux-mêmes ne peuvent jamais être dynamiques.
- Les membres ne peuvent être dynamiques qu'en mode
authoritative
.
Liaisons IAM
Vous pouvez choisir les types de ressources suivants pour appliquer les liaisons IAM :
- Projets (variable
projects
) - Organisations (variable
organizations
) - Dossiers (variable
folders
) - Comptes de service (variable
service_accounts
) - Sous-réseaux (variable
subnets
) - Buckets de stockage (variable
storage_buckets
) - Sujets Pubsub (variable
pubsub_topics
) - Abonnements Pubsub (variable
pubsub_subscriptions
) - Porte-clés Kms (variable
kms_key_rings
) - Clés cryptographiques Kms (variable
kms_crypto_keys
) - Secrets de Secret Manager (variable de
secrets
) - Zones DNS (variable
managed_zones
) - Secure Source Manager (
entity_ids
et variable location
)
Définissez la variable spécifiée sur l'appel du module pour choisir les ressources à affecter. N'oubliez pas de définir la variable mode
et d'accorder suffisamment d'autorisations pour gérer également la ressource sélectionnée. Notez que la variable bindings
accepte une map {}
vide transmise comme argument dans le cas où les ressources n'ont pas de liaisons IAM à appliquer.
Exigences
Plugins Terraform
- Terraforme >= 0.13.0
- fournisseur-terraform-google 2.5
- terraform-provider-google-bêta 2.5
Autorisations
Afin d'exécuter un sous-module, vous devez disposer d'un compte de service avec un rôle approprié pour gérer IAM pour la ressource applicable. Le rôle approprié diffère selon la ressource que vous ciblez, comme suit :
- Organisation:
- Administrateur de l'organisation : accès permettant d'administrer toutes les ressources appartenant à l'organisation et n'inclut pas les privilèges de facturation ou d'administration des rôles dans l'organisation.
- Personnalisé : ajoutez les autorisations Resourcemanager.organizations.getIamPolicy et Resourcemanager.organizations.setIamPolicy.
- Projet:
- Propriétaire : accès complet et toutes les autorisations pour toutes les ressources du projet.
- Administrateur IAM des projets : permet aux utilisateurs d'administrer les politiques IAM sur les projets.
- Personnalisé : ajoutez les autorisations Resourcemanager.projects.getIamPolicy et Resourcemanager.projects.setIamPolicy.
- Dossier:
- L'administrateur du dossier : toutes les autorisations de dossier disponibles.
- Administrateur IAM des dossiers : permet aux utilisateurs d'administrer les stratégies IAM sur les dossiers.
- Personnalisé : ajoutez les autorisations Resourcemanager.folders.getIamPolicy et Resourcemanager.folders.setIamPolicy (doivent être ajoutées dans l'organisation).
- Compte de services :
- Administrateur de compte de service : créez et gérez des comptes de service.
- Personnalisé : ajoutez les autorisations Resourcemanager.organizations.getIamPolicy et Resourcemanager.organizations.setIamPolicy.
- Sous-réseau :
- Administrateur de calcul du projet : contrôle total des ressources Compute Engine.
- Administrateur du réseau de calcul du projet : contrôle total des ressources réseau Compute Engine.
- Projet personnalisé : ajoutez les autorisations Compute.subnetworks.getIamPolicy et Compute.subnetworks.setIamPolicy.
- Seau de stockage :
- Administrateur de stockage : contrôle total des ressources GCS.
- Propriétaire du compartiment de stockage hérité : accès en lecture et en écriture aux compartiments existants avec liste/création/suppression d'objets.
- Personnalisé : ajoutez les autorisations storage.buckets.getIamPolicy et storage.buckets.setIamPolicy.
- Sujet PubSub :
- Administrateur Pub/Sub : créez et gérez des comptes de service.
- Personnalisé : ajoutez les autorisations pubsub.topics.getIamPolicy et pubsub.topics.setIamPolicy.
- Abonnement Pubsub :
- Rôle d'administrateur Pub/Sub : créer et gérer des comptes de service.
- Rôle personnalisé : ajoutez les autorisations pubsub.subscriptions.getIamPolicy et pubsub.subscriptions.setIamPolicy.
- Porte-clés Kms :
- Propriétaire : accès complet à toutes les ressources.
- Administrateur Cloud KMS : permet la gestion des ressources de chiffrement.
- Personnalisé : ajoutez les autorisations cloudkms.keyRings.getIamPolicy et cloudkms.keyRings.getIamPolicy.
- Clé cryptographique Kms :
- Propriétaire : accès complet à toutes les ressources.
- Administrateur Cloud KMS : permet la gestion des ressources cryptographiques.
- Personnalisé : ajoutez les autorisations cloudkms.cryptoKeys.getIamPolicy et cloudkms.cryptoKeys.setIamPolicy.
- Gestionnaire de secrets :
- Administrateur Secret Manager : accès complet pour administrer Secret Manager.
- Personnalisé : ajoutez les autorisations secretmanager.secrets.getIamPolicy et secretmanager.secrets.setIamPolicy.
- Zone DNS :
- Administrateur DNS : Accès complet pour administrer la zone DNS.
- Personnalisé : ajoutez les autorisations dns.managedZones.setIamPolicy, dns.managedZones.list et dns.managedZones.getIamPolicy.
Installer
Terraforme
Assurez-vous d'avoir la bonne version de Terraform >= 1.3
Plugins Terraform
Assurez-vous d'avoir les plugins compilés sur $HOME/.terraform.d/plugins/
- fournisseur-terraform-google >= 5.37
- terraform-provider-google-beta >= 5.37
Consultez la page de chaque plugin pour plus d’informations sur la façon de les compiler et de les utiliser.