Google IAM Terraform-Modul
Dies ist eine Sammlung von Submodulen, die die zerstörungsfreie Verwaltung mehrerer IAM-Rollen für Ressourcen auf der Google Cloud Platform erleichtern:
- Artefaktregistrierung IAM
- Audit-Konfiguration
- BigQuery IAM
- Rechnungskonten IAM
- Cloud Run Service IAM
- Benutzerdefinierte Rolle IAM
- DNS-Zone IAM
- Ordner IAM
- KMS-Kryptoschlüssel IAM
- KMS_Schlüsselringe IAM
- Organisationen IAM
- Projekte IAM
- Pubsub-Abonnements IAM
- Pubsub-Themen IAM
- Geheimmanager IAM
- Dienstkonten IAM
- Speicher-Buckets IAM
- Subnetze IAM
- Tag-Schlüssel IAM
- Tag-Werte IAM
- Secure Source Manager
Kompatibilität
Dieses Modul ist für die Verwendung mit Terraform 1.3+ gedacht und wurde mit Terraform 1.3+ getestet. Wenn Sie Inkompatibilitäten mit Terraform >=1.3 feststellen, öffnen Sie bitte ein Problem.
Upgrade
Zur Unterstützung bei Upgrades stehen die folgenden Leitfäden zur Verfügung:
- 4,0 -> 5,0
- 3,0 -> 4,0
- 2,0 -> 3,0
Verwendung
Vollständige Beispiele finden Sie im Beispielordner, die grundlegende Verwendung für die Rollenverwaltung in zwei Projekten ist jedoch wie folgt:
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] " ,
]
}
}
Das Modul bietet außerdem einen autorisierenden Modus, der alle Rollen entfernt, die nicht über Terraform zugewiesen wurden. Dies ist ein Beispiel für die Verwendung des autorisierenden Modus zum Verwalten des Zugriffs auf einen Speicher-Bucket:
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] " ,
]
}
}
Additive und autorisierende Modi
Die mode
steuert das Verhalten eines Submoduls. Standardmäßig ist sie auf „additiv“ eingestellt. Mögliche Optionen sind:
- Zusatz: Mitglieder zur Rolle hinzufügen, alte Mitglieder werden nicht aus dieser Rolle gelöscht.
- Maßgeblich: Legen Sie die Mitglieder der Rolle fest (einschließlich Entfernen nicht aufgeführter Rollen). Nicht aufgeführte Rollen sind nicht betroffen.
Im autorisierenden Modus übernimmt ein Submodul die vollständige Kontrolle über die im Modul aufgeführten IAM-Bindungen. Dies bedeutet, dass alle Mitglieder, die Rollen außerhalb des Moduls hinzugefügt wurden, bei der nächsten Ausführung von Terraform entfernt werden. Rollen, die nicht im Modul aufgeführt sind, bleiben davon jedoch unberührt.
Im additiven Modus lässt ein Submodul vorhandene Bindungen unberührt. Stattdessen werden alle im Modul aufgeführten Mitglieder dem vorhandenen Satz von IAM-Bindungen hinzugefügt. Die im Modul aufgeführten Mitglieder werden jedoch vollständig vom Modul kontrolliert. Das bedeutet, dass das Modul das Entfernen der Rollenbindung korrekt handhabt, wenn Sie über das Modul eine Bindung hinzufügen und diese später entfernen.
Vorbehalte
Referenzieren von Werten/Attributen aus anderen Ressourcen
Jedes Submodul führt Operationen an einigen Variablen durch, bevor es Änderungen an den IAM-Bindungen in GCP vornimmt. Aufgrund der Einschränkungen von for_each
(mehr Informationen), das in den Submodulen weit verbreitet ist, gibt es bestimmte Einschränkungen hinsichtlich der Art von dynamischen Werten, die Sie einem Submodul bereitstellen können:
- Dynamische Entitäten (z. B.
projects
) sind nur für eine Entität zulässig. - Wenn Sie zwei oder mehr Entitäten übergeben (z. B.
projects
), MUSS die Konfiguration statisch sein, was bedeutet, dass sie keines der Felder der anderen Ressourcen verwenden kann, um den Entitätsnamen abzurufen (dazu gehört auch das Abrufen der zufällig generierten Hashes über die random_id
Ressource). - Die Rollennamen selbst können niemals dynamisch sein.
- Mitglieder dürfen nur im
authoritative
Modus dynamisch sein.
IAM-Bindungen
Sie können die folgenden Ressourcentypen auswählen, um die IAM-Bindungen anzuwenden:
- Projekte (
projects
) - Organisationen(
organizations
) - Ordner (Variable
folders
) - Dienstkonten (Variable
service_accounts
) - Subnetze (Variable
subnets
) - Speicher-Buckets (Variable
storage_buckets
) - Pubsub-Themen (variable
pubsub_topics
) - Pubsub-Abonnements (Variable
pubsub_subscriptions
) - KMS-Schlüsselanhänger (Variable
kms_key_rings
) - KMS-Kryptoschlüssel (Variable
kms_crypto_keys
) - Geheimnisse des Secret Managers (
secrets
-Variable) - DNS-Zonen (Variable „
managed_zones
“) - Secure Source Manager (
entity_ids
und location
)
Legen Sie die angegebene Variable beim Modulaufruf fest, um die zu beeinflussenden Ressourcen auszuwählen. Denken Sie daran, die mode
festzulegen und genügend Berechtigungen zu erteilen, um auch die ausgewählte Ressource zu verwalten. Beachten Sie, dass die bindings
eine leere Map {}
akzeptiert, die als Argument übergeben wird, für den Fall, dass Ressourcen keine anzuwendenden IAM-Bindungen haben.
Anforderungen
Terraform-Plugins
- Terraform >= 0.13.0
- Terraform-Provider-Google 2.5
- Terraform-Provider-Google-Beta 2.5
Berechtigungen
Um ein Submodul auszuführen, müssen Sie über ein Dienstkonto mit einer entsprechenden Rolle zur Verwaltung von IAM für die entsprechende Ressource verfügen. Die geeignete Rolle unterscheidet sich je nach der Ressource, auf die Sie abzielen, wie folgt:
- Organisation:
- Organisationsadministrator: Zugriff zur Verwaltung aller zur Organisation gehörenden Ressourcen. Berechtigung zur Abrechnung oder Organisationsrollenverwaltung ist nicht enthalten.
- Benutzerdefiniert: Fügen Sie die Berechtigungen „resourcemanager.organizations.getIamPolicy“ und „resourcemanager.organizations.setIamPolicy“ hinzu.
- Projekt:
- Eigentümer: Voller Zugriff und alle Berechtigungen für alle Ressourcen des Projekts.
- Projekte IAM Admin: Ermöglicht Benutzern die Verwaltung von IAM-Richtlinien für Projekte.
- Benutzerdefiniert: Fügen Sie die Berechtigungen „resourcemanager.projects.getIamPolicy“ und „resourcemanager.projects.setIamPolicy“ hinzu.
- Ordner:
- Der Ordneradministrator: Alle verfügbaren Ordnerberechtigungen.
- Ordner-IAM-Administrator: Ermöglicht Benutzern die Verwaltung von IAM-Richtlinien für Ordner.
- Benutzerdefiniert: Fügen Sie die Berechtigungen „resourcemanager.folders.getIamPolicy“ und „resourcemanager.folders.setIamPolicy“ hinzu (müssen in der Organisation hinzugefügt werden).
- Dienstkonto:
- Dienstkontoadministrator: Dienstkonten erstellen und verwalten.
- Benutzerdefiniert: Fügen Sie die Berechtigungen „resourcemanager.organizations.getIamPolicy“ und „resourcemanager.organizations.setIamPolicy“ hinzu.
- Subnetzwerk:
- Projekt-Computing-Administrator: Vollständige Kontrolle über Compute Engine-Ressourcen.
- Projekt-Compute-Netzwerkadministrator: Volle Kontrolle über die Compute Engine-Netzwerkressourcen.
- Projektbenutzerdefiniert: Fügen Sie die Berechtigungen „compute.subnetworks.getIamPolicy“ und „compute.subnetworks.setIamPolicy“ hinzu.
- Aufbewahrungseimer:
- Speicheradministrator: Volle Kontrolle über GCS-Ressourcen.
- Storage Legacy Bucket Owner: Lese- und Schreibzugriff auf vorhandene Buckets mit Objektauflistung/-erstellung/-löschung.
- Benutzerdefiniert: Fügen Sie die Berechtigungen storage.buckets.getIamPolicy und storage.buckets.setIamPolicy hinzu.
- Pubsub-Thema:
- Pub/Sub-Administrator: Dienstkonten erstellen und verwalten.
- Benutzerdefiniert: Fügen Sie die Berechtigungen pubsub.topics.getIamPolicy und pubsub.topics.setIamPolicy hinzu.
- Pubsub-Abonnement:
- Pub/Sub-Administratorrolle: Dienstkonten erstellen und verwalten.
- Benutzerdefinierte Rolle: Fügen Sie die Berechtigungen pubsub.subscriptions.getIamPolicy und pubsub.subscriptions.setIamPolicy hinzu.
- Kms-Schlüsselanhänger:
- Besitzer: Voller Zugriff auf alle Ressourcen.
- Cloud KMS Admin: Ermöglicht die Verwaltung von Kryptoressourcen.
- Benutzerdefiniert: Fügen Sie die Berechtigungen cloudkms.keyRings.getIamPolicy und cloudkms.keyRings.getIamPolicy hinzu.
- KMS-Kryptoschlüssel:
- Besitzer: Voller Zugriff auf alle Ressourcen.
- Cloud KMS Admin: Ermöglicht die Verwaltung von Kryptoressourcen.
- Benutzerdefiniert: Fügen Sie die Berechtigungen cloudkms.cryptoKeys.getIamPolicy und cloudkms.cryptoKeys.setIamPolicy hinzu.
- Geheimmanager:
- Secret Manager Admin: Voller Zugriff zur Verwaltung von Secret Manager.
- Benutzerdefiniert: Fügen Sie die Berechtigungen „secretmanager.secrets.getIamPolicy“ und „secretmanager.secrets.setIamPolicy“ hinzu.
- DNS-Zone:
- DNS-Administrator: Voller Zugriff zur Verwaltung der DNS-Zone.
- Benutzerdefiniert: Fügen Sie die Berechtigungen dns.managedZones.setIamPolicy, dns.managedZones.list und dns.managedZones.getIamPolicy hinzu.
Installieren
Terraform
Stellen Sie sicher, dass Sie über die richtige Terraform-Version >= 1.3 verfügen
Terraform-Plugins
Stellen Sie sicher, dass Sie die kompilierten Plugins unter $HOME/.terraform.d/plugins/ haben.
- terraform-provider-google >= 5.37
- Terraform-Provider-Google-Beta >= 5.37
Weitere Informationen zum Kompilieren und Verwenden finden Sie auf den einzelnen Plugin-Seiten.