Skip to content

Commit 9ec6a1e

Browse files
authored
added k8s_groups for vpn-users (#159)
1 parent 9c36024 commit 9ec6a1e

5 files changed

Lines changed: 53 additions & 6 deletions

File tree

templates/kubernetes/terraform/modules/kubernetes/vpn.tf

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,33 @@ resource "kubernetes_deployment" "wireguard" {
225225
}
226226
}
227227

228+
# Create Kubernetes role and binding to use arbitrary group 'vpn-users'. This group has been added by administor and mapped to user roles(developer & operator).
229+
resource "kubernetes_role" "wireguard" {
230+
metadata {
231+
name = "wireguard"
232+
namespace = kubernetes_namespace.vpn_namespace.metadata[0].name
233+
}
234+
235+
rule {
236+
api_groups = [""]
237+
resources = ["pods", "pods/exec"]
238+
verbs = ["exec", "list", "create"]
239+
}
240+
}
241+
242+
resource "kubernetes_role_binding" "wireguard" {
243+
metadata {
244+
name = "wireguard"
245+
namespace = kubernetes_namespace.vpn_namespace.metadata[0].name
246+
}
247+
role_ref {
248+
api_group = "rbac.authorization.k8s.io"
249+
kind = "Role"
250+
name = "wireguard"
251+
}
252+
subject {
253+
kind = "Group"
254+
name = "vpn-users"
255+
api_group = "rbac.authorization.k8s.io"
256+
}
257+
}

templates/terraform/environments/prod/main.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,19 @@ module "prod" {
115115
name = "developer"
116116
aws_policy = data.aws_iam_policy_document.developer_access.json
117117
k8s_policies = local.k8s_developer_access
118+
k8s_groups = ["vpn-users"]
118119
},
119120
{
120121
name = "operator"
121122
aws_policy = data.aws_iam_policy_document.operator_access.json
122123
k8s_policies = local.k8s_operator_access
124+
k8s_groups = ["vpn-users"]
123125
},
124126
{
125127
name = "deployer"
126128
aws_policy = data.aws_iam_policy_document.deployer_access.json
127129
k8s_policies = local.k8s_deployer_access
130+
k8s_groups = []
128131
}
129132
]
130133

templates/terraform/environments/stage/main.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,19 @@ module "stage" {
119119
name = "developer"
120120
aws_policy = data.aws_iam_policy_document.developer_access.json
121121
k8s_policies = local.k8s_developer_access
122+
k8s_groups = ["vpn-users"]
122123
},
123124
{
124125
name = "operator"
125126
aws_policy = data.aws_iam_policy_document.operator_access.json
126127
k8s_policies = local.k8s_operator_access
128+
k8s_groups = ["vpn-users"]
127129
},
128130
{
129131
name = "deployer"
130132
aws_policy = data.aws_iam_policy_document.deployer_access.json
131133
k8s_policies = local.k8s_deployer_access
134+
k8s_groups = []
132135
}
133136
]
134137

templates/terraform/modules/environment/main.tf

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
locals {
44
kubernetes_cluster_name = "${var.project}-${var.environment}-${var.region}"
55

6-
users = [
6+
user_access_users = [
77
for u in var.user_role_mapping : {
88
name = u.name
99
roles = [
@@ -12,12 +12,22 @@ locals {
1212
]
1313
}
1414
]
15+
16+
user_access_roles = [
17+
for r in var.roles : {
18+
name = r.name
19+
aws_policy = r.aws_policy
20+
k8s_policies = r.k8s_policies
21+
}
22+
]
1523

16-
kubernetes_iam_role_mapping = [
24+
eks_kubernetes_iam_role_mapping = [
1725
for r in module.user_access.eks_iam_role_mapping : {
1826
iam_role_arn = r.arn
1927
k8s_role_name = r.name
20-
k8s_groups = [ r.name ]
28+
k8s_groups = flatten(concat([r.name], [
29+
for o in var.roles : o.k8s_groups if r.name == "${var.project}-kubernetes-${o.name}-${var.environment}"
30+
]))
2131
}
2232
]
2333
}
@@ -64,7 +74,7 @@ module "eks" {
6474
worker_asg_max_size = var.eks_worker_asg_max_size
6575
worker_ami = var.eks_worker_ami # EKS-Optimized AMI for your region: https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html
6676

67-
iam_role_mapping = local.kubernetes_iam_role_mapping
77+
iam_role_mapping = local.eks_kubernetes_iam_role_mapping
6878
}
6979

7080

@@ -163,8 +173,8 @@ module "user_access" {
163173
project = var.project
164174
environment = var.environment
165175

166-
roles = var.roles
167-
users = local.users
176+
roles = local.user_access_roles
177+
users = local.user_access_users
168178
}
169179

170180

templates/terraform/modules/environment/variables.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ variable "roles" {
149149
name = string
150150
aws_policy = string
151151
k8s_policies = list(map(list(string)))
152+
k8s_groups = list(string)
152153
}))
153154
description = "Role list with policies"
154155
}

0 commit comments

Comments
 (0)