Pular para conteúdo

Implantação da Imagem Docker do Wallarm no GCP

Este guia rápido fornece as etapas para implantar a imagem Docker do nó Wallarm baseado em NGINX na Google Cloud Platform usando o componente Google Compute Engine (GCE).

Limitações das instruções

Estas instruções não cobrem a configuração do balanceamento de carga e do auto escalonamento de nós. Se você está configurando esses componentes por conta própria, recomendamos que você leia a documentação do GCP apropriada.

Casos de uso

Dentre todas as opções de implantação do Wallarm suportadas, é recomendada a implantação do Wallarm no Google Compute Engine (GCE) usando a imagem Docker nestes casos de uso:

  • Se suas aplicações utilizam uma arquitetura de microserviços e já estão contêinerizadas e operacionais no GCE.

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

Requisitos

Opções para a configuração do container 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 container Docker do nó Wallarm configurado por meio de variáveis de ambiente

Para implantar o nó de filtragem do Wallarm em um container, configurado apenas por meio de variáveis de ambiente, você pode usar o Console GCP ou gcloud CLI. Nestas instruções, o gcloud CLI é usado.

  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. Defina a variável de ambiente local com o token do nó Wallarm a ser usado para conectar a instância ao Cloud Wallarm:

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  3. Crie a instância com o container Docker em execução usando o comando gcloud compute instances create-with-container:

    gcloud compute instances create-with-container <INSTANCE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server \
        --container-env WALLARM_API_TOKEN=${WALLARM_API_TOKEN} \
        --container-env NGINX_BACKEND=<HOST_TO_PROTECT_WITH_WALLARM> \
        --container-env WALLARM_API_HOST=us1.api.wallarm.com \
        --container-image registry-1.docker.io/wallarm/node:4.8.0-1
    
    gcloud compute instances create-with-container <INSTANCE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server \
        --container-env WALLARM_API_TOKEN=${WALLARM_API_TOKEN} \
        --container-env NGINX_BACKEND=<HOST_TO_PROTECT_WITH_WALLARM> \
        --container-env WALLARM_API_HOST=us1.api.wallarm.com \
        --container-image registry-1.docker.io/wallarm/node:4.8.0-1
    
    • <INSTANCE_NAME>: nome da instância, por exemplo: wallarm-node.
    • --zone: zona que hospedará a instância.
    • --tags: tags da instância. Tags são usadas para configurar a disponibilidade da instância para outros recursos. No presente caso, a tag http-server abrindo a porta 80 é atribuída à instância.
    • --container-image: link para a imagem Docker do nó de filtragem.
    • --container-env: 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)
    • Todos os parâmetros do comando gcloud compute instances create-with-container são descritos na documentação do GCP.

  4. Abra o Console GCP → Compute Engine → Instâncias VM e garanta que a instância seja exibida na lista.

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

Implantando o container Docker do nó Wallarm configurado pelo arquivo montado

Para implantar o nó de filtragem do Wallarm em um container, configurado por meio de variáveis de ambiente e arquivo montado, você deve criar a instância, localizar o arquivo de configuração do nó de filtragem no sistema de arquivos desta instância e executar o container Docker nesta instância. Você pode executar estas etapas via Console GCP ou gcloud CLI. Nestas instruções, o gcloud CLI é usado.

  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. Crie a instância baseada em qualquer imagem de sistema operacional do registro do Compute Engine usando o comando gcloud compute instances create:

    gcloud compute instances create <INSTANCE_NAME> \
        --image <PUBLIC_IMAGE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server
    
    • <INSTANCE_NAME>: nome da instância.
    • --image: nome da imagem do sistema operacional do registro do Compute Engine. A instância criada será baseada nesta imagem e será usada para executar o container Docker posteriormente. Se este parâmetro for omitido, a instância será baseada na imagem do Debian 10.
    • --zone: zona que hospedará a instância.
    • --tags: tags da instância. Tags são usadas para configurar a disponibilidade da instância para outros recursos. No presente caso, a tag http-server abrindo a porta 80 é atribuída à instância.
    • Todos os parâmetros do comando gcloud compute instances create são descritos na documentação do GCP.
  3. Abra o Console GCP → Compute Engine → Instâncias VM e garanta que a instância seja exibida na lista e esteja no status RUNNING.

  4. Conecte-se à instância via SSH seguindo as instruções do GCP.

  5. Instale os pacotes do Docker na instância seguindo as instruções para um sistema operacional adequado.

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

    export WALLARM_API_TOKEN='<WALLARM_API_TOKEN>'
    
  7. Na instância, crie o diretório com o arquivo default contendo a configuração do nó de filtragem (por exemplo, o diretório pode ser nomeado como configs). Um exemplo do arquivo com 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 →

  8. Execute o container Docker do nó Wallarm usando o comando docker run com variáveis de ambiente passadas e arquivo de configuração montado:

    docker run -d -e WALLARM_API_TOKEN=${WALLARM_API_TOKEN} -e WALLARM_API_HOST='us1.api.wallarm.com' -v <INSTANCE_PATH_TO_CONFIG>:<DIRECTORY_FOR_MOUNTING> -p 80:80 wallarm/node:4.8.0-1
    
    docker run -d -e WALLARM_API_TOKEN=${WALLARM_API_TOKEN} -v <INSTANCE_PATH_TO_CONFIG>:<CONTAINER_PATH_FOR_MOUNTING> -p 80:80 wallarm/node:4.8.0-1
    
    • <INSTANCE_PATH_TO_CONFIG>: caminho para o arquivo de configuração criado na etapa anterior. Por exemplo, configs.
    • <DIRECTORY_FOR_MOUNTING>: diretório do container para montar o arquivo de configuração. Os arquivos de configuração podem ser montados nos seguintes diretórios do container 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.

    • -p: porta que o nó de filtragem escuta. O valor deve ser o mesmo da porta da instância.

    • -e: variáveis de ambiente com a configuração do nó de filtragem (variáveis disponíveis estão listadas na tabela abaixo). Note 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ó 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)
  9. Teste a operação do nó de filtragem.

Teste da operação do nó de filtragem

  1. Abra o Console GCP → Compute Engine → Instâncias VM e copie o endereço IP da instância da coluna External IP.

    Configuração da instância do container

    Se o endereço IP estiver vazio, verifique se a instância está no status RUNNING.

  2. Envie a solicitação com o teste Path Traversal até o endereço copiado:

    curl http://<COPIED_IP>/etc/passwd
    
  3. Abra o Console Wallarm → Events no Cloud dos EUA ou Cloud da UE e certifique-se de que o ataque está exibido na lista.
    Ataques na UI

Detalhes de erros que ocorreram durante a implantação do container são exibidos no menu de instância View logs. Se a instância estiver indisponível, verifique se os parâmetros do nó de filtragem necessários com os valores corretos são passados para o container.