Alle Projekte und Ordner 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 Cloud Resource Manager API in Ihrer Ressourcenhierarchie verwaltet werden. Ich anhand dieser Anleitung benutzerdefinierte Audit-Prüfungen konfigurieren oder eigene erstellen User Experience zusätzlich zur Cloud Resource Manager API.

Alle Ressourcenknoten 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 Ressourcenknoten

Der folgende Pseudocode zeigt, wie Sie alle Ressourcenknoten in Ihren Organisationen auflisten können:

organizations = organizations.search()
projects = emptyList()

parentsToList = queueOf(organizations)
while (parent = parentsToList.pop()) {
  // TODO: Iterate over paginated results as needed.
  // TODO: Handle PERMISSION_DENIED appropriately.
  projects.addAll(projects.list(parent.type, parent.id))
  parentsToList.addAll(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.

Latenz bei „gcloud projects list“ verringern

Wenn die gcloud projects list-Abfrage fehlschlägt oder zu lange dauert, ist die Anzahl der zurückzugebenden Google Cloud-Projekte möglicherweise zu groß. Um dieses Problem zu beheben, wenden Sie die Flags filter und page-size auf den Befehl gcloud projects list an.

Weitere Informationen zu den Flags, die Sie Ihrem gcloud projects list-Befehl hinzufügen können, finden Sie unter gcloud projects list.

Beispiel für das Ausschließen von Apps Script-Projekten

Die häufigste Ursache für Abfragefehler oder -latenzen ist eine hohe Anzahl von Apps Script-Projekten innerhalb einer Organisation. Mit dem folgenden Befehl können Sie Apps Script-Projekte aus der Projektliste ausschließen und die Anzahl der zurückgegebenen Ressourcen pro Seite begrenzen.

gcloud projects list --filter="NOT parent.id: 'APPS_SCRIPT_FOLDER_ID' "--page-size='30'

Apps Script-Ordner-ID abrufen

So finden Sie Ihre Apps Script-Ordner-ID:

  1. Klicken Sie in der Symbolleiste der Google Cloud Console auf Suchen Sie nach Ressourcen, Dokumenten, Produkten und mehr und geben Sie apps-script ein.

    Zur Google Cloud Console

  2. Wählen Sie unter Ressourcen den Ordner apps-script aus.

  3. Kopieren Sie unter Ordner-ID die Ordner-ID.

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 den projects.search() mit diesem Dienstkonto an.

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 in einer Suche mithilfe des API oder Google Cloud CLI, die das übergeordnete Element der Ressource angibt. Diese Diskrepanz zwischen der Google Cloud Console und anderen Methoden ist häufig unklar wenn Sie versuchen, 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 Google 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 Google 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.