diff --git a/CHANGELOG.md b/CHANGELOG.md index 5166df8..5dd6387 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ### ??? - Feature: Automatically push instance's subnet route into `server.conf` +- export `zone_id`, `dns_name` from aws_elb +- Fix the 4 subnet fixed mapping +- Fill in some examples + +### 0.0.5 +- Initial release of `generate-certs` module ### 0.0.4 - Standardization with other Unif.io OSS terraform modules diff --git a/examples/.gitkeep b/examples/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/generate-certs/main.tf b/generate-certs/main.tf new file mode 100644 index 0000000..7f2c32b --- /dev/null +++ b/generate-certs/main.tf @@ -0,0 +1,143 @@ +# OpenVPN Generate Certs + +## Creates IAM Role & Instance Profile +# TODO: figure out how to de-dup +resource "aws_iam_role" "gen_certs_role" { + name = "${var.stack_item_label}-${var.region}-gen-certs" + path = "/" + + assume_role_policy = < /etc/default/openvpn-cert-generator + - echo "S3_CERT_ROOT_PATH=\"${s3_cert_root_path}\"" >> /etc/default/openvpn-cert-generator + - echo "KEY_SIZE=${key_size}" >> /etc/default/openvpn-cert-generator + - echo "S3_DIR_OVERRIDE=${s3_dir_override}" >> /etc/default/openvpn-cert-generator + - echo "KEY_CITY=${key_city}" >> /etc/default/openvpn-cert-generator + - echo "KEY_ORG=${key_org}" >> /etc/default/openvpn-cert-generator + - echo "KEY_EMAIL=${key_email}" >> /etc/default/openvpn-cert-generator + - echo "KEY_OU=${key_ou}" >> /etc/default/openvpn-cert-generator + - echo "KEY_NAME=${cert_key_name}" >> /etc/default/openvpn-cert-generator + - echo "KEY_COUNTRY=${key_country}" >> /etc/default/openvpn-cert-generator + - echo "KEY_PROVINCE=${key_province}" >> /etc/default/openvpn-cert-generator + - echo "ACTIVE_CLIENTS=${active_clients}" >> /etc/default/openvpn-cert-generator + - echo "REVOKED_CLIENTS=${revoked_clients}" >> /etc/default/openvpn-cert-generator + - echo "OPENVPN_HOST=${openvpn_host}" >> /etc/default/openvpn-cert-generator + - echo "FORCE_CERT_REGEN=${force_cert_regen}" >> /etc/default/openvpn-cert-generator + - echo "S3_PUSH_DRYRUN=${s3_push_dryrun}" >> /etc/default/openvpn-cert-generator + + - systemctl start openvpn-cert-generator.service + +output : { all : '| tee -a /var/log/cloud-init-output.log' } diff --git a/generate-certs/variables.tf b/generate-certs/variables.tf new file mode 100644 index 0000000..42d519f --- /dev/null +++ b/generate-certs/variables.tf @@ -0,0 +1,123 @@ +# openvpn-generate-certs - Variables + +variable "ami_region" { + type = "string" +} + +variable "ami_region_lookup" { + # Not meant to be overwritten + type = "map" + + default = { + us-east-1 = "ami-6934c804" + ap-northeast-1 = "ami-b036d9d1" + custom = "" + } +} + +variable "ami_custom" { + type = "string" + description = "Artifact AMI" + default = "" +} + +variable "stack_item_fullname" { + type = "string" +} + +variable "stack_item_label" {} + +variable "instance_type" { + type = "string" + default = "m3.medium" +} + +variable "region" {} + +variable "key_name" {} + +# Do not include the s3:// prefix +# Format should be something like / +variable "s3_root_path" { + type = "string" +} + +# From AWS limits, max rules for an SG is ~50 +variable "cidr_whitelist" { + default = "0.0.0.0/0" +} + +variable "cert_key_size" { + default = 4096 +} + +variable "s3_dir_override" { + type = "string" + default = "" +} + +variable "key_city" { + type = "string" + default = "San Francisco" +} + +variable "key_org" { + type = "string" + default = "Fort-Funston" +} + +# This should probably stick around to help with notifications +variable "key_email" { + type = "string" + default = "cert-admin@example.com" +} + +variable "key_ou" { + type = "string" + default = "MyOrgUnit" +} + +variable "cert_key_name" { + type = "string" + default = "EasyRSA" +} + +variable "key_country" { + type = "string" + default = "US" +} + +variable "key_province" { + type = "string" + default = "CA" +} + +# Comma delimited list +variable "active_clients" { + type = "string" + default = "client" +} + +# Comma delimited list +variable "revoked_clients" { + type = "string" + default = "" +} + +variable "openvpn_host" { + description = "Publicly accessible hostname to openvpn server(s)" + type = "string" + default = "localhost" +} + +variable "force_cert_regen" { + description = "Force all certificates to be regenerated" + type = "string" + default = "false" +} + +variable "s3_push_dryrun" { + description = "Dry-run push of certificates into s3 location" + type = "string" + default = "false" +}