Blog

So benennen Sie die IAM-Ressourcen Ihres Google-Projekts in Terraform

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 17, 2025
3 Minuten

Die Benennung von Terraform-Ressourcen ist eine ziemliche Herausforderung. In diesem Blog stelle ich Ihnen meine Richtlinien für die Benennung von Google Project IAM Policy-Ressourcen in Terraform vor. Wie Sie wissen, gibt es Google IAM-Ressourcen in Terraform in drei Varianten:

Benennungskonvention für google_project_iam_policy

Diese IAM-Richtlinie für ein Google-Projekt ist ein Singleton. Wählen Sie einen Namen, der dies widerspiegelt, wir empfehlen default:

resource "google_project_iam_policy" "default" {
   policy_data = ...
}

Benennungskonvention für google_project_iam_binding

Der Name für eine google_project_iam_binding ist der Name der Rolle, abzüglich des Präfixes roles und umgewandelt in snake case. Zum Beispiel:

resource "google_project_iam_binding" "iap_tunnel_resource_accessor" {
   role    = "roles/iap.tunnelResourceAccessor"
   members = [
     ...
   ]
}

Da sich eine google_project_iam_binding immer auf eine bestimmte Rolle bezieht, liefert das Präfix roles keine zusätzlichen Informationen.

Benennungskonvention für google_project_iam_member

Der Name für ein google_project_iam_member ist der Name des Principals, umgewandelt in snake case. Die folgende Tabelle enthält eine Reihe von Beispielen:

AuftraggeberName der Ressource
allUsersalle_Benutzer
allAuthenticatedUsersalle_authentifizierten_Benutzer
Domain:binx.iobinx_io
Domain:xebia.comxebia_com
group:admin@binx.ioadmin_binx_io
group:admin@xebia.comadmin_xebia_com
user:mark@binx.iomark_binx_io
user:mark@xebia.commark_xebia_com
serviceAccount:iap-accessor@my-project.iam-gserviceaccount.comiap_accessor
serviceAccount:iap-accessor@other-project.iam-gserviceaccount.comiap_accessor_other_project


Wenn es einen Namensraumkonflikt gibt, stellen Sie den Typnamen voran. Wenn es zum Beispiel einen Benutzer admin und ein Dienstkonto mit demselben Namen gibt, verwenden Sie user_admin und service_account_admin. Außerdem verwenden wir das for_each-Konstrukt, um die Rollen zu verknüpfen, um das Durcheinander zu minimieren, wie in den folgenden Beispielen gezeigt:

resource "google_project_iam_member" "mark_van_holsteijn_binx_io" {
   for_each = toset([ 
     "roles/iap.tunnelResourceAccessor", 
     "roles/compute.osLogin",
   ])

   member = "user:markvanholsteijn@binx.io"
   role   = each.key
}

resource "google_project_iam_member" "iap_accessor" {
   for_each = toset([ 
     "roles/iap.tunnelResourceAccessor", 
     "roles/compute.osLogin",
   ])
   member = "serviceAccount:iap-accessor@my-project.iam.gserviceaccount.com"
   role   = each.key
}

Da ein google_project_iam_member immer für einen bestimmten Auftraggeber ist, ist es gut, den Namen des Auftraggebers als Bezeichner für die Ressource zu haben.

Benennungskonvention für ein einzelnes google_project_iam_member

Wenn Sie eine einzelne Mitgliedsbindung angeben möchten, verwenden Sie den Namen des Principals, gefolgt von dem in Großbuchstaben umgewandelten Rollennamen. Zum Beispiel:

resource "google_project_iam_member" "iap_accessor_iap_tunnel_resource_accessor" {
   member = "serviceAccount:iap-accessor@my-project.iam.gserviceaccount.com"
   role   = "roles/iap.tunnelResourceAccessor"
}

Wir raten von dieser Form ab, da sie sehr ausführlich ist. Außerdem ist es höchst unwahrscheinlich, dass ein Principal nur an eine einzige Rolle gebunden sein muss.

Welche Ressource soll verwendet werden?

Welche Ressource verwenden Sie also in der Praxis? Natürlich ist die google_project_iam_policy die sicherste und eindeutigste Spezifikation. Das Problem dabei ist jedoch, dass sie nicht gut mit Modulen zusammenarbeitet, die eigene Sicherheitsbindungen hinzufügen möchten. Dasselbe Problem kann in geringerem Maße auch bei der google_project_iam_binding auftreten. Wir empfehlen daher, die Ressource google_project_iam_member zu verwenden, um die google IAM-Richtlinien in Ihrem Projekt zu definieren.

Fazit

Wir empfehlen Ihnen, die Ressource google_project_iam_member zu verwenden, um Ihre IAM-Richtliniendefinitionen in Terraform zu definieren. Der Name der Ressource ist der Name des Principals, dem die Rollen zugewiesen werden. Die Rollen werden mit dem for_each-Konstrukt gebunden.


Bild von PublicDomainPictures von Pixabay

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.