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. Sie können diese Anleitung verwenden, um benutzerdefinierte Audit-Prüfungen zu konfigurieren oder um über die Cloud Resource Manager API hinaus Ihre eigene Nutzungsweise anzupassen.
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:
- Gewähren Sie einem Dienstkonto die Berechtigungen
list
undget
für Organisationen, Ordner und Projekte in der Organisationsressource. - Wenn Sie Projekt- und Ordnerressourcen auflisten, geben Sie im Filterstring die übergeordnete Ressource an.
- 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 zum 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:
Klicken Sie in der Symbolleiste der Google Cloud Console auf Nach Ressourcen, Dokumenten, Produkten und mehr suchen und geben Sie
apps-script
ein.Wählen Sie unter Ressourcen den Ordner apps-script aus.
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:
- Verwenden Sie ein Dienstkonto mit der Berechtigung
get
für die Ressource, nach der Sie suchen. - Führen Sie die Methode
projects.search()
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 der Google Cloud CLI 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.
In diesem Beispiel werden alle erforderlichen Berechtigungen in der Organisationsressource erteilt. Daher ist beim Ausführen einer Liste oder Suche die gesamte Hierarchie sichtbar.
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.
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.
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.
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.
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.