# Instalacja i konfiguracja

## Wymagania wstępne

Aby pomyślnie przeprowadzić integrację z wykorzystaniem Netacea, będziesz potrzebować:

1. Konta AWS z uprawnieniami administracyjnymi dla Lambda i CloudFront.
2. Działającej dystrybucji Amazon CloudFront.
3. Pliku z kodem Lambda (.zip) - dostarczonego przez Netacea<mark style="color:green;">\*</mark>
4. Szczegółowych informacji dotyczących odpowiednich kluczy API i Secret oraz punktu końcowego Kinesis - dostarczonych przez Netacea.

{% hint style="info" %} <mark style="color:green;">\*</mark>Plik .zip, który Netacea udostępniła, zawiera zależności kodu, trzy funkcje Lambda oraz plik konfiguracyjny NetaceaConfig.js, który należy uzupełnić szczegółami dotyczącymi Twojej integracji z Netacea.
{% endhint %}

## Tworzenie funkcji Lambda

Aby rozpocząć tworzenie funkcji Lambda, najpierw zaloguj się do konsoli AWS i przejdź do aplikacji 'Lambda'. Można to zrobić, wyszukując 'Lambda' w interfejsie użytkownika.

Po przejściu do aplikacji sprawdź, czy Twoja lokalizacja/region jest ustawiona na `us-east-1.` Jeśli nie, zmień ją na tę wartość. Funkcje Lambda muszą być tworzone w regionie AWS `us-east-1`, w przeciwnym razie nie będą dostępne do użycia z CloudFront.

### Tworzenie funkcji

Netacea wymaga 3 funkcji Lambda do tej integracji i można je utworzyć, postępując zgodnie z poniższymi krokami. Ten proces należy powtórzyć dla każdej funkcji Lambda.

#### Tworzenie funkcji

Aby rozpocząć tworzenie funkcji, kliknij przycisk tworzenia funkcji, znajdujący się w prawym górnym rogu interfejsu użytkownika

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

Po wykonaniu tej czynności zostanie wyświetlony poniższy ekran.

Wybierz opcję 'Author from scratch', a następnie nadaj nazwę funkcji. Netacea zaleca, aby każda funkcja była nazwana zgodnie z jej typem, z prefiksem 'netacea\_'. Przykłady znajdziesz poniżej:

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

Każda funkcja powinna być utworzona z domyślnymi ustawieniami w sekcji "Basic Information"

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

#### Uprawnienia

Podczas tworzenia funkcji Lambda ważne jest, aby upewnić się, że mają one prawidłową **domyślną rolę wykonawczą**. Polityka, którą powinna zawierać, to **Basic Lambda\@Edge permissions (for CloudFront trigger)**. Jeśli nie istnieje rola z taką polityką, należy ją utworzyć. Zobacz poniżej:

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

#### Przesyłanie pliku Zip

Po utworzeniu funkcji Lambda należy dodać kod Netacea poprzez przesłanie dostarczonego pliku zip. Można go pobrać z portalu administracyjnego Netacea.

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

Prześlij dostarczony przez Netacea plik zip.

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

Po przesłaniu pliku do funkcji otwórz plik `NetaceaConfig.json` z interfejsu źródła kodu i uzupełnij go szczegółami dostarczonymi przez Netacea.

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

Więcej informacji na temat każdego atrybutu w pliku konfiguracyjnym znajdziesz poniżej:

Poniższy fragment kodu pokazuje omówiony wcześniej plik `NetaceaConfig.json`. Należy go uzupełnić szczegółami dostarczonymi przez Netacea dla Twojej organizacji. Można go skopiować i wkleić ze wszystkimi odpowiednimi danymi z portalu administracyjnego 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" %}
Atrybut `mitigationType` służy do określenia trybu integracji. Może przyjmować jedną z trzech wartości:

* "**INGEST**" - Ten tryb integracji służy wyłącznie do monitorowania, co oznacza, że żadne działania mitygacyjne nie będą wykonywane. Jest to zalecane podczas POC.
* "**MITIGATE**" - Jest to "normalny" tryb integracji, co oznacza, że rozwiązanie Netacea będzie monitorować i aktywnie mitygować żądania.
* "**INJECT**" - Ten tryb jest używany w niestandardowych rozwiązaniach, w których działanie mitygacyjne Netacea będzie jedynie rekomendacją przy użyciu nagłówków HTTP dodanych do żądania.
  {% endhint %}

{% hint style="danger" %}
Ostatnie trzy zmienne konfiguracyjne służą do zwiększenia bezpieczeństwa poprzez ukrycie domyślnych nazw i wartości plików cookie Netacea przed widokiem publicznym.
{% endhint %}

Po zaktualizowaniu kodu `NetaceaConfig.json` kliknij przycisk **Deploy**, aby zapisać zmiany.

#### Edycja ustawień środowiska uruchomieniowego

Ustawienia środowiska uruchomieniowego będą wymagały aktualizacji.

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

Przewiń poniżej sekcji Code Source do sekcji Runtime settings i kliknij przycisk **Edit**.

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

Tutaj zmień domyślny handler z `index.handler` na nazwę odpowiedniej funkcji, którą tworzysz (np. użyj `OriginResponse.handler` dla funkcji *netacea\_origin\_response*). Użyj poniższej listy, aby dopasować nazwę funkcji do prawidłowej funkcji handlera:

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

Po określeniu prawidłowego handlera kliknij **Save**.

#### Dodawanie wyzwalaczy

Po zapisaniu i wdrożeniu zmian należy dodać wyzwalacz CloudFront do funkcji Lambda. Pozwala to dystrybucji CloudFront na wykonywanie funkcji Lambda.\
\
W lewym dolnym rogu sekcji **Function overview** kliknij Add Trigger.

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

Zostanie wyświetlona strona **Trigger configuration**, na której użytkownikowi zostanie przedstawiona opcja wyboru wyzwalacza z listy rozwijanej. Jako źródło wybierz CloudFront.

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

Wybierz **Deploy to Lambda\@Edge** i wybierz prawidłową dystrybucję oraz CloudFront Event, który będzie miał **taką samą nazwę jak właśnie utworzona funkcja** (np. Viewer Request).

{% hint style="info" %}
Dla zdarzenia opartego na **Netacea\_Viewer\_Request** wymagane jest wybranie opcji **Include Body**.
{% endhint %}

Wybierz **Confirm deploy to Lambda\@Edge**, a następnie kliknij **Deploy.**

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

Po wdrożeniu zostanie utworzona nowa wersja funkcji i powiązany wyzwalacz CloudFront. Ta funkcja zostanie zreplikowana we wszystkich regionach, a powiązana dystrybucja również zostanie zaktualizowana.

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

{% hint style="warning" %}
Upewnij się, że powyższe kroki tworzenia funkcji i dodawania wyzwalacza zostały wykonane dla każdej funkcji Lambda\@Edge (**netacea\_viewer\_response**, **netacea\_viewer\_request** i **netacea\_origin\_response**)
{% endhint %}

### Metoda POST

Funkcje Lambda Netacea wymagają również możliwości wykonywania metod POST jako część naszego wyzwania Captcha. Aby to włączyć, przejdź do CloudFront w interfejsie użytkownika. Można to zrobić, wyszukując 'CloudFront' w interfejsie użytkownika

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

Po wejściu do aplikacji CloudFront wybierz dystrybucję, z którą będą używane funkcje Lambda. Następnie wybierz 'Behaviors'

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

Następnie wybierz domyślne zachowanie i kliknij 'Edit'. Na tej stronie znajduje się sekcja zatytułowana 'Allowed HTTP methods'. Jeśli nie jest jeszcze zaznaczona, kliknij przycisk radiowy obok 'GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE'

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

Na dole tej strony powinieneś również zobaczyć sekcję **Function associations**. Pokazuje ona typ funkcji (Viewer request, Viewer response, Origin request) oraz powiązane z nimi funkcje Lambda\@Edge. Upewnij się, że opcja 'Include body' jest zaznaczona dla funkcji 'Viewer request'.

Następnie wybierz 'Save changes'

### Testowanie

Aby przetestować funkcje Lambda, wybierz zakładkę **Test** i utwórz nowe zdarzenie.

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

### Podsumowanie

Po wykonaniu powyższych kroków i wdrożeniu funkcji wtyczka Netacea będzie aktywna.

Skontaktuj się z Netacea, aby omówić kolejne kroki i upewnić się, że wdrożenie integracji z Netacea zakończyło się sukcesem.
