# Instalação e Configuração

## Pré-requisitos

Para integrar com sucesso usando a Netacea, você precisará de:

1. Uma conta AWS com privilégios administrativos para Lambda e CloudFront.
2. Uma distribuição Amazon CloudFront funcional.
3. Arquivo de código Lambda (.zip) - fornecido pela Netacea<mark style="color:green;">\*</mark>
4. Detalhes das chaves de API e Secret relevantes, e um endpoint Kinesis - fornecidos pela Netacea.

{% hint style="info" %} <mark style="color:green;">\*</mark>O arquivo .zip que a Netacea compartilhou com você contém as dependências do código, as três funções Lambda e o arquivo de configuração NetaceaConfig.js que deve ser preenchido com os detalhes da sua integração com a Netacea.
{% endhint %}

## Criando as Lambdas

Para começar a criar as funções Lambda, primeiro faça login no console da AWS e navegue até o aplicativo 'Lambda'. Isso pode ser feito executando uma busca na interface por 'Lambda'.

Uma vez lá, verifique se sua localização/região está definida como `us-east-1.` Caso contrário, altere para essa região. As funções Lambda devem ser criadas na região AWS `us-east-1`, caso contrário, não estarão disponíveis para uso com o CloudFront.

### Criar Função

A Netacea requer 3 funções Lambda para esta integração e isso pode ser concluído seguindo os passos descritos abaixo. Você precisará repetir este processo para cada função Lambda.

#### Criando a Função

Para começar a criar a função, clique no botão criar função, localizado no canto superior direito da interface.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-1392ab3897c71e301291c828ca22a2658924fbbd%2Fimage%20(128).png?alt=media" alt=""><figcaption></figcaption></figure>

Após fazer isso, você verá a tela abaixo.

Por favor, selecione 'Author from scratch' e então nomeie a função. A Netacea sugere que cada função seja nomeada de acordo com cada tipo de função, prefixada com 'netacea\_'. Exemplos podem ser encontrados abaixo:

* netacea\_origin\_response
* netacea\_viewer\_request
* netacea\_viewer\_response

Cada função deve ser criada com as configurações padrão em "Basic Information"

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-0a71ffad38010a1bfe6816e41895946e06d0afd5%2Fimage%20(56).png?alt=media" alt=""><figcaption><p>Create Function Example Screenshot</p></figcaption></figure>

#### Permissões

Ao criar as Lambdas, é importante garantir que elas tenham a **default execution role** correta. A política que ela deve conter é **Basic Lambda\@Edge permissions (for CloudFront trigger)**. Se não houver uma role com esta política, será necessário criar uma. Veja abaixo:

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-ea450178c417c9cd0f6fb53e474b591a15f726fc%2FLambdaPermissions.png?alt=media" alt=""><figcaption><p>Permissions Example Screenshot</p></figcaption></figure>

#### Fazendo Upload do Arquivo Zip

Após a função Lambda ter sido criada, o código da Netacea precisará ser adicionado fazendo upload do arquivo zip fornecido. Este pode ser baixado do Portal Administrativo da Netacea.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-1134026692fb18f30f2ddd0f42b5fb5113bcd42e%2Fimage%20(55).png?alt=media" alt=""><figcaption></figcaption></figure>

Faça upload do arquivo zip fornecido pela Netacea.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-efc9ec3dac9e7d9ac2df87cdb7a7fe64ed5052d5%2Fimage%20(66).png?alt=media" alt=""><figcaption><p>Upload the zip file</p></figcaption></figure>

Após o arquivo ter sido carregado na função, abra o `NetaceaConfig.json` na interface do código fonte e preencha-o com os detalhes fornecidos pela Netacea.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-f078b5871303806e4b4f039818c0cfcd0dfa2197%2Fimage%20(58).png?alt=media" alt=""><figcaption></figcaption></figure>

Para mais informações sobre cada atributo no arquivo de configuração, veja abaixo:

O trecho de código abaixo mostra o arquivo `NetaceaConfig.json` discutido acima. Este deve ser preenchido com os detalhes que a Netacea forneceu para sua organização. Isso pode ser copiado e colado com todos os detalhes relevantes do Portal Administrativo da Netacea.

<pre class="language-json"><code class="lang-json">{
    "mitigationType": "CHOSEN-MITIGATION-TYPE",
    "apiKey": "API-KEY-PROVIDED-BY-NETACEA",
    "cookieEncryptionKey": "ENCRYPTION-KEY-PROVIDED-BY-NETACEA",
    "secretKey": "SECRET-KEY-PROVIDED-BY-NETACEA",
    "mitigationServiceUrl": "PROVIDED-BY-NETACEA",
    "ingestType": "KINESIS",
    "kinesis": {
<strong>        "kinesisStreamName": "NAME-PROVIDED-BY-NETACEA",
</strong>        "kinesisAccessKey": "KEY-PROVIDED-BY-NETACEA",
        "kinesisSecretKey": "KEY-PROVIDED-BY-NETACEA",
        "logBatchSize": 20,
        "maxLogAgeSeconds": 5
    },
    "netaceaCookieName": "_cookieName",
    "netaceaCookieAttributes": "HttpOnly; Secure",
    "netaceaCaptchaCookieName": "_captchaCookieName",
    "netaceaCaptchaCookieAttributes": "HttpOnly; Secure"
} 
</code></pre>

{% hint style="info" %}
O atributo `mitigationType` é usado para determinar o modo da integração. Este pode ser um de três valores:

* "**INGEST**" - Este modo de integração é apenas monitoramento, o que significa que nenhuma ação de mitigação será executada. Isso é recomendado durante POCs.
* "**MITIGATE**" - Este é o modo de integração "normal", o que significa que a solução Netacea irá monitorar e mitigar ativamente as requisições.
* "**INJECT**" - Este modo é usado em soluções customizadas nas quais a ação de mitigação pela Netacea será apenas uma recomendação usando cabeçalhos HTTP adicionados à requisição.
  {% endhint %}

{% hint style="danger" %}
As últimas três variáveis de configuração são usadas para aumentar a segurança ocultando os nomes e valores padrão dos cookies da Netacea da visualização pública.
{% endhint %}

Após o código `NetaceaConfig.json` ter sido atualizado, clique no botão **Deploy** para salvar suas alterações.

#### Editar Configurações de Runtime

As configurações de Runtime precisarão ser atualizadas.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-51845614bf736420753eb773c15e92f5fc7c7ccf%2Fimage%20(65).png?alt=media" alt=""><figcaption><p>Edit Runtime Settings</p></figcaption></figure>

Role abaixo de Code Source até a seção Runtime settings e clique no botão **Edit**.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-263680f56b0a813f2dea33f116341eba7d7fec2f%2Fimage%20(62).png?alt=media" alt=""><figcaption></figcaption></figure>

Aqui, altere o handler padrão de `index.handler` para o nome da função relevante que você está criando (por exemplo, use `OriginResponse.handler` para a função *netacea\_origin\_response*). Use a lista abaixo para correlacionar o nome da função com a função handler correta:

* netacea\_origin\_response -> `OriginResponse.handler`
* netacea\_viewer\_request -> `ViewerRequest.handler`
* netacea\_viewer\_response -> `ViewerResponse.handler`

Após o handler correto ter sido especificado, clique em **Save**.

#### Adicionando os Triggers

Após as alterações terem sido salvas e implantadas, um trigger do CloudFront precisa ser adicionado à função Lambda. Isso permite que a distribuição CloudFront execute a Lambda.\
\
Na parte inferior esquerda da seção **Function overview**, clique em Add Trigger.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-098b656b17d674bacf00535c3cfabb102138afc1%2FFunction.png?alt=media" alt=""><figcaption></figcaption></figure>

Uma página de **Trigger configuration** será exibida, onde a opção de selecionar um trigger no menu suspenso será apresentada ao usuário. Para a source, selecione CloudFront.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-659e8b7f8a4cd463683e6b65af38d511ac817d70%2Fimage%20(61).png?alt=media" alt=""><figcaption></figcaption></figure>

Selecione **Deploy to Lambda\@Edge** e selecione a distribuição correta e o CloudFront Event, que será o **mesmo nome da função que você acabou de criar** (por exemplo, Viewer Request).

{% hint style="info" %}
Para o evento baseado em **Netacea\_Viewer\_Request**, é necessário que você selecione a opção **Include Body**.
{% endhint %}

Selecione **Confirm deploy to Lambda\@Edge** e então clique em **Deploy.**

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-143e709ab2c747740389d21d3d98917f8baf39fb%2Fimage%20(60).png?alt=media" alt=""><figcaption></figcaption></figure>

Uma vez implantado, isso criará uma nova versão da função e associará o trigger do CloudFront. Esta função será replicada em todas as regiões e a distribuição associada também será atualizada.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-4286ca1cfbad7e8e0a2de50c91daeab940605133%2FFunctionOverview.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Por favor, certifique-se de que os passos acima para criar a função e adicionar um trigger foram concluídos para cada função Lambda\@Edge (**netacea\_viewer\_response**, **netacea\_viewer\_request** e **netacea\_origin\_response**)
{% endhint %}

### Método POST

As Lambdas da Netacea também requerem a capacidade de executar métodos POST como parte do nosso desafio Captcha. Para habilitar isso, navegue até o CloudFront na interface. Isso pode ser feito executando uma busca por 'CloudFront' na interface.

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-a0a881d21ece8aabf7eda8df6e75a5840d6f3f2e%2Fimage%20(129).png?alt=media" alt=""><figcaption><p>Search for CloudFront</p></figcaption></figure>

Dentro do aplicativo CloudFront, selecione a distribuição com a qual as Lambdas serão usadas. Em seguida, selecione 'Behaviors'

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-2c66be7feaad4b690dd54f3e6871b533f629695c%2Fimage%20(130).png?alt=media" alt=""><figcaption><p>Behaviors</p></figcaption></figure>

Em seguida, selecione o comportamento padrão e clique em 'Edit'. Nesta página haverá uma seção intitulada 'Allowed HTTP methods'. Se ainda não estiver selecionado, clique no botão de opção ao lado de 'GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE'

<figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-47b0618974f18b45a1a42bdde0d16d06b429ad75%2Fimage%20(131).png?alt=media" alt=""><figcaption><p>HTTP Methods</p></figcaption></figure>

Você também deve conseguir ver as **Function associations** na parte inferior desta página. Isso mostra o Function Type (Viewer request, Viewer response, Origin request) e suas funções Lambda\@Edge associadas. Por favor, certifique-se de que 'Include body' esteja marcado para a função 'Viewer request'.

Em seguida, selecione 'Save changes'

### Testando

Para testar as Lambdas, selecione a aba **Test** e crie um novo evento.

<div align="left"><figure><img src="https://3103183613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ0VONni9fqVKgqwRyueW%2Fuploads%2Fgit-blob-e020cb855a03ec3d2430e537a3f9bc6d8e8b32ea%2FTesting.png?alt=media" alt=""><figcaption></figcaption></figure></div>

### Finalizando

Após os passos acima terem sido concluídos e as funções implantadas, o plugin da Netacea estará ativo.

Por favor, entre em contato com a Netacea para discutir os próximos passos e garantir que a implementação da integração com a Netacea foi bem-sucedida.
