Exercício - Restringir o acesso ao ambiente de Aplicativos de Contêiner do Azure
Nesta unidade, você garante que o banco de dados PostgreSQL possa ser acessado apenas pelo aplicativo Quarkus, e não por outros clientes externos. Atualmente, você pode acessar o banco de dados de qualquer cliente usando a CLI do Azure e executando o Quarkus localmente. Esta configuração não é segura. Você precisa adicionar uma regra de firewall para permitir que apenas endereços IP no ambiente de Aplicativos de Contêiner do Azure acessem o servidor de banco de dados.
Acesse o servidor PostgreSQL usando a CLI
Primeiro, verifique se você pode acessar o servidor PostgreSQL usando a CLI do Azure. Para fazer isso, execute este comando:
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
Você deve ser capaz de ver o conteúdo do banco de dados. Se puder, o banco de dados pode ser acessado fora do ambiente.
Remover a regra de firewall permissiva
O Banco de Dados do Azure para PostgreSQL fornece segurança por padrão. Seu firewall geralmente não permite conexões de entrada. Mas quando você criou o servidor PostgreSQL, você especificou o parâmetro para habilitar o --public-access "All"
acesso externo, que configurou o firewall para ser aberto ao público.
Você pode listar as regras de firewall existentes executando este comando:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Deverá ver o seguinte resultado:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- ------------------------- ----------------------- ----------------
255.255.255.255 AllowAll_2023-1-3_10-20-4 rgazure-deploy-quarkus 0.0.0.0
Observe que o intervalo de endereços IP permitidos é 0.0.0.0
através 255.255.255.255
de . Uma regra de firewall como essa permite que qualquer cliente acesse o banco de dados. Para garantir que apenas o aplicativo Quarkus possa acessar o banco de dados, você precisa atualizar as regras de firewall do servidor PostgreSQL.
Neste caso, trata-se apenas de remover a regra pública. Para removê-lo, execute o seguinte comando:
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
Agora tente consultar o banco de dados executando uma instrução SQL da CLI:
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
A chamada acaba por expirar. Deverá ver esta mensagem:
Unable to connect to flexible server: connection to server failed: Operation timed out
Como você removeu todas as regras de firewall, agora nem mesmo o aplicativo Quarkus pode acessar o banco de dados. Se você tentar recuperar as tarefas do banco de dados, a solicitação falhará. Execute a seguinte solicitação cURL:
curl https://$AZ_APP_URL/api/todos
Adicionar uma nova regra de firewall
Você precisa configurar o firewall para permitir o acesso apenas ao aplicativo Quarkus. Você precisa adicionar uma nova regra de firewall. Para adicionar a regra, execute este comando:
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"
Definir o start-ip-address
e o end-ip-address
para 0.0.0.0
permite o acesso de todos os endereços IP internos do Azure, mas não permite o acesso de endereços IP externos. Essa prática ajuda a proteger o banco de dados do acesso externo.
Se você tentar acessar o banco de dados da CLI executando o seguinte comando, a tentativa deverá falhar:
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
Mas se você tentar usar o seguinte comando para recuperar as tarefas do banco de dados por meio do aplicativo Quarkus que está sendo executado em Aplicativos de Contêiner, a tentativa será bem-sucedida:
curl https://$AZ_APP_URL/api/todos
Este comando retorna a lista de todos os itens pendentes do banco de dados. O servidor PostgreSQL pode ser acessado do aplicativo Quarkus que está sendo executado em um serviço do Azure, mas não pode ser acessado de fora do Azure.