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

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:
- google_project_iam_policy, um eine vollständige Richtlinie für das Projekt zu definieren.
- google_project_iam_binding, um alle Mitglieder einer einzelnen Rolle zu definieren.
- google_project_iam_member, um eine einzelne Rollenbindung für einen einzelnen Principal zu definieren. In diesem Blog werde ich eine Namenskonvention für jedes dieser Elemente vorstellen.
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:
| Auftraggeber | Name der Ressource |
|---|---|
| allUsers | alle_Benutzer |
| allAuthenticatedUsers | alle_authentifizierten_Benutzer |
| Domain:binx.io | binx_io |
| Domain:xebia.com | xebia_com |
| group:admin@binx.io | admin_binx_io |
| group:admin@xebia.com | admin_xebia_com |
| user:mark@binx.io | mark_binx_io |
| user:mark@xebia.com | mark_xebia_com |
| serviceAccount:iap-accessor@my-project.iam-gserviceaccount.com | iap_accessor |
| serviceAccount:iap-accessor@other-project.iam-gserviceaccount.com | iap_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
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



