# インストールと構成

## 前提条件

Netaceaを使用して正常に連携するためには、以下が必要です：

1. LambdaおよびCloudFrontの管理者権限を持つAWSアカウント。
2. 稼働中のAmazon CloudFrontディストリビューション。
3. Lambdaコードファイル（.zip）- Netacea<mark style="color:green;">\*</mark>より提供
4. 関連するAPIキーとシークレットキー、およびKinesisエンドポイントの詳細 - Netaceaより提供。

{% hint style="info" %} <mark style="color:green;">\*</mark>Netaceaから共有された.zipファイルには、コードの依存関係、3つのLambda関数、およびNetaceaとの連携の詳細を入力する必要がある設定ファイルNetaceaConfig.jsが含まれています。
{% endhint %}

## Lambdaの作成

Lambda関数の作成を開始するには、まずAWSコンソールにログインし、「Lambda」アプリケーションに移動します。これはUI内で「Lambda」を検索することで実行できます。

移動後、ロケーション/リージョンが`us-east-1.`に設定されていることを確認してください。設定されていない場合は、このリージョンに変更してください。Lambda関数は`us-east-1` AWSリージョンで作成する必要があり、そうでない場合CloudFrontで使用できません。

### 関数の作成

Netaceaはこの連携に3つのLambda関数を必要とし、以下の手順に従って作成できます。各Lambda関数についてこのプロセスを繰り返す必要があります。

#### 関数の作成

関数の作成を開始するには、UIの右上隅にある「関数の作成」ボタンをクリックします。

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

これを行うと、以下の画面が表示されます。

「一から作成」を選択し、関数に名前を付けてください。Netaceaでは、各関数を関数タイプに応じて「netacea\_」をプレフィックスとして命名することを推奨しています。以下に例を示します：

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

各関数は「基本的な情報」のデフォルト設定で作成する必要があります。

<figure><img src="https://2885909206-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKs3gGgxDF9S8O56fhTGU%2Fuploads%2Fgit-blob-0a71ffad38010a1bfe6816e41895946e06d0afd5%2Fimage%20(56).png?alt=media" alt=""><figcaption><p>関数作成のスクリーンショット例</p></figcaption></figure>

#### 権限

Lambdaを作成する際は、正しい**デフォルト実行ロール**を持っていることを確認することが重要です。含まれるべきポリシーは\*\*Basic Lambda\@Edge permissions (for CloudFront trigger)\*\*です。このポリシーを持つロールがない場合は、作成する必要があります。以下を参照してください：

<figure><img src="https://2885909206-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKs3gGgxDF9S8O56fhTGU%2Fuploads%2Fgit-blob-ea450178c417c9cd0f6fb53e474b591a15f726fc%2FLambdaPermissions.png?alt=media" alt=""><figcaption><p>権限のスクリーンショット例</p></figcaption></figure>

#### Zipファイルのアップロード

Lambda関数が作成されたら、提供されたzipファイルをアップロードしてNetaceaのコードを追加する必要があります。これはNetacea管理ポータルからダウンロードできます。

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

Netaceaから提供されたzipファイルをアップロードします。

<figure><img src="https://2885909206-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKs3gGgxDF9S8O56fhTGU%2Fuploads%2Fgit-blob-efc9ec3dac9e7d9ac2df87cdb7a7fe64ed5052d5%2Fimage%20(66).png?alt=media" alt=""><figcaption><p>zipファイルのアップロード</p></figcaption></figure>

ファイルが関数にアップロードされたら、コードソースUIから`NetaceaConfig.json`を開き、Netaceaから提供された詳細情報を入力します。

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

設定ファイルの各属性の詳細については、以下を参照してください：

以下のコードスニペットは、上記で説明した`NetaceaConfig.json`ファイルを示しています。これは、Netaceaが組織に提供した詳細情報で入力する必要があります。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" %}
属性`mitigationType`は、連携のモードを決定するために使用されます。これは以下の3つの値のいずれかになります：

* "**INGEST**" - この連携モードは監視のみであり、緩和アクションは実行されません。POC中に推奨されます。
* "**MITIGATE**" - これは「通常」の連携モードであり、Netaceaソリューションがリクエストを監視し、積極的に緩和を行います。
* "**INJECT**" - このモードは、Netaceaによる緩和アクションがリクエストに追加されたHTTPヘッダーを使用した推奨としてのみ行われるカスタムソリューションで使用されます。
  {% endhint %}

{% hint style="danger" %}
最後の3つの設定変数は、Netaceaのデフォルトのcookie名と値を公開ビューから隠すことでセキュリティを向上させるために使用されます。
{% endhint %}

`NetaceaConfig.json`コードを更新したら、**Deploy**ボタンをクリックして変更を保存します。

#### ランタイム設定の編集

ランタイム設定を更新する必要があります。

<figure><img src="https://2885909206-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKs3gGgxDF9S8O56fhTGU%2Fuploads%2Fgit-blob-51845614bf736420753eb773c15e92f5fc7c7ccf%2Fimage%20(65).png?alt=media" alt=""><figcaption><p>ランタイム設定の編集</p></figcaption></figure>

コードソースの下のランタイム設定セクションまでスクロールし、**Edit**ボタンをクリックします。

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

ここで、デフォルトのハンドラーを`index.handler`から、作成している関数の該当する関数名に変更します（例：\_netacea\_origin\_response\_関数には`OriginResponse.handler`を使用）。以下のリストを使用して、関数名と正しいハンドラー関数を対応させてください：

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

正しいハンドラーを指定したら、**Save**をクリックします。

#### トリガーの追加

変更が保存されデプロイされたら、CloudFrontトリガーをLambda関数に追加する必要があります。これにより、CloudFrontディストリビューションがLambdaを実行できるようになります。\
\
**Function overview**セクションの左下にある「トリガーを追加」をクリックします。

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

**トリガー設定**ページが表示され、ドロップダウンからトリガーを選択するオプションがユーザーに提示されます。ソースとしてCloudFrontを選択します。

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

**Deploy to Lambda\@Edge**を選択し、正しいディストリビューションとCloudFrontイベントを選択します。これは**作成した関数と同じ名前**になります（例：Viewer Request）。

{% hint style="info" %}
**Netacea\_Viewer\_Request**ベースのイベントでは、**Include Body**オプションを選択する必要があります。
{% endhint %}

**Confirm deploy to Lambda\@Edge**を選択し、**Deploy**をクリックします。

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

デプロイすると、関数の新しいバージョンが作成され、CloudFrontトリガーが関連付けられます。この関数はすべてのリージョンにレプリケートされ、関連するディストリビューションも更新されます。

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

{% hint style="warning" %}
関数の作成とトリガーの追加に関する上記の手順が、各Lambda\@Edge関数（**netacea\_viewer\_response**、**netacea\_viewer\_request**、および**netacea\_origin\_response**）で完了していることを確認してください。
{% endhint %}

### POSTメソッド

Netacea LambdaはCaptchaチャレンジの一環としてPOSTメソッドを実行する機能も必要とします。これを有効にするには、UI内でCloudFrontに移動してください。これはUI内で「CloudFront」を検索することで実行できます。

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

CloudFrontアプリケーション内で、Lambdaを使用するディストリビューションを選択します。次に「Behaviors」を選択してください。

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

次に、デフォルトのビヘイビアを選択し、「Edit」をクリックします。このページには「Allowed HTTP methods」というセクションがあり、まだ選択されていない場合は、「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」の横にあるラジオボタンをクリックしてください。

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

このページの下部で**Function associations**も確認できるはずです。これは関数タイプ（Viewer request、Viewer response、Origin request）とそれに関連付けられたLambda\@Edge関数を示しています。「Viewer request」関数で「Include body」がチェックされていることを確認してください。

その後「Save changes」を選択してください。

### テスト

Lambdaをテストするには、**Test**タブを選択し、新しいイベントを作成します。

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

### 完了

上記の手順が完了し、関数がデプロイされると、Netaceaプラグインがアクティブになります。

Netaceaとの連携の実装が成功したことを確認し、次のステップについて話し合うためにNetaceaにご連絡ください。
