Alle Ressourcen in Ihrer Hierarchie auflisten

Ressourcen in Google Cloud sind in einer Hierarchie organisiert, wobei jeder Knoten (Organisationen, Ordner, Projekte usw.) einen Verweis auf seine übergeordnete Organisation hat. Sie können diese Referenz als Schlüsselfilterbegriff für Scans verwenden, um die Konsistenz von Ressourcensuchen zu verbessern.

Mit benutzerdefinierten Rollen können Sie Nutzern Berechtigungen gewähren. Diese Rollen funktionieren nach dem Prinzip der geringsten Berechtigung und enthalten im Allgemeinen nur die Berechtigungen, die für eine bestimmte Aufgabe mindestens erforderlich sind.

Dieses Schema kann nützlich sein, um verschiedene Nutzergruppen zu isolieren. Beispiele:

  • Ein großes Unternehmen mit Abteilungen, die keinen Zugriff auf die Ressourcen der jeweils anderen Abteilungen erhalten sollen
  • Auftragnehmer, die Berechtigungen für ein bestimmtes Projekt, aber nicht für andere Ressourcen erhalten sollen

Aufgrund ihrer eingeschränkten Berechtigungen können benutzerdefinierte Rollen jedoch dazu führen, dass beim Ausführen eines Listenvorgangs viele Ressourcen in Ihrer Hierarchie ausgelassen werden. Beim Ausführen von Suchanfragen als Nutzer, dem eine benutzerdefinierte Rolle zugewiesen wurde, kann es schwierig sein zu erkennen, warum bestimmte Ressourcen nicht angezeigt werden.

Damit Sie dieses Szenario vermeiden können, werden auf dieser Seite die Best Practices für die Auflistung aller Ressourcen beschrieben, die von der Resource Manager API in Ihrer Ressourcenhierarchie verwaltet werden. Sie können diese Anleitung verwenden, um benutzerdefinierte Audit-Prüfungen zu konfigurieren oder um über die Resource Manager API hinaus Ihre eigene Nutzungsweise anzupassen.

Alle Ressourcen auflisten

Wenn Sie Ihre Ressourcenhierarchie scannen, um alle Ressourcen aufzulisten, benötigen Sie strikt konsistente Ergebnisse. Wenn bei Ihrem Scan Ressourcen fehlen oder veraltete Ergebnisse angezeigt werden, kann es schwierig sein, festzustellen, ob ein Fehler aufgetreten ist. Damit Sie immer die genauesten und vollständigsten Ergebnisse erhalten, verwenden Sie ein Dienstkonto und führen Sie einen Scan auf folgende Weise durch:

  1. Gewähren Sie einem Dienstkonto die Berechtigungen list und get für Organisationen, Ordner und Projekte in der Organisationsressource.
  2. Wenn Sie Projekt- und Ordnerressourcen auflisten, geben Sie im Filterstring die übergeordnete Ressource an.
  3. Führen Sie die Methode projects.list() mit diesem Dienstkonto für jeden Ressourcentyp aus, den Sie finden möchten, sowie für alle Zwischenressourcen wie Ordner.

Beispiel für das Auflisten aller Ressourcen

Das folgende Beispiel zeigt, wie Sie alle Ressourcenknoten in Ihren Organisationen auflisten können:

organizations = CloudResourceManager.Organizations.Search()
projects = emptyList()

parentsToList = queueOf(organizations)
while (parent = parentsToList.pop()) {
  // NOTE: Don't forget to iterate over paginated results.
  // TODO: handle PERMISSION_DENIED appropriately.
  projects.addAll(CloudResourceManager.Projects.List(
      "parent.type:" + parent.type + " parent.id:" + parent.id))
  parentsToList.addAll(CloudResourceManager.Folders.List(parent))
}

Wenn Sie eine benutzerdefinierte Konfiguration vornehmen, können Sie auch Suchergebnisse mit aufnehmen, nach Bedarf die übergeordneten Ressourcen laden und gleichzeitig die Ausnahme PERMISSION_DENIED erkennen.

Ressourcen suchen

Wenn Sie eine Ressource suchen, die vor einiger Zeit erstellt wurde, können Sie den Scan mit Eventual Consistency anstelle von strikter Konsistenz ausführen. Beachten Sie, dass bei dieser Suchmethode einige Ressourcen aus dem Suchergebnis ausgelassen werden, insbesondere solche, die kürzlich geändert wurden. So suchen Sie Ressourcen:

  1. Verwenden Sie ein Dienstkonto mit der Berechtigung get für die Ressource, nach der Sie suchen.
  2. Führen Sie die Methode projects.list() mit diesem Dienstkonto aus.

Fehlerbehebung bei ausgelassenen Ressourcen

Wenn Sie ein Scan-Tool entwickeln, empfehlen wir die Verwendung der Berechtigungen list und get auf Organisationsebene. Dadurch vermeiden Sie Probleme, die verursacht werden, wenn der Nutzer nur Teilberechtigungen hat, was dazu führt, dass einige Ressourcen aus der Liste ausgelassen werden.

Wenn Sie eine benutzerdefinierte Konfiguration entwickeln, die Nutzerberechtigungen prüft, gibt es keine einfache Lösung. Wenn ein Nutzer keine Berechtigungen auf Organisationsebene hat, benötigt er für jede einzelne Ressource bestimmte Berechtigungen, damit sie angezeigt werden. Wenn einem Nutzer Berechtigungen für eine Ressource irgendwo in der Hierarchie fehlen, werden möglicherweise einige Ressourcen nicht angezeigt.

Wenn ein Nutzer die Berechtigung list, aber nicht die Berechtigung get für eine bestimmte Ressource hat, ist diese Ressource in der Google Cloud Console überhaupt nicht sichtbar. Die Ressource wird jedoch bei der Suche mit der API oder dem gcloud-Befehlszeilentool zurückgegeben, wenn die übergeordnete Ressource angegeben wird. Diese Diskrepanz zwischen der Google Cloud Console und anderen Methoden sorgt häufig für Verwirrung bei dem Versuch, die Ressourcenhierarchie zu scannen.

In den folgenden Diagrammen werden einige gängige Konfigurationen von Berechtigungen erläutert. Außerdem wird beschrieben, wie sie die Sichtbarkeit von Ressourcen bei einer Suche beeinflussen.

Alle Ressourcen auflisten

In diesem Beispiel werden alle erforderlichen Berechtigungen in der Organisationsressource erteilt. Daher ist beim Ausführen einer Liste oder Suche die gesamte Hierarchie sichtbar.

Fehlende Organisationsberechtigungen

Der Nutzer in diesem Beispiel hat alle erforderlichen Berechtigungen mit Ausnahme von resourcemanager.organizations.get, aber diese Berechtigungen gelten auf Ordnerebene. Durch diese Berechtigungslücke besteht vollständige Sichtbarkeit in der Liste oder Suche dieses Teils der Hierarchie, aber nicht in der anderen Hälfte.

Nur get-Berechtigung auf Projektebene

Dieses Beispiel zeigt, was ein Nutzer sieht, der die Berechtigung resourcemanager.projects.get nur auf Ordnerebene hat. Er kann die Projekte sehen, die in der Hierarchie diesem Ordner untergeordnet sind, aber nur über eine Suchanfrage. Bei Verwendung der Listenfunktion werden keine Ergebnisse zurückgegeben.

Nur get-Berechtigung auf Ordnerebene

Dieses Beispiel zeigt das gleiche Problem wie oben: Mit seinen Berechtigungen kann der Nutzer seine Ordnerressourcen nur über eine Suchanfrage finden. Bei Verwendung der Listenfunktion werden keine Ergebnisse zurückgegeben.

Unterschiedliche Berechtigungen:

Der Nutzer in diesem Beispiel hat in seiner gesamten Organisation verschiedene Berechtigungen. Er kann Ordner auf Organisationsebene auflisten, sodass er sie mit Suchanfragen findet, in denen die übergeordnete Ressource in der Hierarchie angegeben ist. Er kann Projektressourcen für einen Ordner auflisten, aber nicht für den anderen, und er hat die Berechtigung resourcemanager.projects.get für ein Projekt am Ende der Hierarchie.

Dies führt dazu, dass die Projekte auf der linken Seite dieser Ressourcenhierarchie nicht zurückgegeben werden. Er kann nur die Projekte der rechten Seite auflisten. Dazu muss er eine Suchanfrage stellen, in der die übergeordnete Ressource angegeben ist. In der Cloud Console ist nur ein Projekt sichtbar.

Nicht erkennbare Ressourcen

In diesem Beispiel kann der Nutzer die Organisationsressource abrufen und Projektressourcen auflisten. Dazu gibt er das in der Hierarchie übergeordnete Element an. Er ist jedoch nicht berechtigt, einen der Zwischenordner aufzulisten oder zu prüfen. Projekte können durchsucht werden, wenn der Nutzer zufällig die ID des jeweils übergeordneten Ordners kennt. Die Ordner sind für diesen Nutzer überhaupt nicht sichtbar. Daher kann er die ID nicht finden, falls er sie nicht bereits kennt. Die einzige Ressource, die in der Cloud Console angezeigt wird, ist die Organisation.

Bei der Gestaltung Ihrer benutzerdefinierten Konfiguration ist es wichtig, dass Sie Situationen wie die oben genannten berücksichtigen. Sie können eine Kombination aus Listen und Suchvorgängen verwenden, um die Ressourcenhierarchie darzustellen. Überlegen Sie sich auch, wie Sie den Nutzern mitteilen können, dass ihnen Berechtigungen fehlen, mit denen sie die gesamte Ressourcenhierarchie sehen könnten.