5.5 KiB
title | date | draft | pre | weight | tags | ||||
---|---|---|---|---|---|---|---|---|---|
Docker | 2020-05-26T20:57:28+03:00 | false | <i class="fab fa-docker"></i> | 4 |
|
Supported operating systems
The Infection Monkey Docker container works on Linux only. It is not compatible with Docker for Windows or Docker for Mac.
Deployment
1. Load the docker images
-
Pull the MongoDB v4.2 Docker image:
sudo docker pull mongo:4.2
-
Extract the Monkey Island Docker tarball:
tar -xvzf monkey-island-docker.tar.gz
-
Load the Monkey Island Docker image:
sudo docker load -i dk.monkeyisland.VERSION.tar
2. Start MongoDB
-
Start a MongoDB Docker container:
sudo docker run \ --name monkey-mongo \ --network=host \ --volume db:/data/db \ --detach \ mongo:4.2
3a. Start Monkey Island with default certificate
By default, Infection Monkey comes with a self-signed SSL certificate. In enterprise or other security-sensitive environments, it is recommended that the user provide Infection Monkey with a certificate that has been signed by a private certificate authority.
- Run the Monkey Island server
sudo docker run \ --name monkey-island \ --network=host \ guardicore/monkey-island:VERSION
3b. Start Monkey Island with user-provided certificate
-
Create a directory named
monkey_island_data
. This will serve as the location where Infection Monkey stores its configuration and runtime artifacts.mkdir ./monkey_island_data chmod 700 ./monkey_island_data
-
Run Monkey Island with the
--setup-only
flag to populate the./monkey_island_data
directory with a defaultserver_config.json
file.sudo docker run \ --rm \ --name monkey-island \ --network=host \ --user "$(id -u ${USER}):$(id -g ${USER})" \ --volume "$(realpath ./monkey_island_data)":/monkey_island_data \ guardicore/monkey-island:VERSION --setup-only
-
Move your
.crt
and.key
files to./monkey_island_data
. -
Make sure that your
.crt
and.key
files are readable and writeable only by you.chmod 600 ./monkey_island_data/<KEY_FILE> chmod 600 ./monkey_island_data/<CRT_FILE>
-
Edit
./monkey_island_data/server_config.json
to configure Monkey Island to use your certificate. Your config should look something like this:{ "data_dir": "/monkey_island_data", "log_level": "DEBUG", "environment": { "server_config": "password", "deployment": "docker" }, "mongodb": { "start_mongodb": false }, "ssl_certificate": { "ssl_certificate_file": "/monkey_island_data/<CRT_FILE>", "ssl_certificate_key_file": "/monkey_island_data/<KEY_FILE>" } }
-
Start the Monkey Island server:
sudo docker run \ --name monkey-island \ --network=host \ --user "$(id -u ${USER}):$(id -g ${USER})" \ --volume "$(realpath ./monkey_island_data)":/monkey_island_data \ guardicore/monkey-island:VERSION
4. Accessing Monkey Island
After the Monkey Island docker container starts, you can access Monkey Island by pointing your browser at https://localhost:5000
.
Upgrading
Currently, there's no "upgrade-in-place" option when a new version is released. To get an updated version, download it, stop the current container and run the installation commands again with the new file.
If you'd like to keep your existing configuration, you can export it to a file using the Export config button and then import it to the new Monkey Island.
Troubleshooting
The Monkey Island container crashes due to a 'UnicodeDecodeError'
You will encounter a UnicodeDecodeError
if the monkey-island
container is
using a different secret key to encrypt sensitive data than was initially used
to store data in the monkey-mongo
container.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xee in position 0: invalid continuation byte
Starting a new container from the guardicore/monkey-island:VERSION
image
generates a new secret key for storing sensitive information in MongoDB. If you
have an old database instance running (from a previous instance of Infection
Monkey), the data stored in the monkey-mongo
container has been encrypted
with a key that is different from the one that Monkey Island is currently
using. When MongoDB attempts to decrypt its data with the new key, decryption
fails and you get this error.
You can fix this in one of three ways:
- Instead of starting a new container for the Monkey Island, you can run
docker container start -a monkey-island
to restart the existing container, which will contain the correct key material. - Kill and remove the existing MongoDB container, and start a new one. This will remove the old database entirely. Then, start the new Monkey Island container.
- When you start the Monkey Island container, use
--volume monkey_island_data:/monkey_island_data
. This will store all of Monkey Island's runtime artifacts (including the encryption key file) in a docker volume that can be reused by subsequent Monkey Island containers.