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

Concluído

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.255de . 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.