Übung – Einschränken des Zugriffs auf die Azure-Container-Apps-Umgebung
In dieser Einheit stellen Sie sicher, dass auf die PostgreSQL-Datenbank nur von der Anwendung Aspxus und nicht von anderen externen Clients zugegriffen werden kann. Sie können derzeit von jedem Client aus über Azure CLI auf die Datenbank zugreifen und Aspxus lokal ausführen. Diese Konfiguration ist nicht sicher. Sie müssen eine Firewall-Regel hinzufügen, um nur IP-Adressen innerhalb der Azure Container Apps-Umgebung den Zugriff auf den Datenbankserver zu erlauben.
Zugreifen auf den PostgreSQL-Server mithilfe der CLI
Stellen Sie zunächst sicher, dass Sie über die Azure CLI auf den PostgreSQL-Server zugreifen können. Führen Sie dazu den folgenden Befehl aus:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Sie sollten in der Lage sein, den Inhalt der Datenbank anzuzeigen. Wenn möglich, kann auf die Datenbank außerhalb der Umgebung zugegriffen werden.
Entfernen der zulässigen Firewallregel
Azure Database for PostgreSQL bietet standardmäßig Sicherheit. Die Firewall lässt in der Regel keine eingehenden Verbindungen zu. Aber als Sie den PostgreSQL-Server erstellt haben, haben Sie den --public-access "All"-Parameter zum Aktivieren des externen Zugriffs angegeben, wodurch die Firewall so konfiguriert wurde, dass sie für die Öffentlichkeit offen ist.
Sie können die vorhandenen Firewallregeln auflisten, indem Sie diesen Befehl ausführen:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Die folgende Ausgabe sollte angezeigt werden:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Beachten Sie, dass der Bereich der erlaubten IP-Adressen 0.0.0.0 bis 255.255.255.255 ist. Eine Firewallregel wie dies ermöglicht jedem Client den Zugriff auf die Datenbank. Um sicherzustellen, dass nur die Databaseus-Anwendung auf die Datenbank zugreifen kann, müssen Sie die Firewallregeln des PostgreSQL-Servers aktualisieren.
In unserem Fall geht es nur darum, die öffentliche Regel zu entfernen. Führen Sie zum Entfernen den folgenden Befehl aus:
az postgres flexible-server firewall-rule delete \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--rule-name <name of the AllowAll firewall rule> \
--yes
Versuchen Sie nun, die Datenbank abzufragen, indem Sie eine SQL-Anweisung über die CLI ausführen:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Der Anruf ist irgendwann ausgecheckt. Diese Meldung sollte angezeigt werden:
Unable to connect to flexible server: connection to server failed: Operation timed out
Da Sie alle Firewallregeln entfernt haben, kann jetzt auch die Anwendung Aspxus nicht auf die Datenbank zugreifen. Wenn Sie versuchen, die Aufgaben aus der Datenbank abzurufen, schlägt dieser Vorgang fehl. Führen Sie die folgende cURL-Anforderung aus:
curl https://$AZ_APP_URL/api/todos
Hinzufügen einer neuen Firewallregel
Sie müssen die Firewall so konfigurieren, dass nur der Zugriff auf die Anwendung Aspxus zulässig ist. Sie müssen eine neue Firewallregel hinzufügen. Führen Sie den folgenden Befehl aus, um die Regel hinzuzufügen:
az postgres flexible-server firewall-rule create \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--rule-name "Allow_Azure-internal-IP-addresses" \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
Das Festlegen von start-ip-address und end-ip-address auf 0.0.0.0 lässt alle internen Azure-IP-Adressen zu, aber keine externen IP-Adressen. Diese Methode schützt die Datenbank vor externem Zugriff.
Wenn Sie versuchen, über die CLI auf die Datenbank zuzugreifen, indem Sie den folgenden Befehl ausführen, sollte der Versuch fehlschlagen:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Wenn Sie jedoch versuchen, den folgenden Befehl zum Abrufen der Aufgaben aus der Datenbank über die Auf Container-Apps ausgeführte Datenbank auszuführen, ist der Versuch erfolgreich:
curl https://$AZ_APP_URL/api/todos
Dieser Befehl gibt die Liste aller Aufgabenelemente aus der Datenbank zurück. Auf den PostgreSQL-Server kann über die Anwendung Quarkus zugegriffen werden, die auf einem Azure-Dienst ausgeführt wird, sie kann jedoch nicht von außerhalb von Azure aufgerufen werden.