Instale a integração Process Request Data Into Headers
Instale Process Request Data Into Headers pelo Azion Marketplace e execute-a em um firewall para transformar campos do corpo em headers de requisição.
Você instala a integração Process Request Data Into Headers pelo Azion Marketplace e a executa em um Firewall, pelo Azion Console. A função converte os campos do corpo de uma requisição em headers de requisição e interrompe a requisição quando um campo do corpo está vazio. Com regex, você valida que um campo existe e que corresponde a um padrão, e pode usar qualquer behavior em vez de um Deny Request fixo.
Cinco objetos precisam existir antes que uma requisição seja processada: a função instalada, um firewall com o módulo Functions, uma instância de função, uma regra do Rules Engine com o behavior Run Function e um deployment de workload vinculado ao firewall. Cada seção abaixo cria um deles.
Pré-requisitos
- Uma conta Azion. Para entrar, consulte Como acessar o Azion Console.
- Uma aplicação servida por um workload, cujo deployment você vincula ao firewall na última seção.
- A Azion CLI instalada e autorizada, para a última seção.
- Ativar um produto ou um módulo pode gerar custos de uso. Para mais informações, consulte Preços.
Instale a integração
A função é instalada uma vez por conta. Para instalá-la:
Acesse Azion Console > Marketplace.
Digite Process Request Data Into Headers no campo Search on Marketplace e selecione o card da integração. Navegar pelos cards e pelas categorias leva à mesma página.
O card mostra Successfully installed! e Latest version installed!, e a função aparece na lista Function do drawer Create Instance.
Crie o firewall
O firewall é onde a função é instanciada e onde fica a regra que a executa. Para criar um:
Acesse Azion Console > Firewalls e crie um firewall.
Na seção General, digite um Name. Por exemplo: request-data-firewall.
Na seção Modules, ative o switch Functions.
O firewall mostra a aba Functions Instances enquanto o módulo Functions estiver ativo. Para usar um firewall existente, ative o módulo Functions dele e salve-o. Para todas as configurações deste formulário, consulte Defina as configurações principais de um firewall.
Crie a instância de função
A instância conecta a função instalada ao seu firewall. Para criá-la:
Em Firewalls, selecione seu firewall e a aba Functions Instances.
Um firewall sem nenhuma instância mostra a mesma ação como Function Instance. O drawer Create Instance é aberto.
Em Name, digite um nome. Por exemplo: process-request-data.
Em Function, selecione a função Process Request Data Into Headers. A lista contém apenas as funções que são executadas em um firewall.
A instância aparece na aba Functions Instances.
Argumentos
A função não recebe argumentos. Você pode testá-la com curl depois que a regra a executar.
Exemplos de requisição
Quando uma requisição tem um header Content-Type válido e um corpo válido, a função converte os campos do corpo em headers. A função também aceita dados de objetos aninhados, e um hífen separa cada nível do objeto no nome do header.
| Comando curl | Headers de requisição adicionados pela função |
|---|---|
curl https://mydomain/function | X-Body-Error": "CT001 |
curl -H "Content-Type: application/x-www-form-urlencoded" --request POST --data 'param1=v1¶m2=v2¶m3=v3' https://mydomain/function | X-Body-Param1": "v1", X-Body-Param2": "v2", X-Body-Param3": "v3" |
curl -H "Content-Type: application/json" --request POST --data '{"my_data": {"abc": {"def": {"g": "xyz","h": false,"e": null}}, "number": 1}}' https://mydomain/function | X-Body-My-Data-Abc-Def-G": "xyz", X-Body-My-Data-Abc-Def-H": "false", X-Body-My-Data-Number": "1" |
curl -H "Content-Type: text/plain" --request POST --data 'plain=text' https://mydomain /function | X-Body-Error": "CT002" |
curl -H "Content-Type: application/json" --request POST --data '{"my_data": {"abc": {"def": {"g": "xyz","h": false,"e": null}}, "number": 1}' https://mydomain/function | X-Body-Error": "FD001" |
Erros
Quando a função falha, ela adiciona o código de erro a um novo header, X-Body-Error:
| Código de erro | Descrição |
|---|---|
CT001 | O header Content-Type está ausente ou é nulo |
CT002 | O header Content-Type tem um valor que a função não aceita |
FD001 | O corpo da requisição não está formatado corretamente e a função não consegue decodificá-lo |
Crie a regra
A instância não processa nada até que uma regra a execute. Uma regra do Rules Engine for Firewall seleciona as requisições que chegam à instância, por meio de um behavior Run Function. Para criar a regra:
Em Firewalls, selecione seu firewall e a aba Rules Engine.
Em Name, digite um nome. Por exemplo: Run Process Request Data Into Headers.
Na seção Criteria, selecione os domínios que executam a integração. Por exemplo: if Host matches yourdomain.com.
Na seção Behaviors, selecione Run Function e selecione a instância pelo nome que você deu a ela.
O firewall executa a instância em toda requisição aos domínios do critério.
Vincule o firewall ao workload
O vínculo fica no deployment do workload, então crie um deployment que indique a aplicação e o firewall:
O comando exibe o id do novo deployment:
As requisições ao domínio do workload chegam ao firewall, e a regra executa a instância de Process Request Data Into Headers em cada uma.