Blog

Der einfachste Weg, Ihre Cloud-Konfiguration zu analysieren: select * from cloud

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 14, 2025
5 Minuten

In diesem Blog möchten wir Sie dazu inspirieren, Steampipe für die Analyse Ihrer Cloud-Konfiguration zu verwenden. Steampipe ist elegant, schnell und funktioniert mit jeder API!

Bei der Analyse von Cloud-Konfigurationen beginnen Sie oft damit, die Konsole zu untersuchen, um zu verstehen, was dort vorhanden ist. Sobald Sie diese verstanden haben, können Sie einige Shell-Skripte verwenden. Obwohl Shell-Skripte für einfache Abfragen gut funktionieren, werden sie schnell komplex, wenn es um Ressourcenbeziehungen geht. Hier kommt Steampipe ins Spiel: Steampipe ermöglicht den Zugriff auf Ihre Cloud-Ressourcenkonfigurationen über eine einfache alte PostgreSQL-Engine!

Analysieren Sie Ihre Cloud-Konfiguration

Nehmen wir an, Sie möchten überprüfen, ob alle Google Pub/Sub-Konfigurationen in Ihrem Unternehmen stabil sind. Das bedeutet:

  • Jedes Thema hat mindestens ein Abonnement, um zu verhindern, dass Nachrichten verschwinden.
  • Jedes Abonnement hat ein Deadletter-Thema, das sicherstellt, dass fehlgeschlagene Nachrichten nicht verloren gehen.
  • Jedes Abonnement verfügt über eine exponentielle Backoff-Konfiguration für Wiederholungsversuche, die schnelle Wiederholungsversuche verhindert.

Jedes Thema hat ein Abonnement - Shell-Skript

Schauen wir uns die Implementierung der ersten Prüfung an: ob jedes Thema mindestens ein Abonnement hat. Laut chatGPT wird das Shell-Skript wie folgt aussehen:

projects=$(gcloud projects list --filter="parent.type:organization AND parent.id:$ORG_ID" --format="value(projectId)")
for project in $projects; do
    topics=$(gcloud pubsub topics list --project="$project" --format="value(name)")
    if [ -z "$topics" ]; then
        # No topics found in project: $project
        continue
    fi

    for topic in $topics; do
        subscriptions=$(gcloud pubsub subscriptions list --project="$project" --filter="topic:$topic" --format="value(name)")
        if [ -z "$subscriptions" ]; then
            echo "$topic"
        fi
    done
done

Das sieht korrekt aus. Lassen Sie uns das ausführen:

$ time ./print-topics-without-subscriptions | tee topics-without-subscriptions.out
Topic projects/xyzabcdf/topics/custodian-auto-audit-notify-on-disallowed-services does not have any subscriptions.
Topic projects/ladilada/topics/cloud-builds does not have any subscriptions.
Topic projects/somehere/topics/bucket-events does not have any subscriptions.
....
./print-topics-without-subscriptions  41.29s user 8.21s system 24% cpu 3:23.29 total

$ wc -l topics-without-subscriptions.out 
      63 topics-without-subscriptions.out

Es fand über 63 Themen ohne Abonnement, deren Abruf mehr als drei Minuten dauerte. Lassen Sie uns sehen, wie das mit steampipe funktioniert.

Steampipe installieren

Installieren Sie zunächst Steampipe und das Google Cloud Platform-Plugin:

$ brew install turbot/tap/steampipe
$ steampipe plugin install gcp 

erzeugen Sie die Steampipe-Konfiguration für gcp

Führen Sie das folgende Skript aus, um eine Steampipe-Konfiguration zu generieren, mit der Sie alle Projekte in Ihrer Google-Organisation abfragen und die GCP-Plugin-Konfiguration unter ~/.steampipe/config/gcp.spc ersetzen können:

#!/bin/bash

export org_id=$1
[[ -z $org_id ]] && echo "Usage: generate-gcp-org-steampipe-config <org-id>" && exit 1

projects=$(gcloud projects list 
  --filter="parent.type:organization AND parent.id:org_id" 
   --format="value(projectId)")

cat<<!
connection "gcp_all" {
  plugin = "gcp"
  type        = "aggregator"
  connections = ["gcp_*"]
}
!

for project in $projects; do
  cat <<!
connection gcp_$(sed -e 's/[^a-zA-Z0-9]/_/g' <<< $project) {
  plugin = "gcp"
  project = "$project"
}
!
done

Jetzt sind Sie bereit, das einfache alte SQL zu verwenden!

Jedes Thema hat ein Abonnement - Steampipe

Die PostgreSQL-Abfrage, um alle Themen ohne Abonnement zu finden, sehen Sie unten:

select * from gcp_all.gcp_pubsub_topic topic
where not exists ( 
  select '' from gcp_all.gcp_pubsub_subscription sub
   where ('https://pubsub.googleapis.com/v1/' || sub.topic) = topic.self_link
) 

Um diese Abfrage auszuführen, geben Sie ein:

$ time steampipe query topics-without-subscriptions.sql --output json > topics-without-subscriptions.json
steampipe query topics-without-subscriptions.sql --output json >   0.07s user 0.12s system 46% cpu 0.390 total
$ jq '.|length' topics-without-subscriptions.json
63

Hier erhalten Sie also die gleiche Antwort, aber 200x so schnell! Natürlich können Sie jetzt auch SQL zum Zählen verwenden:

select count(*) as total, 
       count(sub.name) as with_subs,
       count(sub.name)*100/count(*)  as percentage
from gcp_all.gcp_pubsub_topic topic 
left outer join gcp_all.gcp_pubsub_subscription sub
on ('https://pubsub.googleapis.com/v1/' || sub.topic) = topic.self_link

In unserem Fall zeigt es uns, dass nur 7% aller Themen ein Abonnement haben.

Jedes Abonnement hat ein totes Thema - steampipe

Um alle Abonnements zu finden, die keinen toten Buchstaben enthalten, verwenden Sie die folgende Abfrage:

select * from gcp_all.gcp_pubsub_subscription
where dead_letter_policy_topic is null
and name not like 'dead-letter-%'    // exclude dead letter topic subscriptions

In unserem Fall hat keines der Abonnements ein totes Thema.

Jedes Abonnement hat einen exponentiellen Backoff - steampipe

Um schließlich alle Abonnements ohne exponentielles Backoff zu finden, verwenden Sie die folgende Abfrage:

select * from gcp_all.gcp_pubsub_subscription
where retry_policy_maximum_backoff is null 
or    retry_policy_minimum_backoff is null 

Auch in unserem Fall hat keines der Abonnements eine Backoff-Richtlinie.

Steampipe-Plugins

Die obigen Beispiele verwenden das Google Cloud Platform-Plugin, aber Steampipe bietet über 100 Plugins, von GCP, AWS, Azure und Kubernetes bis hin zu Google Sheets. So können Sie mit der gleichen Sprache Einblicke in verschiedene Plattformen und Produkte erhalten.

Steampipe IDE Zugriff

Sie können Steampipe auch auf Ihrem lokalen Rechner als Postgres-Datenbankinstanz starten und Ihre bevorzugte IDE verwenden, um die Tabellen und Daten zu untersuchen.

db explorer in intellij

Und schließlich müssen Sie nicht alle Abfragen selbst schreiben: Auf github finden Sie viele Beispielabfragen für Compliance-Prüfungen.

Fazit

steampipe ist ein großartiges Tool zur Analyse Ihrer Cloud-Konfigurationen. Es ist schnell und bietet die bekannte SQL-Abfragesprache zur Untersuchung Ihrer Cloud-Konfiguration. Die Tatsache, dass jede Anwendung mit einer API mit steampipe erforscht werden kann, macht es zu einem unglaublich eleganten Tool in Ihrem Werkzeugkasten.

Die obigen Beispiele zeigen, wie Sie Ihre Google Cloud Platform-Konfiguration analysieren können. Die gleichen Abfragen können jedoch auch für die Analyse von AWS, Azure oder jeder anderen Plattform verwendet werden, für die ein Steampipe-Plugin verfügbar ist.

Probieren Sie es also aus!


Bild von Davinder Sanghafrom 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

Let’s discuss how we can support your journey.