Skip to content

Commit 8c6a7ab

Browse files
feat(aws): add IAM role with ExternalId requirement for e2e testing (#191)
* feat(aws): add IAM role with ExternalId requirement for e2e testing This adds a new IAM role (keda-workload-external-id) that requires an ExternalId to be assumed. This is used to test KEDA's pod identity externalID support. Changes: - Add workload_external_id_name and workload_external_id_value to locals - Add aws_iam_role.workload_external_id_role with ExternalId condition - Add aws_iam_policy.workload_external_id_policy for SQS access - Update main policy to deny direct access to external-id-queue-* - Update main policy to allow assuming the new role - Add outputs for the new role ARN and external ID value Signed-off-by: ritesh.chaurasia1 <ritesh.chaurasia@devo.com> * Add workflow to cleanup old Kind clusters on s390x (#193) * Add workflow to cleanup old Kind clusters on s390x Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es> * Enhance logging in s390x-cleanup workflow Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es> --------- Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es> * Fix terraform linting Signed-off-by: ritesh.chaurasia1 <ritesh.chaurasia@devo.com> --------- Signed-off-by: ritesh.chaurasia1 <ritesh.chaurasia@devo.com> Signed-off-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es> Co-authored-by: Jorge Turrado Ferrero <Jorge_turrado@hotmail.es>
1 parent d56fd15 commit 8c6a7ab

3 files changed

Lines changed: 77 additions & 5 deletions

File tree

terraform/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,14 @@ module "github_secrets" {
473473
name = "TF_AWS_WORKLOAD2_ROLE"
474474
value = module.aws_iam.workload2_role_arn
475475
},
476+
{
477+
name = "TF_AWS_ROLE_ARN_EXTERNAL_ID"
478+
value = module.aws_iam.workload_external_id_role_arn
479+
},
480+
{
481+
name = "TF_AWS_EXTERNAL_ID"
482+
value = module.aws_iam.workload_external_id_value
483+
},
476484
{
477485
name = "TF_GCP_SA_CREDENTIALS"
478486
value = module.gcp_iam.e2e_user_credentials

terraform/modules/aws/iam/main.tf

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11

22
locals {
3-
keda_role_name = "keda-operator"
4-
workload1_role_name = "keda-workload-1"
5-
workload2_role_name = "keda-workload-2"
3+
keda_role_name = "keda-operator"
4+
workload1_role_name = "keda-workload-1"
5+
workload2_role_name = "keda-workload-2"
6+
workload_external_id_name = "keda-workload-external-id"
7+
workload_external_id_value = "keda-e2e-external-id-test"
68
keda_clusters_trusted_relations = jsonencode(
79
[for index, provider in aws_iam_openid_connect_provider.oidc_providers :
810
{
@@ -100,14 +102,16 @@ resource "aws_iam_policy" "policy" {
100102
"Effect": "Deny",
101103
"Action": "sqs:GetQueueAttributes",
102104
"Resource": [
103-
"arn:aws:sqs:*:589761922677:assume-role-*"
105+
"arn:aws:sqs:*:589761922677:assume-role-*",
106+
"arn:aws:sqs:*:589761922677:external-id-queue-*"
104107
]
105108
},
106109
{
107110
"Effect": "Allow",
108111
"Action": "sts:AssumeRole",
109112
"Resource": [
110-
"arn:aws:iam::*:role/${local.workload1_role_name}"
113+
"arn:aws:iam::*:role/${local.workload1_role_name}",
114+
"arn:aws:iam::*:role/${local.workload_external_id_name}"
111115
]
112116
}
113117
]
@@ -193,3 +197,54 @@ resource "aws_iam_role_policy_attachment" "workload2_role_assignement" {
193197
role = aws_iam_role.workload2_role.name
194198
policy_arn = aws_iam_policy.workload2_role_policy.arn
195199
}
200+
201+
// This role requires an ExternalId to be assumed.
202+
// Used for testing the externalID support in KEDA's pod identity.
203+
resource "aws_iam_role" "workload_external_id_role" {
204+
name = local.workload_external_id_name
205+
tags = var.tags
206+
207+
assume_role_policy = <<EOF
208+
{
209+
"Version": "2012-10-17",
210+
"Statement": [
211+
{
212+
"Sid": "",
213+
"Effect": "Allow",
214+
"Action": "sts:AssumeRole",
215+
"Principal": {
216+
"AWS": "${aws_iam_role.keda_role.arn}"
217+
},
218+
"Condition": {
219+
"StringEquals": {
220+
"sts:ExternalId": "${local.workload_external_id_value}"
221+
}
222+
}
223+
}
224+
]
225+
}
226+
EOF
227+
}
228+
229+
resource "aws_iam_policy" "workload_external_id_policy" {
230+
name = "e2e-test-external-id-policy"
231+
tags = var.tags
232+
233+
policy = <<EOF
234+
{
235+
"Version": "2012-10-17",
236+
"Statement": [
237+
{
238+
"Effect": "Allow",
239+
"Action": "sqs:*",
240+
"Resource": "arn:aws:sqs:*:589761922677:external-id-queue-*"
241+
}
242+
]
243+
}
244+
EOF
245+
}
246+
247+
resource "aws_iam_role_policy_attachment" "workload_external_id_role_assignement" {
248+
role = aws_iam_role.workload_external_id_role.name
249+
policy_arn = aws_iam_policy.workload_external_id_policy.arn
250+
}

terraform/modules/aws/iam/outputs.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,12 @@ output "workload1_role_arn" {
1717
output "workload2_role_arn" {
1818
value = aws_iam_role.workload2_role.arn
1919
}
20+
21+
output "workload_external_id_role_arn" {
22+
value = aws_iam_role.workload_external_id_role.arn
23+
}
24+
25+
output "workload_external_id_value" {
26+
value = local.workload_external_id_value
27+
sensitive = true
28+
}

0 commit comments

Comments
 (0)