AWS Elastic Container Service (ECS) の設定

Next-Gen WAF をサイドカーとして AWS Elastic Container Service (ECS) にデプロイできます。このデプロイオプションは、Fargate と EC2 の両方の起動タイプと互換性があります。

前提条件

サイト (ワークスペースとも呼ばれます) のエージェントキーをコピーします。これらのキーは、Next-Gen WAF を AWS ECS のサイドカーとして設定する際に使用します。

AWS ECS のセットアップ

Next-Gen WAF を AWS ECS のサイドカーとして設定するには、Amazon の ECS チュートリアル および サイドカーのドキュメントを参照してください。また、以下を必ず行ってください。

  • タスク定義のストレージボリュームタイプを Bind マウントに設定します。

  • Next-Gen WAF エージェント専用のコンテナを追加して、必ず以下を設定します。

    • Name フィールドを sigsci-agent に変更します。

    • Image URI* フィールドをsignalsciences:sigsci-agent:<agent-version>に変更します。<agent-version>特定のエージェントバージョンに置き換える必要があります。この変数を latest に設定すると、AWS は都合の悪いタイミングで Next-Gen WAF エージェントをアップグレードする可能性があります。

  • Next-Gen WAF エージェントコンテナのリソース制限 (ulimits) を設定します。nofile のソフト制限とハード制限は 65335 に設定します。これらの制限を低く設定しすぎると (デフォルトは 1024) 高すぎる場合よりも悪影響が生じます。

  • エージェントシークレットキーの環境変数を作成し、以下を必ず設定してください。

    • キーフィールドを SIGSCI_SECRETACCESSKEYに設定します。

    • Value フィールドを、インストール前提条件の完了中にコピーした secretaccesskey の値に設定します。

  • エージェントアクセスキーの環境変数を作成し、以下を必ず設定してください。

    • キーフィールドを SIGSCI_ACCESSKEYIDに設定します。

    • Value フィールドを、インストール前提条件の完了中にコピーした accesskeyid の値に設定します。

  • Next-Gen WAF エージェントコンテナのマウントポイントパスを /var/run に設定します。これは Next-Gen WAF エージェントのデフォルトパスですが、別のパスを設定することもできます。

JSON の設定例

ヒント:この例のJSONでは、すべての REPLACEME を置き換える必要があります。

{
"ipcMode": null,
"executionRoleArn": "arn:aws:iam::REPLACEME:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"secretOptions": null,
"options": {
"awslogs-group": "/ecs/sigsci-example",
"awslogs-region": "us-west-1",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": null,
"portMappings": [
{
"hostPort": 8080,
"protocol": "tcp",
"containerPort": 8080
}
],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [
{
"name": "apache_port",
"value": "8080"
},
{
"name": "sigsci_rpc",
"value": "/var/run/sigsci.sock"
}
],
"dnsServers": null,
"mountPoints": [
{
"readOnly": null,
"containerPath": "/var/run",
"sourceVolume": "run"
}
],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": null,
"volumesFrom": [],
"stopTimeout": null,
"image": "signalsciences/sigsci-agent:latest",
"startTimeout": null,
"firelensConfiguration": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": null,
"name": "apache"
},
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"secretOptions": null,
"options": {
"awslogs-group": "/ecs/sigsci-example",
"awslogs-region": "us-west-1",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": null,
"portMappings": [],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [
{
"name": "SIGSCI_ACCESSKEYID",
"value": "REPLACEME"
},
{
"name": "SIGSCI_SECRETACCESSKEY",
"value": "REPLACEME"
}
],
"ulimits": [
{
"name": "nofile",
"softLimit": 65335,
"hardLimit": 65335
}
],
"dnsServers": null,
"mountPoints": [
{
"readOnly": null,
"containerPath": "/var/run",
"sourceVolume": "run"
}
],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": null,
"volumesFrom": [],
"stopTimeout": null,
"image": "signalsciences/sigsci-agent:latest",
"startTimeout": null,
"firelensConfiguration": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": null,
"name": "agent"
}
],
"memory": "4096",
"taskRoleArn": "arn:aws:iam::REPLACEME:role/EcsServiceRole2",
"family": "sigsci-example",
"pidMode": null,
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "host",
"cpu": "2048",
"inferenceAccelerators": null,
"proxyConfiguration": null,
"volumes": [
{
"efsVolumeConfiguration": null,
"name": "run",
"host": {
"sourcePath": null
},
"dockerVolumeConfiguration": null
}
],
"tags": []
}