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 função de execução de tarefa ECS especificada no parâmetro
executionRoleArnda definição de tarefa deve ter uma política de leitura com privilégios mínimos, limitada ao ARN específico do segredo. Se você usar uma chave KMS gerenciada pelo cliente para criptografar o segredo, conceda também a permissãokms:Decryptpara essa chave. Mais detalhes sobre a configuração das políticas IAM →Exemplo de política IAM:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadSpecificSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:<REGION>:<ACCOUNT>:secret:<SECRET_NAME>*" }, { "Sid": "DecryptForSecret", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:<REGION>:<ACCOUNT>:key/<KMS_KEY_ID>", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.<REGION>.amazonaws.com" } } } ] }Se você usar a chave gerenciada padrão da AWS para o Secrets Manager, pode omitir a declaração
DecryptForSecret.
-
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
environmentestabelece 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_TOKENno objetosecrets. -
O objeto
secretestabelece 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_TOKENno objetosecrets.Variável de ambiente Descrição Obrigatório WALLARM_API_TOKENToken de nó ou API do Wallarm. Sim NGINX_BACKENDDomínio ou endereço IP do recurso a ser protegido com a solução Wallarm. Sim WALLARM_API_HOSTServidor de API Wallarm: us1.api.wallarm.compara a Nuvem dos EUAapi.wallarm.compara a Nuvem da UE
api.wallarm.com.Não WALLARM_MODEModo de nó: blockpara bloquear solicitações maliciosassafe_blockingpara bloquear apenas aquelas solicitações maliciosas originadas de endereços IP em lista cinzamonitoringpara analisar, mas não bloquear solicitaçõesoffpara desativar a análise e processamento de tráfego
monitoring.
Descrição detalhada dos modos de filtragem →Não WALLARM_APPLICATIONIdentificador ú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_GBQuantidade 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_PORTDefine 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_IPV6A 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_LABELSDisponível a partir do nó 4.6. Funciona apenas se
WALLARM_API_TOKENestiver configurado para token de API com o papelDeploy. Define a etiquetagrouppara 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âmetrofamilyespecificado 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
defaulte coloque o arquivo no diretório que armazena os arquivos para montagem por padrão. O arquivodefaultdeve 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 função de execução de tarefa ECS especificada no parâmetro
executionRoleArnda definição de tarefa deve ter uma política de leitura com privilégios mínimos, limitada ao ARN específico do segredo. Se você usar uma chave KMS gerenciada pelo cliente para criptografar o segredo, conceda também a permissãokms:Decryptpara essa chave. Consulte o exemplo de política acima e a documentação de 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 objetovolumesque 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 objetovolumesque 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
environmentestabelece 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_TOKENno objetosecrets. -
O objeto
secretestabelece 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_TOKENno objetosecrets.Variável de ambiente Descrição Obrigatório WALLARM_API_TOKENToken de nó Wallarm ou API. Sim WALLARM_API_HOSTServidor API Wallarm: us1.api.wallarm.compara a Nuvem dos EUAapi.wallarm.compara a Nuvem da UE
api.wallarm.com.Não WALLARM_LABELSDisponível a partir do nó 4.6. Funciona apenas se
WALLARM_API_TOKENestiver configurado para token da API com a funçãoDeploy. Define a etiquetagrouppara 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âmetrofamilyespecificado 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.
