@@ -2,19 +2,105 @@ data "aws_region" "current" {
2
2
current = true
3
3
}
4
4
5
+ data "aws_caller_identity" "current" {}
6
+
5
7
data "template_file" "user_data" {
6
8
template = " ${ file (" ${ path . module } /templates/user_data.sh.tpl" )} "
7
9
8
10
vars {
9
- aws_region = " ${ aws_region . current . name } "
11
+ aws_region = " ${ data . aws_region . current . name } "
10
12
s3_backup_bucket = " ${ var . tag_product } -${ var . tag_env } -backup"
11
13
credstash_table_name = " credstash-${ var . tag_product } -${ var . tag_env } "
12
14
}
13
15
}
14
16
17
+ data "template_file" "credstash_policy" {
18
+ template = " ${ file (" ${ path . module } /templates/key_policy.json.tpl" )} "
19
+
20
+ vars {
21
+ tag_product = " ${ var . tag_product } "
22
+ tag_env = " ${ var . tag_env } "
23
+ key_admin_arn = " ${ aws_iam_role . role . arn } "
24
+ account_id = " ${ data . aws_caller_identity . current . account_id } "
25
+ }
26
+ }
27
+
28
+ data "template_file" "iam_instance_role_policy" {
29
+ template = " ${ file (" ${ path . module } /templates/iam_instance_role_policy.json.tpl" )} "
30
+
31
+ vars {
32
+ tag_product = " ${ var . tag_product } "
33
+ tag_env = " ${ var . tag_product } "
34
+ db_credstash_arn = " ${ aws_dynamodb_table . db_credstash . arn } "
35
+ }
36
+ }
37
+
38
+ resource "aws_dynamodb_table" "db_credstash" {
39
+ name = " credstash-${ var . tag_product } -${ var . tag_env } "
40
+ read_capacity = 1
41
+ write_capacity = 1
42
+ hash_key = " name"
43
+ range_key = " version"
44
+
45
+ attribute {
46
+ name = " name"
47
+ type = " S"
48
+ }
49
+
50
+ attribute {
51
+ name = " version"
52
+ type = " S"
53
+ }
54
+
55
+ tags {
56
+ Name = " credstash-${ var . tag_product } -${ var . tag_env } "
57
+ product = " ${ var . tag_product } "
58
+ env = " ${ var . tag_env } "
59
+ purpose = " ${ var . tag_purpose } "
60
+ role = " ${ var . tag_role } "
61
+ }
62
+ }
63
+
64
+ resource "null_resource" "waiter" {
65
+
66
+ depends_on = [" aws_iam_instance_profile.ec2_profile" ]
67
+
68
+ provisioner "local-exec" {
69
+ command = " sleep 15"
70
+ }
71
+ }
72
+
73
+ resource "aws_kms_key" "credstash" {
74
+
75
+ depends_on = [" null_resource.waiter" ]
76
+
77
+ description = " Credstash space for ${ var . tag_product } -${ var . tag_env } "
78
+ # policy = "${data.template_file.credstash_policy.rendered}"
79
+ policy = " ${ data . template_file . credstash_policy . rendered } "
80
+ deletion_window_in_days = 7
81
+ is_enabled = true
82
+ enable_key_rotation = true
83
+
84
+ tags {
85
+ Name = " credstash-${ var . tag_product } -${ var . tag_env } "
86
+ product = " ${ var . tag_product } "
87
+ env = " ${ var . tag_env } "
88
+ purpose = " ${ var . tag_purpose } "
89
+ role = " ${ var . tag_role } "
90
+ }
91
+ }
92
+
93
+ resource "aws_kms_alias" "credstash" {
94
+
95
+ depends_on = [" aws_kms_key.credstash" ]
96
+
97
+ name = " alias/credstash-${ var . tag_product } -${ var . tag_env } "
98
+ target_key_id = " ${ aws_kms_key . credstash . key_id } "
99
+ }
100
+
15
101
resource "aws_s3_bucket" "backup" {
16
102
bucket = " ${ var . tag_product } -${ var . tag_env } -backup"
17
- acl = " private"
103
+ acl = " private"
18
104
19
105
lifecycle_rule {
20
106
prefix = " backups"
@@ -62,104 +148,15 @@ resource "aws_iam_role_policy" "policy" {
62
148
63
149
name = " ${ var . tag_product } -${ var . tag_env } "
64
150
role = " ${ aws_iam_role . role . id } "
65
- policy = << EOF
66
- {
67
- "Version": "2012-10-17",
68
- "Statement": [
69
- {
70
- "Effect": "Allow",
71
- "Action": [
72
- "kms:*",
73
- "dynamodb:*"
74
- ],
75
- "Resource": "*"
76
- },
77
- {
78
- "Effect": "Allow",
79
- "Action": [
80
- "s3:ListBucket",
81
- "s3:GetBucketLocation"
82
- ],
83
- "Resource": [ "arn:aws:s3:::${ var . tag_product } -${ var . tag_env } -backup" ]
84
- },
85
- {
86
- "Effect": "Allow",
87
- "Action": [
88
- "s3:AbortMultipartUpload",
89
- "s3:PutObject*",
90
- "s3:Get*",
91
- "s3:List*",
92
- "s3:DeleteObject"
93
- ],
94
- "Resource": [ "arn:aws:s3:::${ var . tag_product } -${ var . tag_env } -backup/*" ]
95
- },
96
- {
97
- "Effect": "Allow",
98
- "Action": [
99
- "ssm:DescribeAssociation",
100
- "ssm:GetDocument",
101
- "ssm:ListAssociations",
102
- "ssm:UpdateAssociationStatus",
103
- "ssm:UpdateInstanceInformation"
104
- ],
105
- "Resource": "*"
106
- },
107
- {
108
- "Effect": "Allow",
109
- "Action": [
110
- "ec2messages:AcknowledgeMessage",
111
- "ec2messages:DeleteMessage",
112
- "ec2messages:FailMessage",
113
- "ec2messages:GetEndpoint",
114
- "ec2messages:GetMessages",
115
- "ec2messages:SendReply"
116
- ],
117
- "Resource": "*"
118
- },
119
- {
120
- "Effect": "Allow",
121
- "Action": [
122
- "cloudwatch:PutMetricData"
123
- ],
124
- "Resource": "*"
125
- },
126
- {
127
- "Effect": "Allow",
128
- "Action": [
129
- "ec2:DescribeInstanceStatus"
130
- ],
131
- "Resource": "*"
132
- },
133
- {
134
- "Effect": "Allow",
135
- "Action": [
136
- "ds:CreateComputer",
137
- "ds:DescribeDirectories"
138
- ],
139
- "Resource": "*"
140
- },
141
- {
142
- "Effect": "Allow",
143
- "Action": [
144
- "logs:CreateLogGroup",
145
- "logs:CreateLogStream",
146
- "logs:DescribeLogGroups",
147
- "logs:DescribeLogStreams",
148
- "logs:PutLogEvents"
149
- ],
150
- "Resource": "*"
151
- }
152
- ]
153
- }
154
- EOF
151
+ policy = " ${ data . template_file . iam_instance_role_policy . rendered } "
155
152
}
156
153
157
154
resource "aws_iam_instance_profile" "ec2_profile" {
158
155
159
156
depends_on = [" aws_iam_role.role" , " aws_iam_role_policy.policy" ]
160
157
161
- name = " ${ var . tag_product } -${ var . tag_env } "
162
- roles = [ " ${ aws_iam_role . role . name } " ]
158
+ name = " ${ var . tag_product } -${ var . tag_env } "
159
+ role = " ${ aws_iam_role . role . name } "
163
160
}
164
161
165
162
resource "aws_security_group" "pritunl" {
0 commit comments