Exercício – Restringir o acesso ao ambiente dos Aplicativos de Contêiner do Azure

Concluído

Nesta unidade, você garante que o banco de dados PostgreSQL possa ser acessado somente 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. Essa configuração não é segura. Você precisa adicionar uma regra de firewall para permitir que apenas endereços IP no ambiente dos Aplicativos de Contêiner do Azure acessem o servidor de banco de dados.

Acessar o servidor PostgreSQL usando a CLI

Primeiro, garanta que você possa 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 você puder, o banco de dados poderá ser acessado fora do ambiente.

Remover a regra de firewall permissiva

O Banco de Dados PostgreSQL do Azure 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 --public-access "All" para habilitar o acesso externo, que configurou o firewall para ser aberto ao público.

Você pode listar as regras de firewall existentes executando esse comando:

az postgres flexible-server firewall-rule list \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

A seguinte saída deve ser exibida:

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 até 255.255.255.255. 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, precisamos atualizar as regras de firewall do servidor PostgreSQL. Nesse caso, é apenas uma questão 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 eventualmente atinge o tempo limite. Você verá esta mensagem:

Unable to connect to flexible server: connection to server failed: Operation timed out

Como você removeu todas as regras de firewall, até mesmo o aplicativo Quarkus não pode acessar o banco de dados. Se você tentar recuperar a lista de pendências 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 do 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"

A configuração de start-ip-address e end-ip-address para 0.0.0.0 permite o acesso de todos os endereços IP internos do Azure, mas não permite acesso de endereços IP externos. Essa prática ajuda a proteger o banco de dados contra 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 em execução nos Aplicativos de Contêiner, a tentativa terá êxito:

curl https://$AZ_APP_URL/api/todos

Esse comando retorna a lista de todos os itens pendentes do banco de dados. O servidor PostgreSQL ainda pode ser acessado no aplicativo Quarkus em execução em um serviço do Azure, mas não pode ser acessado fora do Azure.