Skip to content

Commit 42b78ad

Browse files
authored
Merge pull request #59 from ninhomilton/Beekeeper-auth_migration_to-irsa
Beekeeper auth migration to irsa
2 parents 3b095d3 + 220327d commit 42b78ad

9 files changed

Lines changed: 116 additions & 9 deletions

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file.
33

44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
55

6+
## [5.0.1] - 2024-06-05
7+
### Changed
8+
- Change kiam auth method to irsa for metadata cleanup, path cleanup and scheduler apiary
9+
610
## [5.0.1] - 2024-05-14
711
### Changed
812
- Change provider version for kubernetes to 2.13.0

common.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ locals {
1919
spring_application_json_key = "SPRING_APPLICATION_JSON"
2020
}
2121

22+
data "aws_caller_identity" "current" {}
2223
data "aws_iam_account_alias" "current" {}
2324

2425
data "aws_vpc" "vpc" {

k8s-metadata-cleanup-iam.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@ resource "aws_iam_role" "beekeeper_k8s_role_metadata_cleanup_iam" {
2424
"Sid": "",
2525
"Effect": "Allow",
2626
"Principal": {
27-
"AWS": "${var.k8s_kiam_role_arn}"
27+
"Federated": "arn:aws:iam::${data.aws_caller_identity.current.account_id}:oidc-provider/${var.oidc_provider}"
2828
},
29-
"Action": "sts:AssumeRole"
29+
"Action": "sts:AssumeRoleWithWebIdentity",
30+
"Condition": {
31+
"StringEquals": {
32+
"${var.oidc_provider}:sub": "system:serviceaccount:${var.k8s_namespace}:${local.metadata_cleanup_full_name}"
33+
}
34+
}
3035
}
3136
]
3237
}

k8s-metadata-cleanup.tf

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ resource "kubernetes_deployment_v1" "beekeeper_metadata_cleanup" {
3838
metadata {
3939
labels = local.metadata_cleanup_label_name_instance
4040
annotations = {
41-
"iam.amazonaws.com/role" = aws_iam_role.beekeeper_k8s_role_metadata_cleanup_iam[count.index].arn
4241
"prometheus.io/scrape" : var.prometheus_enabled
4342
"prometheus.io/port" : var.k8s_metadata_cleanup_port
4443
"prometheus.io/path" : "/actuator/prometheus"
4544
}
4645
}
4746

4847
spec {
48+
service_account_name = kubernetes_service_account_v1.beekeeper_metadata_cleanup.metadata.0.name
49+
automount_service_account_token = true
4950
container {
5051
name = local.metadata_cleanup_full_name
5152
image = "${var.metadata_cleanup_docker_image}:${var.metadata_cleanup_docker_image_version}"
@@ -132,3 +133,29 @@ resource "kubernetes_service" "beekeeper_metadata_cleanup" {
132133
type = "ClusterIP"
133134
}
134135
}
136+
137+
resource "kubernetes_service_account_v1" "beekeeper_metadata_cleanup" {
138+
metadata {
139+
name = local.metadata_cleanup_full_name
140+
namespace = var.k8s_namespace
141+
annotations = {
142+
"eks.amazonaws.com/role-arn" = aws_iam_role.beekeeper_k8s_role_metadata_cleanup_iam[0].arn
143+
}
144+
}
145+
}
146+
147+
resource "kubernetes_secret_v1" "beekeeper_metadata_cleanup" {
148+
metadata {
149+
name = local.metadata_cleanup_full_name
150+
namespace = var.k8s_namespace
151+
annotations = {
152+
"kubernetes.io/service-account.name" = local.metadata_cleanup_full_name
153+
"kubernetes.io/service-account.namespace" = var.k8s_namespace
154+
}
155+
}
156+
type = "kubernetes.io/service-account-token"
157+
158+
depends_on = [
159+
kubernetes_service_account_v1.beekeeper_metadata_cleanup
160+
]
161+
}

k8s-path-cleanup-iam.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@ resource "aws_iam_role" "beekeeper_k8s_role_path_cleanup_iam" {
2424
"Sid": "",
2525
"Effect": "Allow",
2626
"Principal": {
27-
"AWS": "${var.k8s_kiam_role_arn}"
27+
"Federated": "arn:aws:iam::${data.aws_caller_identity.current.account_id}:oidc-provider/${var.oidc_provider}"
2828
},
29-
"Action": "sts:AssumeRole"
29+
"Action": "sts:AssumeRoleWithWebIdentity",
30+
"Condition": {
31+
"StringEquals": {
32+
"${var.oidc_provider}:sub": "system:serviceaccount:${var.k8s_namespace}:${local.path_cleanup_full_name}"
33+
}
34+
}
3035
}
3136
]
3237
}

k8s-path-cleanup.tf

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ resource "kubernetes_deployment_v1" "beekeeper_path_cleanup" {
3838
metadata {
3939
labels = local.path_cleanup_label_name_instance
4040
annotations = {
41-
"iam.amazonaws.com/role" = aws_iam_role.beekeeper_k8s_role_path_cleanup_iam[count.index].arn
4241
"prometheus.io/scrape" : var.prometheus_enabled
4342
"prometheus.io/port" : var.k8s_path_cleanup_port
4443
"prometheus.io/path" : "/actuator/prometheus"
4544
}
4645
}
4746

4847
spec {
48+
service_account_name = kubernetes_service_account_v1.beekeeper_path_cleanup.metadata.0.name
49+
automount_service_account_token = true
4950
container {
5051
name = local.path_cleanup_full_name
5152
image = "${var.path_cleanup_docker_image}:${var.path_cleanup_docker_image_version}"
@@ -133,3 +134,29 @@ resource "kubernetes_service" "beekeeper_path_cleanup" {
133134
type = "ClusterIP"
134135
}
135136
}
137+
138+
resource "kubernetes_service_account_v1" "beekeeper_path_cleanup" {
139+
metadata {
140+
name = local.path_cleanup_full_name
141+
namespace = var.k8s_namespace
142+
annotations = {
143+
"eks.amazonaws.com/role-arn" = aws_iam_role.beekeeper_k8s_role_path_cleanup_iam[0].arn
144+
}
145+
}
146+
}
147+
148+
resource "kubernetes_secret_v1" "beekeeper_path_cleanup" {
149+
metadata {
150+
name = local.path_cleanup_full_name
151+
namespace = var.k8s_namespace
152+
annotations = {
153+
"kubernetes.io/service-account.name" = local.path_cleanup_full_name
154+
"kubernetes.io/service-account.namespace" = var.k8s_namespace
155+
}
156+
}
157+
type = "kubernetes.io/service-account-token"
158+
159+
depends_on = [
160+
kubernetes_service_account_v1.beekeeper_path_cleanup
161+
]
162+
}

k8s-scheduler-apiary-iam.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@ resource "aws_iam_role" "beekeeper_k8s_role_scheduler_apiary_iam" {
2424
"Sid": "",
2525
"Effect": "Allow",
2626
"Principal": {
27-
"AWS": "${var.k8s_kiam_role_arn}"
27+
"Federated": "arn:aws:iam::${data.aws_caller_identity.current.account_id}:oidc-provider/${var.oidc_provider}"
2828
},
29-
"Action": "sts:AssumeRole"
29+
"Action": "sts:AssumeRoleWithWebIdentity",
30+
"Condition": {
31+
"StringEquals": {
32+
"${var.oidc_provider}:sub": "system:serviceaccount:${var.k8s_namespace}:${local.scheduler_apiary_full_name}"
33+
}
34+
}
3035
}
3136
]
3237
}

k8s-scheduler-apiary.tf

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ resource "kubernetes_deployment_v1" "beekeeper_scheduler_apiary" {
3838
metadata {
3939
labels = local.scheduler_apiary_label_name_instance
4040
annotations = {
41-
"iam.amazonaws.com/role" = aws_iam_role.beekeeper_k8s_role_scheduler_apiary_iam[count.index].arn
4241
"prometheus.io/scrape" : var.prometheus_enabled
4342
"prometheus.io/port" : var.k8s_scheduler_apiary_port
4443
"prometheus.io/path" : "/actuator/prometheus"
4544
}
4645
}
4746

4847
spec {
48+
service_account_name = kubernetes_service_account_v1.beekeeper_scheduler_apiary.metadata.0.name
49+
automount_service_account_token = true
4950
container {
5051
name = local.scheduler_apiary_full_name
5152
image = "${var.scheduler_apiary_docker_image}:${var.scheduler_apiary_docker_image_version}"
@@ -130,3 +131,29 @@ resource "kubernetes_service" "beekeeper_scheduler_apiary" {
130131
type = "ClusterIP"
131132
}
132133
}
134+
135+
resource "kubernetes_service_account_v1" "beekeeper_scheduler_apiary" {
136+
metadata {
137+
name = local.scheduler_apiary_full_name
138+
namespace = var.k8s_namespace
139+
annotations = {
140+
"eks.amazonaws.com/role-arn" = aws_iam_role.beekeeper_k8s_role_scheduler_apiary_iam[0].arn
141+
}
142+
}
143+
}
144+
145+
resource "kubernetes_secret_v1" "beekeeper_scheduler_apiary" {
146+
metadata {
147+
name = local.scheduler_apiary_full_name
148+
namespace = var.k8s_namespace
149+
annotations = {
150+
"kubernetes.io/service-account.name" = local.scheduler_apiary_full_name
151+
"kubernetes.io/service-account.namespace" = var.k8s_namespace
152+
}
153+
}
154+
type = "kubernetes.io/service-account-token"
155+
156+
depends_on = [
157+
kubernetes_service_account_v1.beekeeper_scheduler_apiary
158+
]
159+
}

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,12 @@ variable "k8s_kiam_role_arn" {
333333
type = string
334334
}
335335

336+
variable "oidc_provider" {
337+
description = "EKS cluster OIDC provider name, required for configuring IAM using IRSA."
338+
type = string
339+
default = ""
340+
}
341+
336342
variable "k8s_db_password_secret" {
337343
description = "Name of the Kubernetes secret that would store the db password for beekeeper."
338344
default = "beekeeper-db-password"

0 commit comments

Comments
 (0)