1+ #! /bin/bash
2+
3+ # Variables for the user-assigned managed identity
4+ source ./00-variables.sh
5+
6+ # Check if the namespace already exists
7+ result=$( kubectl get namespace -o ' jsonpath={.items[?(@.metadata.name=="' $namespace ' ")].metadata.name' })
8+
9+ if [[ -n $result ]]; then
10+ echo " [$namespace ] namespace already exists"
11+ else
12+ # Create the namespace for your ingress resources
13+ echo " [$namespace ] namespace does not exist"
14+ echo " Creating [$namespace ] namespace..."
15+ kubectl create namespace $namespace
16+ fi
17+
18+ # Check if the service account already exists
19+ result=$( kubectl get sa -n $namespace -o ' jsonpath={.items[?(@.metadata.name=="' $serviceAccountName ' ")].metadata.name' })
20+
21+ if [[ -n $result ]]; then
22+ echo " [$serviceAccountName ] service account already exists"
23+ else
24+ # Retrieve the resource id of the user-assigned managed identity
25+ echo " Retrieving clientId for [$managedIdentityName ] managed identity..."
26+ managedIdentityClientId=$( az identity show \
27+ --name $managedIdentityName \
28+ --resource-group $aksResourceGroupName \
29+ --query clientId \
30+ --output tsv)
31+
32+ if [[ -n $managedIdentityClientId ]]; then
33+ echo " [$managedIdentityClientId ] clientId for the [$managedIdentityName ] managed identity successfully retrieved"
34+ else
35+ echo " Failed to retrieve clientId for the [$managedIdentityName ] managed identity"
36+ exit
37+ fi
38+
39+ # Create the service account
40+ echo " [$serviceAccountName ] service account does not exist"
41+ echo " Creating [$serviceAccountName ] service account..."
42+ cat << EOF | kubectl apply -f -
43+ apiVersion: v1
44+ kind: ServiceAccount
45+ metadata:
46+ annotations:
47+ azure.workload.identity/client-id: $managedIdentityClientId
48+ azure.workload.identity/tenant-id: $tenantId
49+ labels:
50+ azure.workload.identity/use: "true"
51+ name: $serviceAccountName
52+ namespace: $namespace
53+ EOF
54+ fi
55+
56+ # Show service account YAML manifest
57+ echo " Service Account YAML manifest"
58+ echo " -----------------------------"
59+ kubectl get sa $serviceAccountName -n $namespace -o yaml
60+
61+ # Check if the federated identity credential already exists
62+ echo " Checking if [$federatedIdentityName ] federated identity credential actually exists in the [$aksResourceGroupName ] resource group..."
63+
64+ az identity federated-credential show \
65+ --name $federatedIdentityName \
66+ --resource-group $aksResourceGroupName \
67+ --identity-name $managedIdentityName & > /dev/null
68+
69+ if [[ $? != 0 ]]; then
70+ echo " No [$federatedIdentityName ] federated identity credential actually exists in the [$aksResourceGroupName ] resource group"
71+
72+ # Get the OIDC Issuer URL
73+ aksOidcIssuerUrl=" $( az aks show \
74+ --only-show-errors \
75+ --name $aksClusterName \
76+ --resource-group $aksResourceGroupName \
77+ --query oidcIssuerProfile.issuerUrl \
78+ --output tsv) "
79+
80+ # Show OIDC Issuer URL
81+ if [[ -n $aksOidcIssuerUrl ]]; then
82+ echo " The OIDC Issuer URL of the $aksClusterName cluster is $aksOidcIssuerUrl "
83+ fi
84+
85+ echo " Creating [$federatedIdentityName ] federated identity credential in the [$aksResourceGroupName ] resource group..."
86+
87+ # Establish the federated identity credential between the managed identity, the service account issuer, and the subject.
88+ az identity federated-credential create \
89+ --name $federatedIdentityName \
90+ --identity-name $managedIdentityName \
91+ --resource-group $aksResourceGroupName \
92+ --issuer $aksOidcIssuerUrl \
93+ --subject system:serviceaccount:$namespace :$serviceAccountName
94+
95+ if [[ $? == 0 ]]; then
96+ echo " [$federatedIdentityName ] federated identity credential successfully created in the [$aksResourceGroupName ] resource group"
97+ else
98+ echo " Failed to create [$federatedIdentityName ] federated identity credential in the [$aksResourceGroupName ] resource group"
99+ exit
100+ fi
101+ else
102+ echo " [$federatedIdentityName ] federated identity credential already exists in the [$aksResourceGroupName ] resource group"
103+ fi
0 commit comments