Skip to content

Commit 667f6fd

Browse files
committed
Updated certificate generation module for standardization
1 parent e2b9c83 commit 667f6fd

File tree

5 files changed

+191
-126
lines changed

5 files changed

+191
-126
lines changed

CHANGELOG.md

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
1-
# CHANGELOG
1+
## Unreleased
22

3-
### ???
3+
## ???
44

55
- Feature: Automatically push instance's subnet route into `server.conf`
66
- export `zone_id`, `dns_name` from aws_elb
77
- Fix the 4 subnet fixed mapping
88
- Fill in some examples
99

10-
### 0.0.5
10+
## 0.0.6
11+
12+
#### BREAKING CHANGES:
13+
- Updates in resource naming will cause churn for existing resources.
14+
15+
#### IMPROVEMENTS:
16+
- Standardization with other Unif.io OSS terraform modules
17+
- Documentation improvements
18+
- Updated security group scheme for OpenVPN server
19+
20+
## 0.0.5
21+
22+
#### FEATURES:
1123
- Initial release of `generate-certs` module
1224

13-
### 0.0.4
25+
## 0.0.4
26+
27+
#### IMPROVEMENTS:
1428
- Standardization with other Unif.io OSS terraform modules
1529
- CI Builder
1630
- Small tweaks:
@@ -20,15 +34,17 @@
2034
- lifecycle `create_before_destroy` fixes to deal with dependency issues on build.
2135
- somewhat breaking change: in_vpc now is `1`(true) instead of `0`(false)
2236

23-
### 0.0.3
37+
## 0.0.3
2438

39+
#### IMPROVEMENTS:
2540
- Fix: tag.application for elb reverted to using short name instead of full application name due to naming restrictions
2641

27-
### 0.0.2
42+
## 0.0.2
2843

44+
#### IMPROVEMENTS:
2945
- Fix: use updated `awscli` client from pip instead of apt
3046

31-
### 0.0.1
47+
## 0.0.1
3248

49+
#### FEATURES:
3350
- Basic functioning openvpn server working off us-east-1
34-

generate-certs/main.tf

Lines changed: 60 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
# OpenVPN Generate Certs
1+
# OpenVPN Certificate Generator
22

3-
## Creates IAM Role & Instance Profile
4-
# TODO: figure out how to de-dup
5-
resource "aws_iam_role" "gen_certs_role" {
6-
name = "${var.stack_item_label}-${var.region}-gen-certs"
3+
## Creates IAM role & policies
4+
resource "aws_iam_role" "role" {
5+
name = "${var.stack_item_label}-${var.region}"
76
path = "/"
87

98
assume_role_policy = <<EOF
@@ -22,9 +21,9 @@ resource "aws_iam_role" "gen_certs_role" {
2221
EOF
2322
}
2423

25-
resource "aws_iam_role_policy" "s3_gen_certs" {
26-
name = "s3_gen_certs"
27-
role = "${aws_iam_role.gen_certs_role.id}"
24+
resource "aws_iam_role_policy" "s3_certs_rw" {
25+
name = "s3_certs_rw"
26+
role = "${aws_iam_role.role.id}"
2827

2928
policy = <<EOF
3029
{
@@ -37,8 +36,8 @@ resource "aws_iam_role_policy" "s3_gen_certs" {
3736
"s3:PutObject"
3837
],
3938
"Resource": [
40-
"arn:aws:s3:::${replace(var.s3_root_path,"/(\/)+$/","")}",
41-
"arn:aws:s3:::${replace(var.s3_root_path,"/(\/)+$/","")}/*"
39+
"arn:aws:s3:::${var.s3_bucket}",
40+
"arn:aws:s3:::${var.s3_bucket}/*"
4241
]
4342
},
4443
{
@@ -47,17 +46,17 @@ resource "aws_iam_role_policy" "s3_gen_certs" {
4746
"s3:List*"
4847
],
4948
"Resource": [
50-
"arn:aws:s3:::${element(split("/", var.s3_root_path), 0)}"
49+
"arn:aws:s3:::${var.s3_bucket}"
5150
]
5251
}
5352
]
5453
}
5554
EOF
5655
}
5756

58-
resource "aws_iam_role_policy" "gen_certs_tags" {
59-
name = "gen-certs-tags"
60-
role = "${aws_iam_role.gen_certs_role.id}"
57+
resource "aws_iam_role_policy" "tags" {
58+
name = "tags"
59+
role = "${aws_iam_role.role.id}"
6160

6261
policy = <<EOF
6362
{
@@ -79,63 +78,80 @@ EOF
7978
}
8079

8180
## Creates IAM instance profile
82-
resource "aws_iam_instance_profile" "gen_certs_profile" {
83-
name = "${var.stack_item_label}-${var.region}-gen-certs"
84-
roles = ["${aws_iam_role.gen_certs_role.name}"]
81+
resource "aws_iam_instance_profile" "profile" {
82+
name = "${var.stack_item_label}-${var.region}"
83+
roles = ["${aws_iam_role.role.name}"]
8584
}
8685

8786
## Creates security group rules
88-
resource "aws_security_group" "generate_certs_sg" {
89-
name = "${var.stack_item_label}-${var.region}-gen-certs-sg"
90-
description = "${stack_item_fullname} security group"
87+
resource "aws_security_group" "sg_cert_gen" {
88+
name_prefix = "${var.stack_item_label}-${var.region}-"
89+
description = "${var.stack_item_fullname} security group"
90+
vpc_id = "${var.vpc_id}"
91+
92+
tags {
93+
Name = "${var.stack_item_label}"
94+
application = "${var.stack_item_fullname}"
95+
managed_by = "terraform"
96+
}
97+
}
98+
99+
resource "aws_security_group_rule" "allow_all_out" {
100+
type = "egress"
101+
from_port = 0
102+
to_port = 0
103+
protocol = "-1"
104+
cidr_blocks = ["0.0.0.0/0"]
105+
security_group_id = "${aws_security_group.sg_cert_gen.id}"
91106
}
92107

93-
resource "aws_security_group_rule" "allow_ssh_in_tcp" {
108+
resource "aws_security_group_rule" "allow_ssh_in" {
94109
type = "ingress"
95110
from_port = 22
96111
to_port = 22
97112
protocol = "tcp"
98113
cidr_blocks = ["${split(",",var.cidr_whitelist)}"]
99-
security_group_id = "${aws_security_group.generate_certs_sg.id}"
114+
security_group_id = "${aws_security_group.sg_cert_gen.id}"
100115
}
101116

102117
## Creates user instance data
103118
resource "template_file" "user_data" {
104119
template = "${file("${path.module}/templates/user_data.tpl")}"
105120

106121
vars {
107-
s3_region = "${var.region}"
108-
s3_cert_root_path = "s3://${var.s3_root_path}"
109-
key_size = "${var.cert_key_size}"
110-
s3_dir_override = "${var.s3_dir_override}"
111-
key_city = "${var.key_city}"
112-
key_org = "${var.key_org}"
113-
key_email = "${var.key_email}"
114-
key_ou = "${var.key_ou}"
115-
cert_key_name = "${var.cert_key_name}"
116-
key_country = "${var.key_country}"
117-
key_province = "${var.key_province}"
118-
active_clients = "${var.active_clients}"
119-
revoked_clients = "${var.revoked_clients}"
120-
openvpn_host = "${var.openvpn_host}"
121-
force_cert_regen = "${var.force_cert_regen}"
122-
s3_push_dryrun = "${var.s3_push_dryrun}"
122+
active_clients = "${var.active_clients}"
123+
cert_key_name = "${var.cert_key_name}"
124+
cert_key_size = "${var.cert_key_size}"
125+
force_cert_regen = "${var.force_cert_regen}"
126+
hostname = "${var.stack_item_label}"
127+
key_city = "${var.key_city}"
128+
key_country = "${var.key_country}"
129+
key_email = "${var.key_email}"
130+
key_org = "${var.key_org}"
131+
key_ou = "${var.key_ou}"
132+
key_province = "${var.key_province}"
133+
openvpn_host = "${var.openvpn_host}"
134+
region = "${var.region}"
135+
revoked_clients = "${var.revoked_clients}"
136+
s3_bucket = "${var.s3_bucket}"
137+
s3_dir_override = "${var.s3_bucket_prefix}"
138+
s3_push_dryrun = "${var.s3_push_dryrun}"
123139
}
124140
}
125141

126142
## Creates instance
127143
resource "aws_instance" "generate_certs" {
128-
count = 1
129-
ami = "${coalesce(lookup(var.ami_region_lookup, var.ami_region), var.ami_custom)}"
144+
ami = "${coalesce(lookup(var.ami_region_lookup, var.region), var.ami_custom)}"
130145
instance_type = "${var.instance_type}"
131146
key_name = "${var.key_name}"
132-
security_groups = ["${aws_security_group.generate_certs_sg.name}"]
147+
vpc_security_group_ids = ["${aws_security_group.sg_cert_gen.id}"]
148+
subnet_id = "${var.subnet}"
133149
associate_public_ip_address = true
134-
iam_instance_profile = "${aws_iam_instance_profile.gen_certs_profile.id}"
150+
iam_instance_profile = "${aws_iam_instance_profile.profile.id}"
135151

136152
tags {
137-
Name = "${var.stack_item_label}-generate-certs"
138-
application = "${var.stack_item_label}-generate-certs"
153+
Name = "${var.stack_item_label}"
154+
application = "${var.stack_item_fullname}"
139155
managed_by = "terraform"
140156
}
141157

generate-certs/outputs.tf

Lines changed: 0 additions & 1 deletion
This file was deleted.

generate-certs/templates/user_data.tpl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
manage_etc_hosts: True
33

44
runcmd:
5-
- echo "S3_REGION=\"ap-northeast-1\"" > /etc/default/openvpn-cert-generator
6-
- echo "S3_CERT_ROOT_PATH=\"${s3_cert_root_path}\"" >> /etc/default/openvpn-cert-generator
7-
- echo "KEY_SIZE=${key_size}" >> /etc/default/openvpn-cert-generator
8-
- echo "S3_DIR_OVERRIDE=${s3_dir_override}" >> /etc/default/openvpn-cert-generator
9-
- echo "KEY_CITY=${key_city}" >> /etc/default/openvpn-cert-generator
10-
- echo "KEY_ORG=${key_org}" >> /etc/default/openvpn-cert-generator
11-
- echo "KEY_EMAIL=${key_email}" >> /etc/default/openvpn-cert-generator
12-
- echo "KEY_OU=${key_ou}" >> /etc/default/openvpn-cert-generator
13-
- echo "KEY_NAME=${cert_key_name}" >> /etc/default/openvpn-cert-generator
14-
- echo "KEY_COUNTRY=${key_country}" >> /etc/default/openvpn-cert-generator
15-
- echo "KEY_PROVINCE=${key_province}" >> /etc/default/openvpn-cert-generator
16-
- echo "ACTIVE_CLIENTS=${active_clients}" >> /etc/default/openvpn-cert-generator
17-
- echo "REVOKED_CLIENTS=${revoked_clients}" >> /etc/default/openvpn-cert-generator
18-
- echo "OPENVPN_HOST=${openvpn_host}" >> /etc/default/openvpn-cert-generator
5+
- echo "S3_REGION=\"${region}\"" > /etc/default/openvpn-cert-generator
6+
- echo "S3_CERT_ROOT_PATH=\"s3://${s3_bucket}/\"" >> /etc/default/openvpn-cert-generator
7+
- echo "KEY_SIZE=${cert_key_size}" >> /etc/default/openvpn-cert-generator
8+
- echo "S3_DIR_OVERRIDE=\"${s3_dir_override}\"" >> /etc/default/openvpn-cert-generator
9+
- echo "KEY_CITY=\"${key_city}\"" >> /etc/default/openvpn-cert-generator
10+
- echo "KEY_ORG=\"${key_org}\"" >> /etc/default/openvpn-cert-generator
11+
- echo "KEY_EMAIL=\"${key_email}\"" >> /etc/default/openvpn-cert-generator
12+
- echo "KEY_OU=\"${key_ou}\"" >> /etc/default/openvpn-cert-generator
13+
- echo "KEY_NAME=\"${cert_key_name}\"" >> /etc/default/openvpn-cert-generator
14+
- echo "KEY_COUNTRY=\"${key_country}\"" >> /etc/default/openvpn-cert-generator
15+
- echo "KEY_PROVINCE=\"${key_province}\"" >> /etc/default/openvpn-cert-generator
16+
- echo "ACTIVE_CLIENTS=\"${active_clients}\"" >> /etc/default/openvpn-cert-generator
17+
- echo "REVOKED_CLIENTS=\"${revoked_clients}\"" >> /etc/default/openvpn-cert-generator
18+
- echo "OPENVPN_HOST=\"${openvpn_host}\"" >> /etc/default/openvpn-cert-generator
1919
- echo "FORCE_CERT_REGEN=${force_cert_regen}" >> /etc/default/openvpn-cert-generator
2020
- echo "S3_PUSH_DRYRUN=${s3_push_dryrun}" >> /etc/default/openvpn-cert-generator
2121

0 commit comments

Comments
 (0)