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

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.

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