---
name: azion-instale-a-integracao-leakstream
description: >-
  Instale Axur Leakstream a partir de Azion Marketplace e execute-a em um firewall para sinalizar requisições de login que usam credenciais vazadas.
---

# Instale a integração Leakstream

Você instala a integração Axur Leakstream a partir de Azion Marketplace e a executa em um [firewall](/pt-br/documentacao/plataforma/firewall/), pelo Azion Console. Leakstream monitora a internet em busca de credenciais vazadas e verifica se uma combinação de nome de usuário e senha foi exposta em uma violação de dados conhecida. Use-a para proteger seu e-commerce de ataques de checker e proteger as credenciais dos seus usuários. A função extrai o nome de usuário e a senha do corpo de uma requisição de login, consulta a API do Axur Leakstream e adiciona cabeçalhos personalizados à requisição. Uma segunda função lê esses cabeçalhos e bloqueia a requisição, redireciona o usuário ou inicia um fluxo de verificação secundário.

Seis objetos precisam existir antes que uma requisição seja verificada: a função instalada, um firewall com o módulo **Functions**, uma instância da função Leakstream, uma instância da função de resposta, duas regras do Rules Engine com o behavior **Run Function** e um deployment de workload vinculado ao firewall. As seções abaixo criam esses objetos.

---

## Pré-requisitos

- Uma conta Azion. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Uma aplicação servida por um [workload](/pt-br/documentacao/plataforma/workloads/), cujo deployment você vincula ao firewall na última seção.
- Uma [conta Axur](https://www.axur.com/pt-br/) com um plano Leakstream compatível com o tamanho da sua base de clientes.
- Um **API Token** da Axur, que você obtém depois que a Axur habilita sua conta.
- [Azion CLI](/pt-br/documentacao/devtools/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](/pt-br/documentacao/fundamentos/precos/).

---

## Instale a integração

A função é instalada uma vez por conta. Para instalá-la:

1. **Abra Marketplace**

   Acesse [Azion Console](https://console.azion.com/) > **Marketplace**.

2. **Encontre a integração**

   Digite `Leakstream` no campo **Search on Marketplace** e selecione o card da integração. Navegar pelos cards e pelas categorias leva à mesma página.

3. **Selecione Install**

O card exibe `Successfully installed!` e `Latest version installed!`, e a função aparece na lista **Function** do drawer **Create Instance**.

---

## Crie o firewall

O firewall é onde as funções são instanciadas e onde ficam as regras que as executam. Para criar um:

1. **Abra a página Firewalls**

   Acesse [Azion Console](https://console.azion.com/) > **Firewalls** e crie um firewall.

2. **Nomeie o firewall**

   Na seção **General**, insira um **Name**. Por exemplo: `leakstream-firewall`.

3. **Ative o módulo Functions**

   Na seção **Modules**, ative o switch **Functions**.

4. **Salve o firewall**

O firewall exibe 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 cada configuração deste formulário, consulte [Defina as configurações principais de um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/firewall-definir-main-settings/).

---

## Crie a instância de função

A instância guarda seu API Token da Axur e os nomes dos campos de login. Para criá-la:

1. **Abra a aba Functions Instances**

   Em **Firewalls**, selecione seu firewall e, em seguida, a aba **Functions Instances**.

2. **Selecione + Function**

   Um firewall sem instâncias exibe a mesma ação como **Function Instance**. O drawer **Create Instance** é aberto.

3. **Nomeie a instância**

   Em **Name**, insira um nome. Por exemplo: `leakstream`.

4. **Selecione a função instalada**

   Em **Function**, selecione a função Axur Leakstream. A lista contém apenas as funções que executam em um firewall.

5. **Insira os argumentos**

   Em **Arguments**, o editor vem preenchido com os argumentos padrão da integração em JSON. Insira seus valores, como a próxima seção descreve.

6. **Selecione Save**

A instância aparece na aba **Functions Instances**.

### Argumentos

A instância recebe seu API Token e os campos a serem lidos:

```json
{
  "api_key": "YourAxurAPIKey",
  "username_field": "user",
  "password_field": "password",
  "password_hash_type": "sha256",
  "execute_hashing": false,
  "leakstream_timeout": 60000
}
```

| Variável             | Obrigatório | Descrição                                                                                                                                                                    |
| -------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api_key`            | Sim         | O API Token da sua conta Axur. Obrigatório, a menos que a variável de ambiente `AXUR_API_V1_LEAKSTREAM_API_KEY` esteja definida                                              |
| `username_field`     | Sim         | O nome do campo do corpo da requisição que contém o nome de usuário. Obrigatório, a menos que a variável de ambiente `AXUR_API_V1_LEAKSTREAM_USERNAME_FIELD` esteja definida |
| `password_field`     | Não         | O nome do campo do corpo da requisição que contém a senha                                                                                                                    |
| `password_hash_type` | Não         | O algoritmo de hash da senha. Valores aceitos: `md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`                                                                         |
| `execute_hashing`    | Não         | Quando `true`, a função aplica hash SHA-256 à senha antes de enviá-la à API da Axur. Use quando o frontend não aplica hash à senha                                           |
| `leakstream_timeout` | Não         | O timeout de conexão, em milissegundos, das requisições à API da Axur. O padrão é `60000` (60 segundos)                                                                      |

> **nota**
>
> A função aceita três tipos de conteúdo de requisição: `application/json`, `application/x-www-form-urlencoded` e `multipart/form-data`. Uma requisição com outro tipo de conteúdo passa sem uma chamada à API da Axur.

### Cabeçalhos que a função adiciona

A função Leakstream adiciona estes cabeçalhos ao objeto da requisição:

| Cabeçalho                          | Valor                                                         | Descrição                                                                       |
| ---------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `axur-leakstream-leaked`           | `true`                                                        | A combinação de nome de usuário e senha foi encontrada em uma violação de dados |
| `axur-leakstream-username-leaked`  | `true`                                                        | O nome de usuário, isoladamente, foi encontrado em uma violação de dados        |
| `axur-leakstream-missing-username` | `true`                                                        | O campo de nome de usuário não foi encontrado no corpo da requisição            |
| `axur-leakstream-error`            | `timeout`, `invalid-content-type` ou um código de status HTTP | Ocorreu um erro durante a chamada à API da Axur                                 |

---

## Crie a instância da função de resposta

Os critérios do Rules Engine do Firewall não correspondem a cabeçalhos de requisição personalizados. Por isso, a lógica de bloqueio fica em uma segunda função, que lê o cabeçalho `axur-leakstream-leaked` do objeto da requisição e retorna uma resposta.

A função abaixo retorna uma página HTML de aviso quando o cabeçalho é `true`:

```javascript
async function handleRequest(request) {
  const leaked = request.headers.get('axur-leakstream-leaked');

  if (leaked === 'true') {
    const html = `<!DOCTYPE html>
<html lang="en">
<head>
  <title>Warning!</title>
</head>
<body>
  <h1>Warning!</h1>
  <p>The combination of username and password provided was found in a data breach. You cannot use it.</p>
</body>
</html>`;
    return new Response(html, {
      status: 403,
      headers: { 'content-type': 'text/html;charset=UTF-8' },
    });
  }

  return fetch(request);
}

addEventListener('fetch', event => {
  return event.respondWith(handleRequest(event.request));
});
```

Crie uma função de firewall com este código e instancie-a no mesmo firewall, com os passos da seção anterior. Para criar uma função que executa em um firewall, consulte [Execute uma função em um firewall](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/firewall/).

> **dica**
>
> Sua função de resposta também pode ler o cabeçalho `axur-leakstream-username-leaked` e pedir que os usuários alterem a senha quando o nome de usuário, isoladamente, foi encontrado em uma violação de dados.

---

## Crie as regras

A integração usa duas regras no mesmo endpoint. A primeira regra executa a função Leakstream, e a segunda executa a função de resposta que age sobre os cabeçalhos. Uma regra do [Rules Engine para Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine/) seleciona as requisições que chegam a uma instância, por meio do behavior **Run Function**.

Para criar a regra que executa a função Leakstream:

1. **Abra a aba Rules Engine**

   Em **Firewalls**, selecione seu firewall e, em seguida, a aba **Rules Engine**.

2. **Selecione + Rule**

3. **Nomeie a regra**

   Em **Name**, insira um nome. Por exemplo: `Run Leakstream`.

4. **Defina os critérios**

   Na seção **Criteria**, limite a verificação ao seu endpoint de login ou de criação de conta, não a todas as requisições. Por exemplo: if `Request Method` *is equal to* `POST` **and** `Request URI` *matches* `/login`.

5. **Adicione o behavior Run Function**

   Na seção **Behaviors**, selecione **Run Function** e, em seguida, selecione a instância Leakstream.

6. **Selecione Save**

Para criar a regra que age sobre o resultado:

1. **Selecione + Rule**

2. **Nomeie a regra**

   Em **Name**, insira um nome. Por exemplo: `Block leaked credentials`.

3. **Defina os critérios**

   Na seção **Criteria**, corresponda ao mesmo endpoint da primeira regra. Por exemplo: if `Request Method` *is equal to* `POST` **and** `Request URI` *matches* `/login`.

4. **Adicione o behavior Run Function**

   Na seção **Behaviors**, selecione **Run Function** e, em seguida, selecione a instância da função de resposta.

5. **Selecione Save**

> **nota**
>
> O Rules Engine do Firewall processa as regras em ordem. A regra Leakstream precisa ter um **número de ordem menor** que a regra da função de resposta, para que os cabeçalhos existam antes que a segunda função os leia.

---

## Vincule o firewall ao workload

O vínculo fica no deployment do workload, então crie um deployment que nomeie a aplicação e o firewall:

```bash
azion create workload-deployment --workload-id <workload-id> --name <deployment-name> \
  --application-id <application-id> --firewall-id <firewall-id> --strategy-type default \
  --active true --current true
```

O comando exibe o id do novo deployment:

```text
Created Workload Deployment with ID 123456
```

As requisições ao domínio do workload chegam ao firewall, e as regras executam a instância Leakstream e a instância da função de resposta no endpoint de login.

---

## Próximos passos

- [Integrações do Marketplace](/pt-br/documentacao/plataforma/marketplace/integracoes.md): Todas as integrações que Azion Marketplace oferece e onde cada uma executa.
- [Rules Engine para Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine.md): Todos os critérios e behaviors que uma regra de firewall aceita.
- [Execute uma função em um firewall](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/firewall.md): Crie e instancie sua própria função em um firewall.
- [Atualize uma integração](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/integracoes/atualizar-uma-integracao.md): Mova uma integração instalada para a versão mais recente.
