@@ -40,19 +40,65 @@ spec:
4040 default : ' false'
4141 type : string
4242 tasks :
43+ # ── AWS OIDC authentication ──
44+ - name : get-aws-creds
45+ description : Obtain temporary AWS credentials via OIDC federation.
46+ taskSpec :
47+ results :
48+ - name : aws-access-key-id
49+ - name : aws-secret-access-key
50+ - name : aws-session-token
51+ volumes :
52+ - name : oidc-token
53+ projected :
54+ sources :
55+ - serviceAccountToken :
56+ audience : sts.amazonaws.com
57+ expirationSeconds : 3600
58+ path : token
59+ steps :
60+ - name : assume-role
61+ image : amazon/aws-cli:latest
62+ volumeMounts :
63+ - name : oidc-token
64+ mountPath : /var/run/secrets/oidc
65+ readOnly : true
66+ script : |
67+ #!/bin/sh
68+ set -euo pipefail
69+ echo "[sts] Assuming role via OIDC..."
70+ CREDS=$(aws sts assume-role-with-web-identity \
71+ --role-arn "arn:aws:iam::313828097073:role/konflux-rhelai-ci" \
72+ --role-session-name "rhelai-$(context.pipelineRun.name)" \
73+ --web-identity-token file:///var/run/secrets/oidc/token \
74+ --duration-seconds 14400 \
75+ --output json)
76+ echo "$CREDS" | python3 -c "
77+ import json, sys
78+ c = json.load(sys.stdin)['Credentials']
79+ open('$(results.aws-access-key-id.path)', 'w').write(c['AccessKeyId'])
80+ open('$(results.aws-secret-access-key.path)', 'w').write(c['SecretAccessKey'])
81+ open('$(results.aws-session-token.path)', 'w').write(c['SessionToken'])
82+ "
83+ echo "[sts] Temporary credentials obtained (valid 4h)."
84+
4385 # ── RHEL AI provisioning (MAPT) ──
4486 - name : provision-rhelai
4587 description : Provision a RHEL AI instance with vLLM auto-started.
4688 timeout : 2h
4789 runAfter :
4890 - provision-cluster
91+ - get-aws-creds
4992 taskSpec :
5093 params :
5194 - name : rhelai-version
5295 - name : instance-type
5396 - name : model
5497 - name : debug
5598 - name : spot
99+ - name : aws-access-key-id
100+ - name : aws-secret-access-key
101+ - name : aws-session-token
56102 results :
57103 - name : host
58104 description : " RHEL AI instance hostname or IP"
90136 #!/bin/sh
91137 set -uo pipefail
92138
93- export AWS_ACCESS_KEY_ID=$(cat /opt/aws-credentials/AWS_ACCESS_KEY_ID)
94- export AWS_SECRET_ACCESS_KEY=$(cat /opt/aws-credentials/AWS_SECRET_ACCESS_KEY)
139+ export AWS_ACCESS_KEY_ID="$(params.aws-access-key-id)"
140+ export AWS_SECRET_ACCESS_KEY="$(params.aws-secret-access-key)"
141+ export AWS_SESSION_TOKEN="$(params.aws-session-token)"
95142 BUCKET=$(cat /opt/aws-credentials/S3_BUCKET)
96143 RUN_ID="$(context.pipelineRun.name)"
97144 HF_TOKEN=$(cat /opt/aws-credentials/HUGGING_FACE_HUB_TOKEN)
@@ -182,6 +229,12 @@ spec:
182229 value : " $(params.debug)"
183230 - name : spot
184231 value : " $(params.spot)"
232+ - name : aws-access-key-id
233+ value : " $(tasks.get-aws-creds.results.aws-access-key-id)"
234+ - name : aws-secret-access-key
235+ value : " $(tasks.get-aws-creds.results.aws-secret-access-key)"
236+ - name : aws-session-token
237+ value : " $(tasks.get-aws-creds.results.aws-session-token)"
185238
186239 # ── OpenShift cluster provisioning (same as existing e2e pipeline) ──
187240 - name : eaas-provision-space
@@ -416,9 +469,18 @@ spec:
416469 params :
417470 - name : debug
418471 value : " $(params.debug)"
472+ - name : aws-access-key-id
473+ value : " $(tasks.get-aws-creds.results.aws-access-key-id)"
474+ - name : aws-secret-access-key
475+ value : " $(tasks.get-aws-creds.results.aws-secret-access-key)"
476+ - name : aws-session-token
477+ value : " $(tasks.get-aws-creds.results.aws-session-token)"
419478 taskSpec :
420479 params :
421480 - name : debug
481+ - name : aws-access-key-id
482+ - name : aws-secret-access-key
483+ - name : aws-session-token
422484 volumes :
423485 - name : aws-credentials
424486 secret :
@@ -445,8 +507,9 @@ spec:
445507 #!/bin/sh
446508 set -uo pipefail
447509
448- export AWS_ACCESS_KEY_ID=$(cat /opt/aws-credentials/AWS_ACCESS_KEY_ID)
449- export AWS_SECRET_ACCESS_KEY=$(cat /opt/aws-credentials/AWS_SECRET_ACCESS_KEY)
510+ export AWS_ACCESS_KEY_ID="$(params.aws-access-key-id)"
511+ export AWS_SECRET_ACCESS_KEY="$(params.aws-secret-access-key)"
512+ export AWS_SESSION_TOKEN="$(params.aws-session-token)"
450513 export AWS_DEFAULT_REGION="us-east-1"
451514 BUCKET=$(cat /opt/aws-credentials/S3_BUCKET)
452515 RUN_ID="$(context.pipelineRun.name)"
0 commit comments