Tags und bedingter Zugriff

Auf dieser Seite wird beschrieben, wie Sie Tags mit Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) verwenden, um den Zugriff auf Ihre Google Cloud-Ressourcen zu steuern.

Weitere Informationen zu Tags – Übersicht.

Übersicht über Tags

Ein Tag ist ein Schlüssel/Wert-Paar, das an eine Google Cloud-Ressource angehängt ist. Sie können IAM-Rollen bedingt gewähren oder IAM-Berechtigungen ablehnen, je nachdem, ob eine Ressource ein bestimmtes Tag hat.

Ressourcen übernehmen Tag-Werte von ihrer übergeordneten Organisation, ihren Ordnern und ihrem Projekt. Mit Tags können Sie den Zugriff auf jede Google Cloud-Ressource verwalten.

Im Folgenden sind einige gängige Anwendungsfälle für die Verwaltung des Zugriffs mit Tags aufgeführt:

  • Entwicklungs-, Staging- und Produktionsumgebungen. Sie können beispielsweise die Tags environment: dev zu Ihrer Entwicklungsumgebung und environment: prod zu Ihrer Produktionsumgebung hinzufügen.
  • Komponententypen: Für die Batchverarbeitung können Sie beispielsweise die Tags component: frontend zu Frontend-Ressourcen und component: batch für Ressourcen zur Batchverarbeitung hinzufügen.
  • Projektnamen: Wenn Ihr Team beispielsweise an einem Projekt mit dem Codenamen Atlas arbeitet, können Sie den Entwicklungsressourcen des Teams das Tag project: atlas hinzufügen.

Tag-Definitionen und Kennungen

Bevor Sie Tags an Ressourcen anhängen, müssen Sie den Schlüssel für das Tag sowie die vom Tag zulässigen Werte definieren. Sie können diese Definitionen auf Organisations- oder Projektebene erstellen. Tagdefinitionen werden mit dem Resource Manager verwaltet. Weitere Informationen finden Sie unter Neues Tag erstellen und definieren.

Jeder Tag-Schlüssel und -Wert hat verschiedene IDs:

  • Eine permanente ID, die global eindeutig ist und nicht wiederverwendet werden kann. Ein Tag-Schlüssel könnte beispielsweise die permanente ID tagKeys/123456789012 und ein Tag-Wert die permanente ID tagValues/567890123456 haben.
  • Kurzname: Der Kurzname für jeden Schlüssel muss innerhalb Ihrer Organisation eindeutig sein. Der Kurzname für jeden Wert muss für den zugehörigen Schlüssel eindeutig sein. Ein Tag-Schlüssel könnte beispielsweise den Kurznamen env und ein Tag-Wert den Kurznamen prod haben.
  • Ein Namespace-Name, mit dem die numerische ID Ihrer Organisation dem Kurznamen eines Tag-Schlüssels hinzugefügt wird. Ein Tag-Schlüssel könnte beispielsweise den Namespace-Namen 123456789012/env haben. Hier erfahren Sie, wie Sie Ihre Organisations-ID abrufen.

Wie auf dieser Seite beschrieben, können Sie Bedingungen erstellen, um Zugriff auf Tags zu gewähren, nachdem Sie Tags an eine Ressource angehängt haben. Um eine Bedingung zu schreiben, müssen Sie auswählen, welcher Kennungstyp in der Bedingung verwendet werden soll. Die folgenden Richtlinien helfen Ihnen bei der Auswahl:

  • Zum Testen von Tags empfehlen wir, den Namespace mit Namen (für Schlüssel) und den Kurznamen (für Werte) zu verwenden. Diese Kennungen sind einfacher zu verstehen und zu merken, vor allem, wenn Sie beginnen.
  • Wenn Sie Ihre Konfiguration deklarativ verwalten, sollten Sie mit einem Tool wie Terraform in etwa den Namespace-Namen (für Schlüssel) und den Kurznamen (für Werte) verwenden. Sie können diese Kennungen im Laufe der Zeit wiederverwenden. Das bedeutet, dass ein deklaratives Tool sie löschen und neu erstellen kann und Ihre Bedingungen weiterhin funktionieren.

    Dieser Ansatz hat einen Kompromiss: Angenommen, Sie löschen einen Tag-Schlüssel oder -Wert und erstellen dann einen neuen Schlüssel oder Wert mit demselben Namen, aber in einer anderen Bedeutung. Wenn die Bedingung auf den Namespace- oder Kurznamen verweist, gilt die Bedingung weiterhin für den neuen Schlüssel oder Wert.

    In einigen Fällen kann dieses Verhalten dazu führen, dass Hauptkonten Zugriff erhalten, was Sie nicht beabsichtigt hatten.

  • Zur Reduzierung des Risikos sollten Sie dauerhafte IDs verwenden, die nie wiederverwendet werden können.

    Grund dafür, dass permanente IDs Risiko minimieren: Angenommen, Sie löschen einen Tag-Schlüssel oder -Wert und erstellen dann einen neuen Schlüssel oder Wert mit demselben Namen, aber in einer anderen Bedeutung. Wenn die Bedingung auf die permanente ID verweist, gilt die Bedingung nicht für den neuen Schlüssel oder Wert. Dies führt dazu, dass Hauptkonten weniger Zugriff erhalten, was sie eigentlich nicht beabsichtigt hatten.

    Ein Nachteil: Wenn Sie Schlüssel und Werte löschen und neu erstellen und den Zugriff von Hauptkonten beibehalten möchten, müssen Sie auch Ihre Zulassungsrichtlinien aktualisieren, damit sie auf die neuen permanenten IDs verweisen.

Zugriff auf getaggte Ressourcen

Mithilfe von Tags mit IAM-Bedingungen können Sie eine Rolle bedingt gewähren, je nachdem, welche Tags von einer Ressource angehängt oder übernommen werden. Wenn eine Bedingung den Wert true ergibt, wird der Zugriff gewährt. Andernfalls wird kein Zugriff gewährt. Weitere Informationen finden Sie in der Übersicht über IAM-Bedingungen.

In den folgenden Abschnitten werden Beispiele von Bedingungsausdrücken gezeigt, mit denen die Tags für eine Ressource überprüft werden. Die Bedingung ruft unterschiedliche Funktionen auf, je nachdem, ob die permanente ID oder der Kurzname geprüft wird. Weitere Informationen zu diesen Funktionen finden Sie unter Ressourcen-Tags.

Bedingungen mit permanenten IDs

Diese Bedingung gewährt eine Rolle für Ressourcen mit dem Tag tagKeys/123456789012: tagValues/567890123456:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

Diese Bedingung gewährt eine Rolle für Ressourcen, die ein beliebiges Tag mit dem Schlüssel tagKeys/123456789012 haben, unabhängig vom Wert:

resource.hasTagKeyId('tagKeys/123456789012')

Diese Bedingung gewährt eine Rolle für Ressourcen, die sowohl das Tag tagKeys/123456789012: tagValues/567890123456 als auch jedes Tag haben, das den Schlüssel tagKeys/987654321098 verwendet:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

Bedingungen mit Namespace-Namen und Kurznamen

Diese Bedingung gewährt eine Rolle für Ressourcen mit dem Tag env: prod, was darauf hinweist, dass sich die Ressource in einer Produktionsumgebung befindet:

resource.matchTag('123456789012/env', 'prod')

Diese Bedingung gewährt eine Rolle für Ressourcen, die ein beliebiges Tag mit dem Schlüssel env haben, unabhängig vom Wert:

resource.hasTagKey('123456789012/env')

Diese Bedingung gewährt eine Rolle für Ressourcen, die sowohl das Tag env: prod als auch ein beliebiges Tag haben, das den Schlüssel project verwendet:

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

Nächste Schritte