@@ -25,6 +25,35 @@ resource "helm_release" "jenkins" {
25
25
value = " true"
26
26
}
27
27
28
+ set {
29
+ name = " serviceAccountAgent.name"
30
+ value = " jenkins-agent"
31
+ }
32
+
33
+ set {
34
+ name = " serviceAccountAgent.create"
35
+ value = true
36
+ }
37
+
38
+ set_string {
39
+ name = " serviceAccountAgent.annotations.eks\\ .amazonaws\\ .com/role-arn"
40
+ value = aws_iam_role. jenkins_agent . arn
41
+ }
42
+
43
+ set {
44
+ name = " serviceAccount.name"
45
+ value = " jenkins-master"
46
+ }
47
+
48
+ set {
49
+ name = " serviceAccount.create"
50
+ value = true
51
+ }
52
+
53
+ set_string {
54
+ name = " serviceAccount.annotations.eks\\ .amazonaws\\ .com/role-arn"
55
+ value = aws_iam_role. jenkins_master . arn
56
+ }
28
57
29
58
// TODO: fix it for multi domains
30
59
set {
@@ -51,3 +80,112 @@ resource "helm_release" "jenkins" {
51
80
file (" ${ path . module } /values.yml" )
52
81
]
53
82
}
83
+
84
+ # Enabling IAM Roles for Service Accounts
85
+ data "aws_iam_policy_document" "jenkins_agent_assume_role_policy" {
86
+ statement {
87
+ actions = [" sts:AssumeRoleWithWebIdentity" ]
88
+ effect = " Allow"
89
+
90
+ condition {
91
+ test = " StringEquals"
92
+ variable = " ${ replace (var. cluster_oidc_url , " https://" , " " )} :sub"
93
+ values = [" system:serviceaccount:jenkins:jenkins-agent" ]
94
+ }
95
+
96
+ principals {
97
+ identifiers = [var . cluster_oidc_arn ]
98
+ type = " Federated"
99
+ }
100
+ }
101
+ }
102
+
103
+ data "aws_iam_policy_document" "jenkins_master_assume_role_policy" {
104
+ statement {
105
+ actions = [" sts:AssumeRoleWithWebIdentity" ]
106
+ effect = " Allow"
107
+
108
+ condition {
109
+ test = " StringEquals"
110
+ variable = " ${ replace (var. cluster_oidc_url , " https://" , " " )} :sub"
111
+ values = [" system:serviceaccount:jenkins:jenkins-master" ]
112
+ }
113
+
114
+ principals {
115
+ identifiers = [var . cluster_oidc_arn ]
116
+ type = " Federated"
117
+ }
118
+ }
119
+ }
120
+
121
+ # Create role for jenkins agents
122
+ resource "aws_iam_role" "jenkins_agent" {
123
+ depends_on = [
124
+ var . module_depends_on
125
+ ]
126
+ assume_role_policy = data. aws_iam_policy_document . jenkins_agent_assume_role_policy . json
127
+ name = " ${ var . cluster_name } _jenkins_agent"
128
+
129
+ tags = {
130
+ Environment = var.environment
131
+ Project = var.project
132
+ }
133
+ }
134
+
135
+ # Create role for jenkins master
136
+ resource "aws_iam_role" "jenkins_master" {
137
+ depends_on = [
138
+ var . module_depends_on
139
+ ]
140
+ assume_role_policy = data. aws_iam_policy_document . jenkins_master_assume_role_policy . json
141
+ name = " ${ var . cluster_name } _jenkins_master"
142
+
143
+ tags = {
144
+ Environment = var.environment
145
+ Project = var.project
146
+ }
147
+ }
148
+
149
+ # Creating agent policy
150
+ resource "aws_iam_policy" "agent_policy" {
151
+ count = var. agent_policy == " " ? 0 : 1
152
+ depends_on = [
153
+ var . module_depends_on
154
+ ]
155
+ name = " ${ var . cluster_name } _agent_policy"
156
+ policy = var. agent_policy
157
+ }
158
+
159
+ # Creating master policy
160
+ resource "aws_iam_policy" "master_policy" {
161
+ count = var. master_policy == " " ? 0 : 1
162
+ depends_on = [
163
+ var . module_depends_on
164
+ ]
165
+ name = " ${ var . cluster_name } _master_policy"
166
+ policy = var. master_policy
167
+ }
168
+
169
+ # Attaching agent_policy policy to role jenkins_agent
170
+ resource "aws_iam_role_policy_attachment" "jenkins_agent" {
171
+ count = var. agent_policy == " " ? 0 : 1
172
+ depends_on = [
173
+ var . module_depends_on ,
174
+ aws_iam_role . jenkins_agent ,
175
+ aws_iam_policy . agent_policy
176
+ ]
177
+ role = aws_iam_role. jenkins_agent . name
178
+ policy_arn = aws_iam_policy. agent_policy [count . index ]. arn
179
+ }
180
+
181
+ # Attaching master_policy policy to role jenkins_master
182
+ resource "aws_iam_role_policy_attachment" "jenkins_master" {
183
+ count = var. master_policy == " " ? 0 : 1
184
+ depends_on = [
185
+ var . module_depends_on ,
186
+ aws_iam_role . jenkins_master ,
187
+ aws_iam_policy . master_policy
188
+ ]
189
+ role = aws_iam_role. jenkins_master . name
190
+ policy_arn = aws_iam_policy. master_policy [count . index ]. arn
191
+ }
0 commit comments