Pular para conteúdo

Implantação da Imagem Docker da Wallarm no Azure

Este guia rápido fornece as etapas para implantar a Imagem Docker do nó Wallarm baseado em NGINX na plataforma de nuvem Microsoft Azure usando o serviço Container Instances do Azure.

Limitações das instruções

Estas instruções não cobrem a configuração do balanceamento de carga e do dimensionamento automático de nós. Se estiver configurando esses componentes por conta própria, recomendamos que você leia a documentação sobre o Gateway de Aplicativos Azure.

Casos de uso

Dentre todas as [opções de implementação do Wallarm][plataforma] suportadas, a implementação do Wallarm no Azure Container Instances utilizando a imagem Docker é recomendada nesses casos de uso:

  • Se suas aplicações se beneficiam de uma arquitetura de microsserviços e já estão contêinerizadas e operacionais no Azure Container Instances.

  • Se você precisa de um controle refinado sobre cada contêiner, a imagem Docker se destaca. Ela oferece um maior nível de isolamento de recursos do que normalmente é possível com implementações baseadas em VM tradicionais.

Requisitos

Opções para a configuração do contêiner Docker do nó Wallarm

Os parâmetros de configuração do nó de filtragem devem ser passados para o contêiner Docker implantado de uma das seguintes maneiras:

  • Nas variáveis do ambiente. Esta opção permite a configuração de apenas os parâmetros básicos do nó de filtragem. A maioria das diretivas não pode ser configurada através de variáveis de ambiente.

  • No arquivo de configuração montado. Esta opção permite a configuração completa do nó de filtragem através de qualquer diretiva. Com este método de configuração, as variáveis de ambiente com as configurações de conexão do nó de filtragem e do Wallarm Cloud também são passadas para o contêiner.

Implantando o contêiner Docker do nó Wallarm configurado através de variáveis de ambiente

Para implantar o nó de filtragem em contêiner Wallarm configurado apenas por meio de variáveis de ambiente, você pode usar as seguintes ferramentas:

Nestas instruções, o contêiner é implantado usando a CLI Azure.

  1. Obtenha o token Wallarm do tipo apropriado:

    1. Abra o Console Wallarm → ConfiguraçõesTokens de API no US Cloud ou EU Cloud.
    2. Encontre ou crie um token de API com a função Deploy.
    3. Copie este token.
    1. Abra o Console Wallarm → Nós no US Cloud ou EU Cloud.
    2. Faça uma das seguintes ações:
      • Crie o nó do tipo Nó Wallarm e copie o token gerado.
      • Use o grupo de nó existente - copie o token usando o menu do nó → Copiar token.
  2. Entre na CLI Azure usando o comando az login:

    az login
    
  3. Crie um grupo de recursos usando o comando az group create. Por exemplo, crie o grupo meuGrupoDeRecursos na região Leste dos EUA com o seguinte comando:

    az group create --name meuGrupoDeRecursos --location eastus
    
  4. Defina a variável de ambiente local com o token do nó Wallarm a ser usado para conectar a instância à Nuvem Wallarm:

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  5. Crie um recurso Azure a partir do contêiner Docker do nó Wallarm usando o comando az container create:

    az container create \
       --resource-group meuGrupoDeRecursos \
       --name wallarm-node \
       --dns-name-label wallarm \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:4.8.0-1 \
       --environment-variables WALLARM_API_TOKEN=${WALLARM_API_TOKEN} NGINX_BACKEND='example.com' WALLARM_API_HOST='us1.api.wallarm.com'
    
    az container create \
       --resource-group meuGrupoDeRecursos \
       --name wallarm-node \
       --dns-name-label wallarm \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:4.8.0-1 \
       --environment-variables WALLARM_API_TOKEN=${WALLARM_API_TOKEN} NGINX_BACKEND='example.com'
    
    • --resource-group: nome do grupo de recursos criado na segunda etapa.
    • --name: nome do contêiner.
    • --dns-name-label: etiqueta de nome DNS para o contêiner.
    • --ports: porta em que o nó de filtragem está ouvindo.
    • --image: nome da imagem Docker do nó Wallarm.
    • --environment-variables: variáveis de ambiente com a configuração do nó de filtragem (variáveis disponíveis estão listadas na tabela abaixo). Por favor, observe que não é recomendado passar o valor de WALLARM_API_TOKEN explicitamente.

      Variável de ambiente Descrição Obrigatório
      WALLARM_API_TOKEN Token de nó ou API do Wallarm. Sim
      NGINX_BACKEND Domínio ou endereço IP do recurso a ser protegido com a solução Wallarm. Sim
      WALLARM_API_HOST Servidor de API Wallarm:
      • us1.api.wallarm.com para a Nuvem dos EUA
      • api.wallarm.com para a Nuvem da UE
      Por padrão: api.wallarm.com.
      Não
      WALLARM_MODE Modo de nó:
      • block para bloquear solicitações maliciosas
      • safe_blocking para bloquear apenas aquelas solicitações maliciosas originadas de endereços IP em lista cinza
      • monitoring para analisar, mas não bloquear solicitações
      • off para desativar a análise e processamento de tráfego
      Por padrão: monitoring.
      Descrição detalhada dos modos de filtragem →
      Não
      WALLARM_APPLICATION Identificador único do aplicativo protegido a ser usado na Nuvem Wallarm. O valor pode ser um número inteiro positivo, exceto 0.

      O valor padrão (se a variável não for passada para o contêiner) é -1, o que indica o aplicativo padrão exibido na Console Wallarm → ConfiguraçõesAplicativo.

      Mais detalhes sobre a configuração de aplicativos →
      Não
      TARANTOOL_MEMORY_GB Quantidade de memória alocada para o Tarantool. O valor pode ser um número inteiro ou um float (um ponto . é um separador decimal). Por padrão: 0.2 gigabytes. Não
      NGINX_PORT Define uma porta que o NGINX usará dentro do contêiner Docker.

      A partir da imagem Docker 4.0.2-1, o serviço wallarm-status é executado automaticamente na mesma porta que o NGINX.

      O valor padrão (se a variável não for passada para o contêiner) é 80.

      A sintaxe é NGINX_PORT='443'.
      Não
      DISABLE_IPV6 A variável com qualquer valor que não seja um vazio exclui a linha listen [::]:80 default_server ipv6only=on; do arquivo de configuração NGINX, o que impedirá o NGINX de processar conexões IPv6.

      Se a variável não for especificada explicitamente ou tiver um valor vazio "", o NGINX processará conexões IPv6 e IPv4.
      Não
      WALLARM_LABELS

      Disponível a partir do nó 4.6. Funciona apenas se WALLARM_API_TOKEN estiver configurado para token de API com o papel Deploy. Define a etiqueta group para a agrupamento de instâncias de nó, por exemplo:

      WALLARM_LABELS="group=<GRUPO>"

      ...colocará a instância do nó no grupo de instâncias <GRUPO> (existente, ou, se não existir, será criado).

      Sim (para tokens de API)
  6. Abra o Portal Azure e verifique se o recurso criado é exibido na lista de recursos.

  7. Teste a operação do nó de filtragem.

Implantando o contêiner Docker do nó Wallarm configurado através do arquivo montado

Para implantar o nó de filtragem em contêiner Wallarm configurado por meio de variáveis de ambiente e arquivo montado, apenas o CLI Azure pode ser usado.

Para implantar o contêiner com variáveis de ambiente e arquivo de configuração montado:

  1. Obtenha o token Wallarm do tipo apropriado:

    1. Abra o Console Wallarm → ConfiguraçõesTokens de API no US Cloud ou EU Cloud.
    2. Encontre ou crie um token de API com a função Deploy.
    3. Copie este token.
    1. Abra o Console Wallarm → Nós no US Cloud ou EU Cloud.
    2. Faça uma das seguintes ações:
      • Crie o nó do tipo Nó Wallarm e copie o token gerado.
      • Use o grupo de nó existente - copie o token usando o menu do nó → Copiar token.
  2. Entre na CLI Azure usando o comando az login:

    az login
    
  3. Crie um grupo de recursos usando o comando az group create. Por exemplo, crie o grupo meuGrupoDeRecursos na região Leste dos EUA com o seguinte comando:

    az group create --name meuGrupoDeRecursos --location eastus
    
  4. Crie um arquivo de configuração localmente com as configurações do nó de filtragem. Um exemplo do arquivo com as configurações mínimas:

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        #listen 443 ssl;
    
        server_name localhost;
    
        #ssl_certificate cert.pem;
        #ssl_certificate_key cert.key;
    
        root /usr/share/nginx/html;
    
        index index.html index.htm;
    
        wallarm_mode monitoring;
        # wallarm_application 1;
    
        location / {
                proxy_pass http://example.com;
                include proxy_params;
        }
    }
    

    Conjunto de diretivas do nó de filtragem que podem ser especificadas no arquivo de configuração →

  5. Localize o arquivo de configuração de uma das maneiras adequadas para montar volumes de dados no Azure. Todos os métodos são descritos na seção Mount data volumes da documentação do Azure.

    Nestas instruções, o arquivo de configuração é montado a partir do repositório Git.

  6. Defina a variável de ambiente local com o token do nó Wallarm a ser usado para conectar a instância à Nuvem Wallarm:

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  7. Crie um recurso Azure a partir do contêiner Docker do nó Wallarm usando o comando az container create:

    az container create \
       --resource-group meuGrupoDeRecursos \
       --name wallarm-node \
       --dns-name-label wallarm \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:4.8.0-1 \
       --gitrepo-url <URL_DO_GITREPO> \
       --gitrepo-mount-path /etc/nginx/sites-enabled \
       --environment-variables WALLARM_API_TOKEN=${WALLARM_API_TOKEN} WALLARM_API_HOST='us1.api.wallarm.com'
    
    az container create \
       --resource-group meuGrupoDeRecursos \
       --name wallarm-node \
       --dns-name-label wallarm \
       --ports 80 \
       --image registry-1.docker.io/wallarm/node:4.8.0-1 \
       --gitrepo-url <URL_DO_GITREPO> \
       --gitrepo-mount-path /etc/nginx/sites-enabled \
       --environment-variables WALLARM_API_TOKEN=${WALLARM_API_TOKEN}
    
    • --resource-group: nome do grupo de recursos criado na segunda etapa.
    • --name: nome do contêiner.
    • --dns-name-label: etiqueta de nome DNS para o contêiner.
    • --ports: porta em que o nó de filtragem está ouvindo.
    • --image: nome da imagem Docker do nó Wallarm.
    • --gitrepo-url: URL do repositório Git que contém o arquivo de configuração. Se o arquivo estiver localizado na raíz do repositório, você precisará passar apenas este parâmetro. Se o arquivo estiver localizado em um diretório de repositório Git separado, por favor, passe também o caminho para o diretório no parâmetro --gitrepo-dir (por exemplo,
      --gitrepo-dir ./dir1).
    • --gitrepo-mount-path: diretório do contêiner para montar o arquivo de configuração. Os arquivos de configuração podem ser montados nos seguintes diretórios de contêiner usados pelo NGINX:

      • /etc/nginx/conf.d — configurações comuns
      • /etc/nginx/sites-enabled — configurações do host virtual
      • /var/www/html — arquivos estáticos

      As diretivas do nó de filtragem devem ser descritas no arquivo /etc/nginx/sites-enabled/default.

    • --environment-variables: variáveis de ambiente contendo configurações para o nó de filtragem e conexão com a Nuvem Wallarm (variáveis disponíveis estão listadas na tabela abaixo). Por favor, observe que não é recomendado passar explicitamente o valor de WALLARM_API_TOKEN.

      Variável de ambiente Descrição Obrigatório
      WALLARM_API_TOKEN Token de nó Wallarm ou API. Sim
      WALLARM_API_HOST Servidor API Wallarm:
      • us1.api.wallarm.com para a Nuvem dos EUA
      • api.wallarm.com para a Nuvem da UE
      Por padrão: api.wallarm.com.
      Não
      WALLARM_LABELS

      Disponível a partir do nó 4.6. Funciona apenas se WALLARM_API_TOKEN estiver configurado para token da API com a função Deploy. Define a etiqueta group para agrupamento de instâncias de nó, por exemplo:

      WALLARM_LABELS="group=<GROUP>"

      ...colocará a instância de nó no grupo de instâncias <GROUP> (existente, ou, se não existir, será criado).

      Sim (para tokens de API)
  8. Abra o Portal Azure e verifique se o recurso criado é exibido na lista de recursos.

  9. Teste a operação do nó de filtragem.

Testando a operação do nó de filtragem

  1. Abra o recurso criado no Portal Azure e copie o valor FQDN.

    Configurando a instância do contêiner

    Se o campo FQDN estiver vazio, verifique se o contêiner está no status Running.

  2. Envie a solicitação com o teste de ataque Path Traversal para o domínio copiado:

    curl http://<DOMINIO_COPIADO>/etc/passwd
    
  3. Abra o Console Wallarm → Events na Nuvem dos EUA ou na Nuvem da UE e verifique se o ataque aparece na lista.
    Ataques na Interface do Usuário

Os detalhes sobre erros ocorridos durante a implantação do contêiner são exibidos na guia ContainersLogs dos detalhes do recurso no Portal Azure. Se o recurso não estiver disponível, verifique se os parâmetros necessários do nó de filtragem com valores corretos são passados para o contêiner.