Agent container image
- English
- 日本語
The official name of the container image for the Next-Gen WAF agent (formerly known as the Signal Sciences agent) is signalsciences/sigsci-agent. The sigsci-agent container image is available on Docker Hub. You can pull this image with signalsciences/sigsci-agent:latest (or replace latest with a version tag). If you need to modify this image or want to build it locally, then follow the instructions below.
Custom sigsci-agent Dockerfile
You can build on top of the existing sigsci-agent container image using FROM. However, some care needs to be taken as the Dockerfile is set up to run commands as the sigsci user instead of root. If you use the recommended Dockerfile, then you may need to change to the root user, then back to the sigsci user after any system modifications are done.
Example: Installing an additional package
123456789# Start from the official sigsci-agent containerFROM signalsciences/sigsci-agent:latest
# Change to root to install a package, using `sl` as an exampleUSER rootRUN apk --no-cache add sl
# Change back to the sigsci user at the end for runtimeUSER sigsciBuild the agent Docker container image
Both https://dl.security.fastly.com and https://dl.signalsciences.net host the recommended sigsci-agent Dockerfile in the sigsci-agent distribution .tar.gz archive. To download and unpack the archive and then build the Docker container image, run the following commands in a terminal application:
- dl.security.fastly.com
- dl.signalsciences.net
$ curl -O https://dl.security.fastly.com/sigsci-agent/sigsci-agent_latest.tar.gz$ mkdir sigsci-agent && tar zxvf sigsci-agent_latest.tar.gz -C sigsci-agent$ cd sigsci-agent$ make docker$ curl -O https://dl.signalsciences.net/sigsci-agent/sigsci-agent_latest.tar.gz$ mkdir sigsci-agent && tar zxvf sigsci-agent_latest.tar.gz -C sigsci-agent$ cd sigsci-agent$ make dockerYou can use a custom name for the tags by setting IMAGE_NAME (e.g., make IMAGE_NAME=custom-prefix/sigsci-agent docker).
To build manually, run the following command, replacing YOUR-TAG and YOUR-VERSION:
$ docker build . -t your-tag:your-versionIntegrating the Next-Gen WAF agent
The Next-Gen WAF agent can be installed as a sidecar into each pod or as a service for some specialized needs.
To install the Next-Gen WAF agent in Kubernetes, integrate the sigsci-agent into a pod as a sidecar, a multi-container pod pattern that Kubernetes supports natively. This means adding the sigsci-agent as an additional container to the Kubernetes pod. As a sidecar, the agent scales with the app or service in the pod rather than scaling separately. In some situations, installing the sigsci-agent container as a service and scaling it separately fits the deployment better.
The sigsci-agent container can be configured in various ways depending on the installation type and module being used.
You can use the preStop container hook to slow the pod's shutdown and ensure drain timeouts are met.
preStop: exec: command: - sleep - "30"By default, the agent prioritizes quick start up and performance readiness for preliminary inspection. However, quick startup isn't always desirable if you only want the agent to inspect traffic after loading your rules and configuration data. If you want to delay agent startup, consider configuring a startup probe.
Getting and updating the agent container image
These instructions reference the latest version of the agent with imagePullPolicy: Always, which will pull the latest agent version even if one already exists locally. This is so the documentation does not fall out of date and continue using a stagnant agent.
However, this may not be what you need to keep installations consistent or on a specific version of the agent. In these cases, you should specify an agent version. Images on Docker Hub are tagged with their versions and a list of versions is available.
Whether you choose to use the latest image or a specific version, there are a few items to consider to keep the agent up-to-date.
Using the latest container image
If you do choose to use the latest image, then you will want to consider how you will keep the agent up to date.
If you have used the
imagePullPolicy: Alwaysoption, the agent pulls the latest image on startup, and it will continue to receive updates.Alternatively, you may choose to manually update the local cache by periodically forcing a pull instead of always pulling on startup:
$ docker pull signalsciences/sigsci-agent:latestThen, use
latestwithimagePullPolicy: Neverset in the configuration so that pulls are never done on startup (only manually as above):- name: sigsci-agentimage: signalsciences/sigsci-agent:latestimagePullPolicy: Never...
Using a versioned container image
To use a specific version of the agent, replace latest with the agent version (represented here by x.xx.x). You may also want to change imagePullPolicy: IfNotPresent in this case as the image should not change.
- name: sigsci-agent image: signalsciences/sigsci-agent:x.xx.x imagePullPolicy: IfNotPresent ...This will pull the specified agent version and cache it locally. If you use this method, then we recommend parameterizing the agent image, using Helm or similar, so that future agent image updates are easier.
Using a custom tag for the container image
It is also possible to apply a custom tag to a local agent image. Pull the agent image by version or using latest. Apply a custom tag, and then use that custom tag in the configuration. You will need to specify imagePullPolicy: Never so local images are only updated manually. After doing so, you will need to periodically update the local image to keep the agent up-to-date.
For example:
$ docker pull signalsciences/sigsci-agent:latest$ docker tag signalsciences/sigsci-agent:latest signalsciences/sigsci-agent:testingThen use this image tag in the configuration:
- name: sigsci-agent image: signalsciences/sigsci-agent:testing imagePullPolicy: Never...Configuring the agent container
Agent configuration is normally done via the environment. Most configuration options are available as environment variables. By default, environment variables:
- have names that begin with
SIGSCI_ - capitalize the option name
- change dashes (-) to underscores (_)
For example, the max-procs option would become the SIGSCI_MAX_PROCS environment variable. For more details on which options are available, see the Agent Configuration documentation.
The sigsci-agent container has a few required options that need to be configured:
- Agent credentials (Agent Access Key and Agent Secret Key).
- A volume to write temporary files.
Agent credentials
The sigsci-agent credentials are configured with two environment variables. These variables must be set or the agent will not start.
- SIGSCI_ACCESSKEYID: The Agent Access Key identifies which workspace (also known as site) the agent is configured for.
- SIGSCI_SECRETACCESSKEY: The Agent Secret Key is the shared secret key to authenticate and authorize the agent.
Because of the sensitive nature of these values, we recommend you use the built in secrets functionality of Kubernetes. With this configuration, the agent will pull the values from the secrets data instead of reading hardcoded values into the deployment configuration. This also makes any desired agent credential rotation easier to manage by having to change them in only one place.
Use the valueFrom option instead of the value option to use the secrets functionality. For example:
12345678910111213env: - name: SIGSCI_ACCESSKEYID valueFrom: secretKeyRef: # Update my-site-name-here to the correct workspace (site) name or similar identifier name: sigsci.my-site-name-here key: accesskeyid - name: SIGSCI_SECRETACCESSKEY valueFrom: secretKeyRef: # Update my-site-name-here to the correct workspace (site) name or similar identifier name: sigsci.my-site-name-here key: secretaccesskeyThe secrets functionality keeps secrets in various stores in Kubernetes. This guide uses the generic secret store in its examples. However, any equivalent store can be used. Agent secrets can be added to the generic secret store using YAML similar to the following example:
apiVersion: v1kind: Secretmetadata: name: sigsci.my-site-name-herestringData: accesskeyid: 12345678-abcd-1234-abcd-1234567890ab secretaccesskey: abcdefg_hijklmn_opqrstuvwxy_z0123456789ABCDThis can also be created from the command line with kubectl such as with the following example:
$ kubectl create secret generic sigsci.my-site-name-here \ --from-literal=accesskeyid=12345678-abcd-1234-abcd-1234567890ab \ --from-literal=secretaccesskey=abcdefg_hijklmn_opqrstuvwxy_z0123456789ABCDAdditional information about Kubernetes secrets functionality can be found in the Kubernetes documentation.
Agent temporary volume
For added security, we recommended the sigsci-agent container be executed with the root filesystem mounted as read only. However, the agent still needs to write some temporary files such as the socket file for RPC communication and some periodically updated files such as geolocation data.
To accomplish this with a read only root filesystem, there needs to be a writeable volume mounted. This writeable volume can also be shared to expose the RPC socket file to other containers in the same pod.
The recommended way of creating a writeable volume is to use the builtin emptyDir volume type. This is typically configured in the volumes section of a deployment, as shown in the following example:
volumes: - name: sigsci-tmp emptyDir: {}Containers will then mount this volume at /sigsci/tmp:
volumeMounts: - name: sigsci-tmp mountPath: /sigsci/tmpThe default in the official agent container image is to have the temporary volume mounted at /sigsci/tmp. If this needs to be moved for the agent container, then the following agent configuration options should also be changed from their defaults to match the new mount location:
rpc-addressdefaults to/sigsci/tmp/sigsci.sockshared-cache-dirdefaults to/sigsci/tmp/cache