I am using an Ubuntu image because its a good middle ground than to write a MacOS and a Windows version. Once you see how this is done you can apply this to the rest of the integrations that are out for SecureX and Cisco Threat Response.
- Install Ubuntu 20.04 Desktop version on your VMWare environment.
- Get a SecureX account and an AWS account.
- Make sure you can login to you AWS account and access your API keys.
- Purchase Have I been pwned API key for $3.50 USD for 1 month. Make sure you have the API key they provide handy.
sudo apt update
sudo apt install git python3-pip python3-venv httpie
sudo pip3 install zappa
echo 'PATH=$PATH:~/.local/bin:.' >> ~/.bashrc
source ~/.bashrc
mkdir Documents/Development && cd Documents/Development
sudo apt install awscli
- Login in to your AWS console create a user called serverless and enable API access.
- Now in your Ubuntu 20.04 vm
aws configure
AWS Access Key ID [*******************U]:
AWS Secret Access Key [*******************h]:
Default region name [us-east-1]:
Default output format [None]:
Do this one time and you can stampout the integrations using this user
https://github.com/CiscoSecurity/tr-05-serverless-have-i-been-pwned/blob/develop/aws/HOWTO.md
Clone the repo then change into that directory. Then create a virtual environment for your python packages that you need for this repo.
git clone https://github.com/CiscoSecurity/tr-05-serverless-have-i-been-pwned.git
cd tr-05-serverless-have-i-been-pwned
python3 -m venv venv # Note if you use virtualenv to create your virtual environment it just doesnt seem to work... it deploys ok but just doesnt work.
source venv/bin/activate (To leave venv type 'deactivate' at the command prompt)
pip install -U -r requirements.txt
Now randomize the last couple of characters in the zappa_settings.json this is so the S3 bucket can be unique.
sed -i 's/zappa-tr-have-i-been-pwned-relay/zappa-tr-have-i-been-pwned-relay-<SOMETHING RANDOM>/g' zappa_settings.json
zappa deploy dev
Output of running zappa deploy dev
Zappa is a system for running server-less Python web applications on AWS Lambda and AWS API Gateway.
This `init` command will help you create and configure your new Zappa deployment.
Let's get started!
Your Zappa configuration can support multiple production stages, like 'dev', 'staging', and 'production'.
What do you want to call this environment (default 'dev'):
What do you want to call your bucket? (default ‘zappa-tr-have-i-been-pwned-relay-sjdfhsdkhfsdkhf’): <--- Type your own randomness.
It looks like this is a Flask application.
What's the modular path to your app's function?
This will likely be something like 'your_module.app'.
We discovered: app.app
Where is your app's function? (default 'app.app'): <--- leave it as app.app
You can optionally deploy to all available regions in order to provide fast global service.
If you are using Zappa for the first time, you probably don't want to do this!
Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]: n
Okay, here's your zappa_settings.json:
{
"dev": {
"app_function": "app.app",
"aws_region": "us-east-1",
"exclude": [".*", "*.json", "*.md", "*.txt"],
"keep_warm": false,
"log_level": "INFO",
"manage_roles": false,
"profile_name": "serverless",
"project_name": "tr-have-i-been-pwned-relay",
"role_name": "tr-serverless-relay-ZappaLambdaExecutionRole",
"runtime": "python3.7",
"s3_bucket": "zappa-tr-have-i-been-pwned-relay-sjdfhsdkhfsdkhf"
}
}
Does this look okay? (default 'y') [y/n]: y
In order to create the JWT token we need to go back to our Documents/Development directory and clone another repo.
cd ~/Documents/Development
git clone https://github.com/CiscoSecurity/tr-05-jwt-generator.git
cp tr-05-jwt-generator/jwt_generator.py ./tr-05-serverless-have-i-been-pwned/.
cd tr-05-serverless-have-i-been-pwned/.
python3 jwt-generator.py dev
- The SECRET_KEY goes into the AWS console Lambda environment variable while the JWT is applied in CTR or SecureX
- NOTE: If you want to fix the Werkzeug error you can do so by:
echo 'Werkzeug==0.16.1' >> requirements.txt
Enter your API key that you obtained from HaveIBeenPwned (I am using a dummy key as you can see)
This will print out your Lambda URL location which you will need for CTR or SecureX when you add the integration.
zappa status
First install httpie so you can do a HTTP POST to the URL gotten from zappa status
sudo apt install httpie
Now perform the following and it should give an output similar to the below.
http POST <LAMBDA URL>/health 'Authorization: Bearer <JWT>'
Go to the # Now create the JWT token section and create your SECRET_KEY and JWT token
export SECRET_KEY='<what ever the secret key is>'
flask run
# Go to the commandline testing section at the end.
# Probably want to daemonize it https://blog.miguelgrinberg.com/post/running-a-flask-application-as-a-service-with-systemd