Konfigurieren Sie die Google Cloud Firewall zum Filtern nach Tags und Subnetzen

Konfigurieren Sie die Google Cloud Firewall zum Filtern nach Tags und Subnetzen

Ich führe PostgreSQL auf einer Google Cloud Compute Engine-Instanz aus und PostgreSQL ist derzeit so konfiguriert, dass es Verbindungen von überall akzeptiert. Die Idee dahinter ist, dass ich die Firewall zur Zugriffskontrolle verwende, anstatt mich jedes Mal beim Server anmelden zu müssen.

Um sicherzustellen, dass nichts anderes falsch konfiguriert ist, habe ich derzeit eine Firewall-Regel namens . development-allow-psqlIch habe sie so eingerichtet, dass sie von überall aus Folgendes zulässt:

Targets: All instances on network
Source Filter: IP Ranges
Source IP Ranges: 0.0.0.0/0
Second Source Filter: None
Specified protocols and ports: tcp:5432

Läuft

psql "dbname=mydb host=__.___.__.__ user=myuser password=mypassword port=5432"

Verbindet mich sofort, aber von überall und nicht nur von den Instanzen, denen ich Zugriff gewähren möchte.

Diese Instanzen werden automatisch über eine Instance GroupVorlage erstellt Instance Template , die zum Erstellen von Instanzen mit den folgenden Einstellungen konfiguriert ist:

Network tags: myapp-api, http-server, https-server
Network: development
Subnetwork: development (with address range 10.154.0.0/20)

Ich möchte den Zugriff auf diese DB-Instanz auf Instanzen beschränken, die myapp-apials Tag oder als Subnetz von 10.154.0.0/20oder beides haben. Daher ändere ich meine Firewall-Einstellungen wie folgt:

Targets: Specified target tags
Target tags: myapp-api
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432

Dies blockiert den Zugriff auf den psqlBefehl, den ich zuvor ausgeführt habe (der psql-Befehl wird von einer Docker-Instanz ausgeführt, auf die ich über zugreife docker exec -ti -u0 my-instance-api-dev-small bash).

Wenn ich jetzt wechsle zu

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

Es blockiert immer noch den gesamten Zugriff. Wenn ich jetzt den Second Source Filter entferne und nur nach Subnetz filtere, habe ich immer noch keinen Zugriff.

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432

Wenn ich den Subnetzquellenfilter gegen einen Tagfilter austausche:

Targets: All instances on the network
Source Filter: Source tags
Source tags: myapp-api
Second Source Filter: None
Specified protocols and ports: tcp:5432

... immer noch kein Zugriff.

Dasselbe gilt, wenn Sie den Quellfilter von Subnetzen auswählen und nur alle Subnetze auswählen.

Wechseln zu:

Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 0.0.0.0/0
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

es ermöglicht wieder jedem (auch außerhalb von Google Cloud), eine Verbindung herzustellen, obwohl ich ein Quell-Tag angegeben habe

Das Ändern des IP-Adressbereichs auf 10.154.0.0/20 blockiert erneut alle

Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

Das Ersetzen des IP-Bereichs durch die externen IP-Adressen der Instanzen 35.189.124.141/32funktioniert beispielsweise, aber da diese IP-Adressen flüchtig sind, ist dies keine Lösung, da die Firewall-Regeln jedes Mal aktualisiert werden müssen, wenn die automatische Skalierung weitere Instanzen mit neuen IP-Adressen hinzufügt.

Wie konfiguriere ich die Firewall so, dass nur Instanzen aus einem bestimmten Subnetz und/oder mit bestimmten Tags zugelassen werden? Was ich mache, scheint nicht zu funktionieren.

Antwort1

Beim Wechsel von der externen IP-Adresse der Datenbankinstanz zu ihrer internen IP-Adresse funktionieren plötzlich alle oben genannten Kombinationen.

psql "dbname=mydb host=internal-ip-address-here user=myuser password=mypassword port=5432"

Es stellt sich heraus, dass die Firewall beim Verwenden von Tags die interne IP-Adresse und nicht die externe IP-Adresse betrachtet.

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

verwandte Informationen