Terraform AMI Refresh, Windows 10 box refresh

This commit is contained in:
Chris Long
2019-05-09 20:58:06 -07:00
parent 9c2710c808
commit f20589be4d
10 changed files with 87 additions and 42 deletions

View File

@@ -19,7 +19,7 @@ The supplied Terraform configuration can then be used to create EC2 instances an
3. Create a private/public keypair to use to SSH into logger: `ssh-keygen -b 2048 -f ~/.ssh/id_logger` 3. Create a private/public keypair to use to SSH into logger: `ssh-keygen -b 2048 -f ~/.ssh/id_logger`
4. Copy the file at [/DetectionLab/Terraform/terraform.tfvars.example](./terraform.tfvars.example) to `/DetectionLab/Terraform/terraform.tfvars` 4. Copy the file at [/DetectionLab/Terraform/terraform.tfvars.example](./terraform.tfvars.example) to `/DetectionLab/Terraform/terraform.tfvars`
5. In `terraform.tfvars`, provide overrides for the variables specified in [variables.tf](./variables.tf) 5. In `terraform.tfvars`, provide overrides for the variables specified in [variables.tf](./variables.tf)
6. From the `/DetectionLab/Terraform/` directory, run `terraform init` to setup the initial Terraform configuration 6. From the `/DetectionLab/Terraform` directory, run `terraform init` to setup the initial Terraform configuration
7. Run `terraform apply` to begin the provisioning process 7. Run `terraform apply` to begin the provisioning process
[![DetectionLab - Terraform](https://i.vimeocdn.com/video/777172792_640.webp)](https://vimeo.com/331695321) [![DetectionLab - Terraform](https://i.vimeocdn.com/video/777172792_640.webp)](https://vimeo.com/331695321)

View File

@@ -19,3 +19,14 @@ One method for spinning up DetectionLab in AWS is to begin by using Virtualbox o
This method has the benefit of allowing users to customize the VMs before importing them to AWS. This method has the benefit of allowing users to customize the VMs before importing them to AWS.
The instructions for deploying DetectionLab in AWS via this method are available here: [Build Your Own AMIs README](./VM_to_AMIs.md) The instructions for deploying DetectionLab in AWS via this method are available here: [Build Your Own AMIs README](./VM_to_AMIs.md)
### Current AMI Listing
| Region | Name | AMI-ID |
|--------|------|--------|
| us-west-1 | detectionlab-dc | ami-03e2df055c632a0dd |
| us-west-1 | detectionlab-wef | ami-03c82482c03a740c5 |
| us-west-1 | detectionlab-win10 | ami-0a4644e74768900f7 |
| us-east-1 | detectionlab-dc | ami-0eba8a430eb9c0d92 |
| us-east-1 | detectionlab-wef | ami-077981880d8b81b6b |
| us-east-1 | detectionlab-win10 | ami-0d1b75d4a41ff0e0a |

View File

@@ -28,18 +28,18 @@ The supplied Terraform configuration can then be used to create EC2 instances an
7. Export the DetectionLab VMs as single file OVA files if they are not already in that format 7. Export the DetectionLab VMs as single file OVA files if they are not already in that format
8. [Upload the OVAs to the S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) you created in step three 8. [Upload the OVAs to the S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) you created in step three
9. Edit the `logger.json`, `dc.json`, `wef.json` and `win10.json` files and modify the S3Bucket and S3Key headers to match the location of the OVA files in your S3 bucket. 9. Edit the `dc.json`, `wef.json` and `win10.json` files and modify the S3Bucket and S3Key headers to match the location of the OVA files in your S3 bucket.
10. Import the VMs from S3 as AMIs by running the following commands: 10. Import the VMs from S3 as AMIs by running the following commands:
``` ```
aws ec2 import-image --description "dc" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/dc.json aws ec2 import-image --description "dc" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/dc.json
aws ec2 import-image --description "wef" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/wef.json aws ec2 import-image --description "wef" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/wef.json
aws ec2 import-image --description "win10" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/win10.json aws ec2 import-image --description "win10" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/win10.json
aws ec2 import-image --description "logger" --license-type byol --disk-containers file:///path/to/DetectionLab/Terraform/vm_import/logger.json
``` ```
11. Check on the status of the importation with the following command: 11. Check on the status of the importation with the following command:
```aws ec2 describe-import-image-tasks --import-task-ids <import-ami-xxxxxxxxxxxxxxxxx>``` ```aws ec2 describe-import-image-tasks --import-task-ids <import-ami-xxxxxxxxxxxxxxxxx>```
12. Fill out the variables in `/path/to/DetectionLab/Terraform/terraform.tfvars` 12. Copy the file at [/DetectionLab/Terraform/terraform.tfvars.example](./terraform.tfvars.example) to `/DetectionLab/Terraform/terraform.tfvars`
13. Run `terraform init` to setup the initial Terraform configuration 13. Fill out the variables in `/DetectionLab/Terraform/terraform.tfvars`
14. `cd /path/to/DetectionLab/Terraform/Method1 && terraform apply` 14. Run `terraform init` to setup the initial Terraform configuration
15. cd to `DetectionLab/Terraform` and run `terraform apply`

View File

@@ -152,7 +152,7 @@ resource "aws_instance" "logger" {
# Provision the AWS Ubuntu 16.04 AMI from scratch. # Provision the AWS Ubuntu 16.04 AMI from scratch.
provisioner "remote-exec" { provisioner "remote-exec" {
inline = [ inline = [
"sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install -y git", "sudo add-apt-repository universe && sudo apt-get -qq update && sudo apt-get -qq install -y git",
"echo 'logger' | sudo tee /etc/hostname && sudo hostnamectl set-hostname logger", "echo 'logger' | sudo tee /etc/hostname && sudo hostnamectl set-hostname logger",
"sudo adduser --disabled-password --gecos \"\" vagrant && echo 'vagrant:vagrant' | sudo chpasswd", "sudo adduser --disabled-password --gecos \"\" vagrant && echo 'vagrant:vagrant' | sudo chpasswd",
"sudo mkdir /home/vagrant/.ssh && sudo cp /home/ubuntu/.ssh/authorized_keys /home/vagrant/.ssh/authorized_keys && sudo chown -R vagrant:vagrant /home/vagrant/.ssh", "sudo mkdir /home/vagrant/.ssh && sudo cp /home/ubuntu/.ssh/authorized_keys /home/vagrant/.ssh/authorized_keys && sudo chown -R vagrant:vagrant /home/vagrant/.ssh",
@@ -180,7 +180,8 @@ resource "aws_instance" "logger" {
resource "aws_instance" "dc" { resource "aws_instance" "dc" {
instance_type = "t2.medium" instance_type = "t2.medium"
ami = "${var.dc_ami}" # Change the below variable to "${var.dc_ami}" if using hardcoded AMIs
ami = "${data.aws_ami.dc_ami.image_id}"
tags { tags {
Name = "dc.windomain.local" Name = "dc.windomain.local"
} }
@@ -194,7 +195,8 @@ resource "aws_instance" "dc" {
resource "aws_instance" "wef" { resource "aws_instance" "wef" {
instance_type = "t2.medium" instance_type = "t2.medium"
ami = "${var.wef_ami}" # Change the below variable to "${var.wef_ami}" if using hardcoded AMIs
ami = "${data.aws_ami.wef_ami.image_id}"
tags { tags {
Name = "wef.windomain.local" Name = "wef.windomain.local"
} }
@@ -208,7 +210,8 @@ resource "aws_instance" "wef" {
resource "aws_instance" "win10" { resource "aws_instance" "win10" {
instance_type = "t2.medium" instance_type = "t2.medium"
ami = "${var.win10_ami}" # Change the below variable to "${var.win10_ami}" if using hardcoded AMIs
ami = "${data.aws_ami.win10_ami.image_id}"
tags { tags {
Name = "win10.windomain.local" Name = "win10.windomain.local"
} }

View File

@@ -1,3 +1,7 @@
output region {
value = "${var.region}"
}
output "logger_public_ip" { output "logger_public_ip" {
value = "${aws_instance.logger.public_ip}" value = "${aws_instance.logger.public_ip}"
} }
@@ -13,3 +17,15 @@ output "wef_public_ip" {
output "win10_public_ip" { output "win10_public_ip" {
value = "${aws_instance.win10.public_ip}" value = "${aws_instance.win10.public_ip}"
} }
output "latest_dc_ami_id" {
value = "${data.aws_ami.dc_ami.image_id}"
}
output "latest_wef_ami_id" {
value = "${data.aws_ami.wef_ami.image_id}"
}
output "latest_win10_ami_id" {
value = "${data.aws_ami.wef_ami.image_id}"
}

View File

@@ -35,22 +35,47 @@ variable "external_dns_servers" {
default = ["8.8.8.8"] default = ["8.8.8.8"]
} }
# Use Data Sources to resolve the AMI-ID for the pre-built DC host
data "aws_ami" "dc_ami" {
owners = ["505638924199"]
filter {
name = "name"
values = ["detectionlab-dc"]
}
}
# Use Data Sources to resolve the AMI-ID for the pre-built WEF host
data "aws_ami" "wef_ami" {
owners = ["505638924199"]
most_recent = true
filter {
name = "name"
values = ["detectionlab-wef"]
}
}
# Use Data Sources to resolve the AMI-ID for the pre-built Win10 host
data "aws_ami" "win10_ami" {
owners = ["505638924199"]
most_recent = true
filter {
name = "name"
values = ["detectionlab-win10"]
}
}
# The logger host uses the Amazon Ubuntu 16.04 image # The logger host uses the Amazon Ubuntu 16.04 image
# If you are building your own AMIs, replace the default values below with # If you are building your own AMIs, replace the default values below with
# the AMI IDs # the AMI IDs
variable "logger_ami" {
type = "string"
default = "ami-0693b32d066fade8a"
}
variable "dc_ami" { variable "dc_ami" {
type = "string" type = "string"
default = "ami-0f0f0aaba01986b10" default = "ami-03e2df055c632a0dd"
} }
variable "wef_ami" { variable "wef_ami" {
type = "string" type = "string"
default = "ami-02566cd6ca3b7c6ae" default = "ami-03c82482c03a740c5"
} }
variable "win10_ami" { variable "win10_ami" {
type = "string" type = "string"
default = "ami-06a8a101dac68a81a" default = "ami-0a4644e74768900f7"
} }

View File

@@ -1,9 +0,0 @@
[
{
"Description": "logger",
"Format": "ova",
"UserBucket": {
"S3Bucket": "YOUR_BUCKET_GOES_HERE",
"S3Key": "logger.ova"
}
}]

View File

@@ -30,7 +30,7 @@ echo "Args: $ARGS"
# Disable IPv6 - may help with the vagrant-reload plugin: https://github.com/hashicorp/vagrant/issues/8795#issuecomment-468945063 # Disable IPv6 - may help with the vagrant-reload plugin: https://github.com/hashicorp/vagrant/issues/8795#issuecomment-468945063
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf sysctl -p /etc/sysctl.conf > /dev/null
if [[ "$VAGRANT_ONLY" -eq 1 ]] && [[ "$PACKER_ONLY" -eq 1 ]]; then if [[ "$VAGRANT_ONLY" -eq 1 ]] && [[ "$PACKER_ONLY" -eq 1 ]]; then
echo "[$(date +%H:%M:%S)]: Somehow this build is configured as both packer-only and vagrant-only. This means something has gone horribly wrong." echo "[$(date +%H:%M:%S)]: Somehow this build is configured as both packer-only and vagrant-only. This means something has gone horribly wrong."
@@ -70,6 +70,10 @@ if [ "$PACKER_ONLY" -eq 0 ]; then
vagrant plugin install vagrant-reload vagrant plugin install vagrant-reload
fi fi
# Re-enable IPv6 - may help with the Vagrant Cloud slowness
echo "net.ipv6.conf.all.disable_ipv6=0" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf > /dev/null
# Make the Vagrant instances headless # Make the Vagrant instances headless
cd /opt/DetectionLab/Vagrant || exit 1 cd /opt/DetectionLab/Vagrant || exit 1
sed -i 's/vb.gui = true/vb.gui = false/g' Vagrantfile sed -i 's/vb.gui = true/vb.gui = false/g' Vagrantfile
@@ -80,8 +84,8 @@ if [ "$VAGRANT_ONLY" -eq 0 ]; then
# Install Packer # Install Packer
mkdir /opt/packer mkdir /opt/packer
cd /opt/packer || exit 1 cd /opt/packer || exit 1
wget --progress=bar:force https://releases.hashicorp.com/packer/1.3.2/packer_1.3.2_linux_amd64.zip wget --progress=bar:force https://releases.hashicorp.com/packer/1.4.0/packer_1.4.0_linux_amd64.zip
unzip packer_1.3.2_linux_amd64.zip unzip packer_1.4.0_linux_amd64.zip
cp packer /usr/local/bin/packer cp packer /usr/local/bin/packer
# Make the Packer images headless # Make the Packer images headless

View File

@@ -17,11 +17,8 @@ apt-get install -y linux-headers-"$(uname -r)" virtualbox-5.2 build-essential un
pip install awscli --upgrade --user pip install awscli --upgrade --user
export PATH=$PATH:/root/.local/bin export PATH=$PATH:/root/.local/bin
echo "building" > /var/www/html/index.html
# Set up firewall # Set up firewall
ufw allow ssh ufw allow ssh
ufw allow http
ufw default allow outgoing ufw default allow outgoing
ufw --force enable ufw --force enable
@@ -41,8 +38,8 @@ sed -i 's/vb.gui = true/vb.gui = false/g' Vagrantfile
# Install Packer # Install Packer
mkdir /opt/packer mkdir /opt/packer
cd /opt/packer || exit 1 cd /opt/packer || exit 1
wget https://releases.hashicorp.com/packer/1.3.2/packer_1.3.2_linux_amd64.zip wget --progress=bar:force https://releases.hashicorp.com/packer/1.4.0/packer_1.4.0_linux_amd64.zip
unzip packer_1.3.2_linux_amd64.zip unzip packer_1.4.0_linux_amd64.zip
cp packer /usr/local/bin/packer cp packer /usr/local/bin/packer
# Make the Packer images headless # Make the Packer images headless

View File

@@ -1,9 +1,9 @@
#! /bin/bash #! /bin/bash
# This script is used to manually prepare an Ubuntu 16.04 server for DetectionLab building # This script is used to manually prepare an Ubuntu 16.04 server for DetectionLab building
export DEBIAN_FRONTEND=noninteractive
SERIALNUMBER="TODO" export SERIALNUMBER="SECRET"
LICENSEFILE="TODO" export LICENSEFILE="SECRET"
sed -i 's/archive.ubuntu.com/us.archive.ubuntu.com/g' /etc/apt/sources.list sed -i 's/archive.ubuntu.com/us.archive.ubuntu.com/g' /etc/apt/sources.list
@@ -14,7 +14,7 @@ fi
# Install VMWare Workstation 15 # Install VMWare Workstation 15
apt-get update apt-get update
apt-get install -y linux-headers-"$(uname -r)" build-essential unzip git ufw apache2 python-pip apt-get install -y linux-headers-"$(uname -r)" build-essential unzip git ufw apache2 python-pip ubuntu-desktop
pip install awscli --upgrade --user pip install awscli --upgrade --user
export PATH=$PATH:/root/.local/bin export PATH=$PATH:/root/.local/bin
@@ -22,11 +22,8 @@ wget -O VMware-Workstation-Full-15.0.4-12990004.x86_64.bundle "https://download3
chmod +x VMware-Workstation-Full-15.0.4-12990004.x86_64.bundle chmod +x VMware-Workstation-Full-15.0.4-12990004.x86_64.bundle
sudo sh VMware-Workstation-Full-15.0.4-12990004.x86_64.bundle --console --required --eulas-agreed --set-setting vmware-workstation serialNumber $SERIALNUMBER sudo sh VMware-Workstation-Full-15.0.4-12990004.x86_64.bundle --console --required --eulas-agreed --set-setting vmware-workstation serialNumber $SERIALNUMBER
echo "building" > /var/www/html/index.html
# Set up firewall # Set up firewall
ufw allow ssh ufw allow ssh
ufw allow http
ufw default allow outgoing ufw default allow outgoing
ufw --force enable ufw --force enable
@@ -39,7 +36,8 @@ wget --progress=bar:force https://releases.hashicorp.com/vagrant/2.2.4/vagrant_2
dpkg -i vagrant_2.2.4_x86_64.deb dpkg -i vagrant_2.2.4_x86_64.deb
vagrant plugin install vagrant-reload vagrant plugin install vagrant-reload
vagrant plugin install vagrant-vmware-desktop vagrant plugin install vagrant-vmware-desktop
vagrant plugin license vagrant-vmware-desktop $LICENSEFILE echo $LICENSEFILE | base64 -d > /tmp/license.lic
vagrant plugin license vagrant-vmware-desktop /tmp/license.lic
wget --progress=bar:force "https://releases.hashicorp.com/vagrant-vmware-utility/1.0.7/vagrant-vmware-utility_1.0.7_x86_64.deb" wget --progress=bar:force "https://releases.hashicorp.com/vagrant-vmware-utility/1.0.7/vagrant-vmware-utility_1.0.7_x86_64.deb"
dpkg -i vagrant-vmware-utility_1.0.7_x86_64.deb dpkg -i vagrant-vmware-utility_1.0.7_x86_64.deb