Implantando a Imagem Docker do Wallarm na AWS¶
Este guia rápido fornece as etapas para implantar a imagem Docker do nó Wallarm baseado em NGINX na plataforma em nuvem da Amazon usando o Amazon Elastic Container Service (Amazon ECS).
Limitações das instruções
Essas instruções não abrangem a configuração de balanceamento de carga e escalonamento automático do nó. Se estiver configurando esses componentes sozinho, recomendamos que você reveja a parte apropriada das instruções da AWS.
Casos de uso¶
Dentre todas as opções de implantação da Wallarm suportadas, a implantação da Wallarm no AWS ECS usando a imagem Docker é recomendada nestes casos de uso:
-
Se suas aplicações utilizam uma arquitetura de microserviços, e já estão em contêineres e operacionais no AWS ECS.
-
Se você precisa de um controle maior e mais refinado sobre cada contêiner, a imagem Docker se destaca. Ela proporciona um maior nível de isolamento de recursos do que normalmente é possível com implantações baseadas em VM tradicionais.
Requisitos¶
-
Conta e usuário da AWS com permissões admin
-
AWS CLI 1 ou AWS CLI 2 devidamente instalada e configurada
-
Acesso à conta com a função Administrador e autenticação de dois fatores desativada no Console Wallarm para o US Cloud ou EU Cloud
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 Wallarm contêinerizado configurado apenas por meio de variáveis de ambiente, são usados o Console de Gerenciamento da AWS e o AWS CLI.
-
Obtenha o token Wallarm do tipo apropriado:
-
Faça login no AWS Management Console → lista de Serviços → Elastic Container Service.
-
Prossiga para a criação do cluster pelo botão Criar Cluster:
- Selecione o modelo EC2 Linux + Networking.
- Especifique o nome do cluster, por exemplo:
wallarm-cluster
. - Se necessário, defina outras configurações de acordo com as instruções da AWS.
- Salve o cluster.
-
Criptografe os dados sensíveis necessários para conectar ao Wallarm Cloud (token do nó) usando o AWS Secrets Manager ou AWS Systems Manager → Parameter Store.
Nestas instruções, os dados sensíveis são armazenados no AWS Secrets Manager.
Acesso ao armazenamento de dados sensíveis
Para permitir que o contêiner Docker leia os dados sensíveis criptografados, certifique-se de que as configurações da AWS atendem aos seguintes requisitos:
- Os dados sensíveis são armazenados na região usada para executar o contêiner Docker.
- A política IAM SecretsManagerReadWrite está anexada ao usuário especificado no parâmetro
executionRoleArn
da definição de tarefa. Mais detalhes sobre a configuração das políticas IAM →
-
Crie o seguinte arquivo JSON local com a definição de tarefa (a definição de tarefa define o cenário operacional do contêiner Docker):
{ "executionRoleArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ecsTaskExecutionRole", "containerDefinitions": [ { "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "environment": [ { "name": "WALLARM_API_HOST", "value": "us1.api.wallarm.com" }, { "name": "NGINX_BACKEND", "value": "<HOST_PARA_PROTEGER_COM_WALLARM>" } ], "secrets": [ { "name": "WALLARM_API_TOKEN", "valueFrom": "arn:aws:secretsmanager:<SECRETS_MANAGER_AWS_REGION>:<AWS_ACCOUNT_ID>:secret:<SECRET_NAME>:<WALLARM_API_TOKEN_PARAMETER_NAME>::" } ], "name": "wallarm-container", "image": "registry-1.docker.io/wallarm/node:4.8.0-1" } ], "family": "wallarm-api-security-node" }
{ "executionRoleArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ecsTaskExecutionRole", "containerDefinitions": [ { "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "environment": [ { "name": "NGINX_BACKEND", "value": "<HOST_PARA_PROTEGER_COM_WALLARM>" } ], "secrets": [ { "name": "WALLARM_API_TOKEN", "valueFrom": "arn:aws:secretsmanager:<SECRETS_MANAGER_AWS_REGION>:<AWS_ACCOUNT_ID>:secret:<SECRET_NAME>:<WALLARM_API_TOKEN_PARAMETER_NAME>::" } ], "name": "wallarm-container", "image": "registry-1.docker.io/wallarm/node:4.8.0-1" } ], "family": "wallarm-api-security-node" }
<AWS_ACCOUNT_ID>
: seu ID da conta AWS.- O objeto
environment
estabelece as variáveis de ambiente que devem ser passadas para o contêiner Docker em formato de texto. O conjunto de variáveis de ambiente disponíveis é descrito na tabela abaixo. Recomenda-se passar a variávelWALLARM_API_TOKEN
no objetosecrets
. -
O objeto
secret
estabelece as variáveis de ambiente que devem ser passadas para o contêiner Docker como os links para o armazenamento de dados sensíveis. O formato dos valores depende do armazenamento selecionado (veja mais detalhes na documentação do AWS Secrets Manager ou AWS Systems Manager → Parameter Store).É recomendado passar a variável
WALLARM_API_TOKEN
no objetosecrets
.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 EUAapi.wallarm.com
para a Nuvem da UE
api.wallarm.com
.Não WALLARM_MODE
Modo de nó: block
para bloquear solicitações maliciosassafe_blocking
para bloquear apenas aquelas solicitações maliciosas originadas de endereços IP em lista cinzamonitoring
para analisar, mas não bloquear solicitaçõesoff
para desativar a análise e processamento de tráfego
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ções → Aplicativo.
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 Docker4.0.2-1
, o serviçowallarm-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 papelDeploy
. Define a etiquetagroup
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 arquivo de configuração são descritos na documentação da AWS.
-
Registre a definição de tarefa com base no arquivo de configuração JSON usando o comando
aws ecs register‑task‑definition
:<PATH_TO_JSON_FILE>
: caminho para o arquivo JSON com a definição de tarefa na máquina local.<JSON_FILE_NAME>
: nome e extensão do arquivo JSON com a definição de tarefa.
-
Execute a tarefa no cluster usando o comando
aws ecs run-task
:<CLUSTER_NAME>
: nome do cluster criado na primeira etapa. Por exemplo,wallarm-cluster
.<FAMILY_PARAM_VALUE>
: nome da definição de tarefa criada. O valor deve corresponder ao valor do parâmetrofamily
especificado no arquivo JSON com a definição de tarefa. Por exemplo,wallarm-api-security-node
.
-
Abra o AWS Management Console → Elastic Container Service → cluster com a tarefa em execução → Tasks e certifique-se de que a tarefa está exibida na lista.
Implantando o contêiner Docker do nó Wallarm configurado através do arquivo montado¶
Para implantar o nó de filtragem Wallarm contêinerizado configurado por meio de variáveis de ambiente e arquivo montado, são usados o Console de Gerenciamento da AWS e o AWS CLI.
Nestas instruções, o arquivo de configuração é montado a partir do sistema de arquivos AWS EFS. Você pode revisar outros métodos para montar o arquivo na documentação da AWS.
Para implantar o contêiner com variáveis de ambiente e arquivo de configuração montado a partir da AWS EFS:
-
Obtenha o token Wallarm do tipo apropriado:
-
Faça login no AWS Management Console → lista de Serviços → Elastic Container Service.
-
Prossiga para a criação do cluster pelo botão Criar Cluster:
- Modelo:
EC2 Linux + Networking
. - Nome do cluster:
wallarm-cluster
(como exemplo). - Modelo de provisionamento:
On-Demand Instance
. - Tipo de instância EC2:
t2.micro
. - Número de instâncias:
1
. - EC2 AMI ID:
Amazon Linux 2 Amazon ECS-optimized AMI
. - Par de chaves: par de chaves para conexão SSH com a instância. Você precisará se conectar à instância via SSH para enviar o arquivo de configuração para o armazenamento.
- As outras configurações podem ser mantidas padrão. Ao alterar outras configurações, é recomendável seguir as instruções de configuração do AWS EFS.
- Modelo:
-
Configure o armazenamento AWS EFS seguindo as etapas 2-4 das instruções da AWS.
-
Na 4ª etapa das instruções da AWS, crie o arquivo de configuração
default
e coloque o arquivo no diretório que armazena os arquivos para montagem por padrão. O arquivodefault
deve cobrir a configuração do nó de filtragem. 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 →
-
Criptografe os dados sensíveis necessários para conectar ao Wallarm Cloud (token do nó) usando o AWS Secrets Manager ou AWS Systems Manager → Parameter Store.
Nestas instruções, os dados sensíveis são armazenados no AWS Secrets Manager.
Acesso ao armazenamento de dados sensíveis
Para permitir que o contêiner Docker leia os dados sensíveis criptografados, certifique-se de que as configurações da AWS atendem aos seguintes requisitos:
- Os dados sensíveis são armazenados na região usada para executar o contêiner Docker.
- A política IAM SecretsManagerReadWrite está anexada ao usuário especificado no parâmetro
executionRoleArn
da definição de tarefa. Mais detalhes sobre a configuração das políticas IAM →
-
Crie o seguinte arquivo JSON local com a definição de tarefa (a definição de tarefa define o cenário operacional do contêiner Docker):
{ "executionRoleArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ecsTaskExecutionRole", "containerDefinitions": [ { "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "mountPoints": [ { "containerPath": "<PATH_FOR_MOUNTED_CONFIG>", "sourceVolume": "<NAME_FROM_VOLUMES_OBJECT>" } ], "environment": [ { "name": "WALLARM_API_HOST", "value": "us1.api.wallarm.com" } ], "secrets": [ { "name": "WALLARM_API_TOKEN", "valueFrom": "arn:aws:secretsmanager:<SECRETS_MANAGER_AWS_REGION>:<AWS_ACCOUNT_ID>:secret:<SECRET_NAME>:<WALLARM_API_TOKEN_PARAMETER_NAME>::" } ], "name": "wallarm-container", "image": "registry-1.docker.io/wallarm/node:4.8.0-1" } ], "volumes": [ { "name": "<VOLUME_NAME>", "efsVolumeConfiguration": { "fileSystemId": "<EFS_FILE_SYSTEM_ID>", "transitEncryption": "ENABLED" } } ], "family": "wallarm-api-security-node" }
{ "executionRoleArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/ecsTaskExecutionRole", "containerDefinitions": [ { "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "mountPoints": [ { "containerPath": "/etc/nginx/sites-enabled", "sourceVolume": "default" } ], "secrets": [ { "name": "WALLARM_API_TOKEN", "valueFrom": "arn:aws:secretsmanager:<SECRETS_MANAGER_AWS_REGION>:<AWS_ACCOUNT_ID>:secret:<SECRET_NAME>:<WALLARM_API_TOKEN_PARAMETER_NAME>::" } ], "name": "wallarm-container", "image": "registry-1.docker.io/wallarm/node:4.8.0-1" } ], "volumes": [ { "name": "default", "efsVolumeConfiguration": { "fileSystemId": "<EFS_FILE_SYSTEM_ID>", "transitEncryption": "ENABLED" } } ], "family": "wallarm-api-security-node" }
<AWS_ACCOUNT_ID>
: seu ID da conta AWS.-
<PATH_FOR_MOUNTED_CONFIG>
: diretório do contêiner para o qual o arquivo de configuração deve ser montado. Os arquivos de configuração podem ser montados nos seguintes diretórios de contêineres 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
. -
<NAME_FROM_VOLUMES_OBJECT>
: nome do objetovolumes
que contém a configuração do armazenamento AWS EFS do arquivo montado (o valor deve ser o mesmo que<VOLUME_NAME>
). <VOLUME_NAME>
: nome do objetovolumes
que contém a configuração do armazenamento AWS EFS do arquivo montado.<EFS_FILE_SYSTEM_ID>
: ID do sistema de arquivos AWS EFS que contém o arquivo que deve ser montado no contêiner. ID é exibido no AWS Management Console → Serviços → EFS → Sistemas de arquivos.- O objeto
environment
estabelece as variáveis de ambiente que devem ser passadas para o contêiner Docker em formato de texto. O conjunto de variáveis de ambiente disponíveis é descrito na tabela abaixo. Recomenda-se passar a variávelWALLARM_API_TOKEN
no objetosecrets
. -
O objeto
secret
estabelece as variáveis de ambiente que devem ser passadas para o contêiner Docker como os links para o armazenamento de dados sensíveis. O formato dos valores depende do armazenamento selecionado (veja mais detalhes na documentação do AWS Secrets Manager ou AWS Systems Manager → Parameter Store).É recomendado passar a variável
WALLARM_API_TOKEN
no objetosecrets
.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 EUAapi.wallarm.com
para a Nuvem da UE
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çãoDeploy
. Define a etiquetagroup
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) -
Todos os parâmetros do arquivo de configuração são descritos na documentação da AWS.
-
Registre a definição de tarefa com base no arquivo de configuração JSON usando o comando
aws ecs register‑task‑definition
:<PATH_TO_JSON_FILE>
: caminho para o arquivo JSON com a definição de tarefa na máquina local.<JSON_FILE_NAME>
: nome e extensão do arquivo JSON com a definição de tarefa.
-
Execute a tarefa no cluster usando o comando
aws ecs run-task
:<CLUSTER_NAME>
: nome do cluster criado na primeira etapa. Por exemplo,wallarm-cluster
.<FAMILY_PARAM_VALUE>
: nome da definição de tarefa criada. O valor deve corresponder ao valor do parâmetrofamily
especificado no arquivo JSON com a definição de tarefa. Por exemplo,wallarm-api-security-node
.
-
Abra o AWS Management Console → Elastic Container Service → cluster com a tarefa em execução → Tasks e certifique-se de que a tarefa está exibida na lista.
Testando a operação do nó de filtragem¶
-
No AWS Management Console, abra a tarefa em execução e copie o endereço IP do contêiner do campo Link Externo.
Se o endereço IP estiver vazio, certifique-se de que o contêiner está no status RUNNING.
-
Envie a solicitação com o teste Path Traversal para o endereço copiado:
-
Abra o Wallarm Console → Events na US Cloud ou EU Cloud e certifique-se de que o ataque está exibido na lista.
Os detalhes sobre erros que ocorreram durante a implantação do contêiner são exibidos nos detalhes da tarefa no AWS Management Console. Se o contêiner estiver indisponível, certifique-se de que os parâmetros necessários do nó de filtragem com valores corretos são passados para o contêiner.