Cvičení – omezení přístupu k prostředí Azure Container Apps
V této lekci zajistíte přístup k databázi PostgreSQL pouze aplikací Quarkus, a ne jinými externími klienty. K databázi můžete v současné době přistupovat z libovolného klienta pomocí Azure CLI a místně spustit Quarkus. Tato konfigurace není zabezpečená. Musíte přidat pravidlo brány firewall, které umožní přístup k databázovému serveru pouze IP adresám v rámci prostředí Azure Container Apps.
Přístup k serveru PostgreSQL pomocí rozhraní příkazového řádku
Nejprve se ujistěte, že máte přístup k serveru PostgreSQL pomocí Azure CLI. Uděláte to tak, že spustíte tento příkaz:
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
Měli byste být schopni zobrazit obsah databáze. Pokud je to možné, je databáze přístupná mimo prostředí.
Odebrat povolující pravidlo brány firewall
Azure Database for PostgreSQL ve výchozím nastavení poskytuje zabezpečení. Její brána firewall obvykle nepovoluje příchozí připojení. Když jste ale vytvořili server PostgreSQL, zadali jste parametr --public-access "All"
pro povolení externího přístupu, který nakonfiguroval otevření brány firewall pro veřejnost.
Spuštěním tohoto příkazu můžete zobrazit seznam existujících pravidel brány firewall:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Měl by se zobrazit následující výstup:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Všimněte si, že rozsah povolených IP adres je 0.0.0.0
prostřednictvím 255.255.255.255
. Pravidlo brány firewall, jako je toto, umožňuje každému klientovi přístup k databázi. Pokud chcete zajistit, aby k databázi měli přístup jenom aplikace Quarkus, musíte aktualizovat pravidla brány firewall serveru PostgreSQL.
V tomto případě je jen otázkou odebrání veřejného pravidla. Pokud ho chcete odebrat, spusťte následující příkaz:
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
Teď zkuste dotazovat databázi spuštěním příkazu SQL z rozhraní příkazového řádku:
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
Volání nakonec vyprší. Měla by se zobrazit tato zpráva:
Unable to connect to flexible server: connection to server failed: Operation timed out
Protože jste odebrali všechna pravidla brány firewall, teď i aplikace Quarkus nemá přístup k databázi. Pokud se pokusíte načíst úkoly z databáze, požadavek selže. Spusťte následující požadavek cURL:
curl https://$AZ_APP_URL/api/todos
Přidejte nové pravidlo brány firewall
Musíte nakonfigurovat bránu firewall tak, aby umožňovala přístup pouze k aplikaci Quarkus. Musíte přidat nové pravidlo firewallu. Pokud chcete přidat pravidlo, spusťte tento příkaz:
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"
Nastavení start-ip-address
a end-ip-address
na 0.0.0.0
umožňuje přístup ze všech interních IP adres Azure, ale nepovoluje přístup z externích IP adres. Tento postup pomáhá zabezpečit databázi před externím přístupem.
Pokud se pokusíte získat přístup k databázi z rozhraní příkazového řádku spuštěním následujícího příkazu, pokus by měl selhat:
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
Pokud se ale pokusíte pomocí následujícího příkazu načíst úlohy z databáze prostřednictvím aplikace Quarkus spuštěné v Container Apps, pokus proběhne úspěšně:
curl https://$AZ_APP_URL/api/todos
Tento příkaz vrátí seznam všech to-do položek z databáze. Server PostgreSQL je přístupný z aplikace Quarkus, která běží ve službě Azure, ale není k němu přístup mimo Azure.