provider "aws" {} // details of the aws instance resource "aws_instance" "example" { ami = "ami-40d5672f" instance_type = "t2.micro" vpc_security_group_ids = ["${aws_security_group.instance.id}"] key_name = "${aws_key_pair.auth.id}" tags { Name = "phishing-machine" } user_data = < config.json sudo ./gophish HEREDOC } // details of security groups resource "aws_security_group" "instance" { name = "phishing-machine" description = "Phishing Campaign 2018 - Managed by Terraform" ingress { from_port = 3333 to_port = 3333 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 8080 to_port = 8080 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } resource "aws_key_pair" "auth" { key_name = "${var.key_name}" public_key = "${file(var.public_key_path)}" } variable "public_key_path" { description = "Enter the path to the SSH Public Key to add to AWS." default = "~/.ssh/id_rsa.pub" } variable "key_name" { default = "example" // insert your keypair name here description = "Desired name of AWS key pair" } // outputs ip when running "terraform apply" output "public_ip" { value = "${aws_instance.example.public_ip}" }