Skip to content

Commit 47b32b4

Browse files
BenjaminMichaelisBenjamin Michaelis
andauthored
ci: migrate ACR login to OIDC/UAMI managed identity (#1000)
- Replace docker/login-action (admin credentials) with az acr login via OIDC session (azure/login with AZURE_CLIENT_ID) - Add --registry-identity and --user-assigned flags to az containerapp up so identity attachment and registry config happen atomically on create and update, eliminating the chicken-and-egg ordering issue - Replace az config set extension.use_dynamic_install with explicit az extension add --name containerapp --upgrade to ensure the extension version supports --registry-identity on az containerapp up - Remove --registry-username/--registry-password from containerapp up - Update Assign MI step to use WEB_UAMI_RESOURCE_ID and WEB_UAMI_CLIENT_ID ## Description Describe your changes here. Fixes #Issue_Number (if available) ### Ensure that your pull request has followed all the steps below: - [ ] Code compilation - [ ] Created tests which fail without the change (if possible) - [ ] All tests passing - [ ] Extended the README / documentation, if necessary Co-authored-by: Benjamin Michaelis <bmichaelis@intellitect.com>
1 parent 57f1d3e commit 47b32b4

1 file changed

Lines changed: 16 additions & 30 deletions

File tree

.github/workflows/Build-Test-And-Deploy.yml

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ jobs:
9797
- name: Azure Login
9898
uses: azure/login@v3
9999
with:
100-
client-id: ${{ secrets.ESSENTIALCSHARPDEV_CLIENT_ID }}
100+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
101101
tenant-id: ${{ secrets.ESSENTIALCSHARP_APPIDENTITY_TENANT_ID }}
102102
subscription-id: ${{ secrets.ESSENTIALCSHARP_SUBSCRIPTION_ID }}
103103

@@ -113,11 +113,9 @@ jobs:
113113
docker image ls -a
114114
115115
- name: Log in to container registry
116-
uses: docker/login-action@v4
117-
with:
118-
registry: ${{ vars.DEVCONTAINER_REGISTRY }}
119-
username: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
120-
password: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
116+
run: |
117+
REGISTRY="${{ vars.DEVCONTAINER_REGISTRY }}"
118+
az acr login --name "${REGISTRY%.azurecr.io}"
121119
122120
- name: Push Image to Container Registry
123121
run: docker push --all-tags ${{ vars.DEVCONTAINER_REGISTRY }}/essentialcsharpweb
@@ -129,12 +127,10 @@ jobs:
129127
RESOURCEGROUP: ${{ vars.RESOURCEGROUP }}
130128
CONTAINER_REGISTRY: ${{ vars.DEVCONTAINER_REGISTRY }}
131129
CONTAINER_APP_ENVIRONMENT: ${{ vars.CONTAINER_APP_ENVIRONMENT }}
132-
ACR_USERNAME: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
133-
ACR_PASSWORD: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
134130
with:
135131
inlineScript: |
136-
az config set extension.use_dynamic_install=yes_without_prompt
137-
az containerapp up -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --image $CONTAINER_REGISTRY/essentialcsharpweb:${{ github.sha }} --environment $CONTAINER_APP_ENVIRONMENT --registry-server $CONTAINER_REGISTRY --ingress external --target-port 8080 --registry-username $ACR_USERNAME --registry-password $ACR_PASSWORD
132+
az extension add --name containerapp --upgrade
133+
az containerapp up -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --image $CONTAINER_REGISTRY/essentialcsharpweb:${{ github.sha }} --environment $CONTAINER_APP_ENVIRONMENT --registry-server $CONTAINER_REGISTRY --registry-identity ${{ secrets.WEB_UAMI_RESOURCE_ID }} --user-assigned ${{ secrets.WEB_UAMI_RESOURCE_ID }} --ingress external --target-port 8080
138134
139135
- name: Assign Managed Identity to Container App and Set Secrets and Environment Variables
140136
uses: azure/CLI@v3
@@ -144,14 +140,11 @@ jobs:
144140
CONTAINER_REGISTRY: ${{ vars.DEVCONTAINER_REGISTRY }}
145141
CONTAINER_APP_ENVIRONMENT: ${{ vars.CONTAINER_APP_ENVIRONMENT }}
146142
KEYVAULTURI: ${{ secrets.ESSENTIALCSHARP_KEYVAULT_URI }}
147-
MANAGEDIDENTITYID: ${{ secrets.ESSENTIALCSHARP_APPIDENTITY_ID }}
148-
ACR_USERNAME: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
149-
ACR_PASSWORD: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
150-
AZURECLIENTID: ${{ secrets.IDENTITY_CLIENT_ID }}
143+
MANAGEDIDENTITYID: ${{ secrets.WEB_UAMI_RESOURCE_ID }}
144+
AZURECLIENTID: ${{ secrets.WEB_UAMI_CLIENT_ID }}
151145
TRYDOTNET_ORIGIN: ${{ vars.TRYDOTNET_ORIGIN }}
152146
with:
153147
inlineScript: |
154-
az containerapp identity assign -n ${{ vars.CONTAINER_APP_NAME }} -g ${{ vars.RESOURCEGROUP }} --user-assigned ${{ vars.CONTAINER_APP_IDENTITY }}
155148
az containerapp secret set -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --secrets github-clientid=keyvaultref:$KEYVAULTURI/secrets/authentication-github-clientid,identityref:$MANAGEDIDENTITYID \
156149
github-clientsecret=keyvaultref:$KEYVAULTURI/secrets/authentication-github-clientsecret,identityref:$MANAGEDIDENTITYID msft-clientid=keyvaultref:$KEYVAULTURI/secrets/authentication-microsoft-clientid,identityref:$MANAGEDIDENTITYID \
157150
msft-clientsecret=keyvaultref:$KEYVAULTURI/secrets/authentication-microsoft-clientsecret,identityref:$MANAGEDIDENTITYID emailsender-apikey=keyvaultref:$KEYVAULTURI/secrets/authmessagesender-apikey,identityref:$MANAGEDIDENTITYID \
@@ -194,7 +187,7 @@ jobs:
194187
- name: Azure Login
195188
uses: azure/login@v3
196189
with:
197-
client-id: ${{ secrets.ESSENTIALCSHARP_CLIENT_ID }}
190+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
198191
tenant-id: ${{ secrets.ESSENTIALCSHARP_TENANT_ID }}
199192
subscription-id: ${{ secrets.ESSENTIALCSHARP_SUBSCRIPTION_ID }}
200193

@@ -210,11 +203,9 @@ jobs:
210203
docker image ls -a
211204
212205
- name: Log in to container registry
213-
uses: docker/login-action@v4
214-
with:
215-
registry: ${{ vars.PRODCONTAINER_REGISTRY }}
216-
username: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
217-
password: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
206+
run: |
207+
REGISTRY="${{ vars.PRODCONTAINER_REGISTRY }}"
208+
az acr login --name "${REGISTRY%.azurecr.io}"
218209
219210
- name: Push Image to Container Registry
220211
run: docker push --all-tags ${{ vars.PRODCONTAINER_REGISTRY }}/essentialcsharpweb
@@ -226,12 +217,10 @@ jobs:
226217
RESOURCEGROUP: ${{ vars.RESOURCEGROUP }}
227218
CONTAINER_REGISTRY: ${{ vars.PRODCONTAINER_REGISTRY }}
228219
CONTAINER_APP_ENVIRONMENT: ${{ vars.CONTAINER_APP_ENVIRONMENT }}
229-
ACR_USERNAME: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
230-
ACR_PASSWORD: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
231220
with:
232221
inlineScript: |
233-
az config set extension.use_dynamic_install=yes_without_prompt
234-
az containerapp up -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --image $CONTAINER_REGISTRY/essentialcsharpweb:${{ github.sha }} --environment $CONTAINER_APP_ENVIRONMENT --registry-server $CONTAINER_REGISTRY --ingress external --target-port 8080 --registry-username $ACR_USERNAME --registry-password $ACR_PASSWORD
222+
az extension add --name containerapp --upgrade
223+
az containerapp up -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --image $CONTAINER_REGISTRY/essentialcsharpweb:${{ github.sha }} --environment $CONTAINER_APP_ENVIRONMENT --registry-server $CONTAINER_REGISTRY --registry-identity ${{ secrets.WEB_UAMI_RESOURCE_ID }} --user-assigned ${{ secrets.WEB_UAMI_RESOURCE_ID }} --ingress external --target-port 8080
235224
236225
- name: Assign Managed Identity to Container App and Set Secrets and Environment Variables
237226
uses: azure/CLI@v3
@@ -241,14 +230,11 @@ jobs:
241230
CONTAINER_REGISTRY: ${{ vars.PRODCONTAINER_REGISTRY }}
242231
CONTAINER_APP_ENVIRONMENT: ${{ vars.CONTAINER_APP_ENVIRONMENT }}
243232
KEYVAULTURI: ${{ secrets.ESSENTIALCSHARP_KEYVAULT_URI }}
244-
MANAGEDIDENTITYID: ${{ secrets.ESSENTIALCSHARP_APPIDENTITY_ID }}
245-
ACR_USERNAME: ${{ secrets.ESSENTIALCSHARP_ACR_USERNAME }}
246-
ACR_PASSWORD: ${{ secrets.ESSENTIALCSHARP_ACR_PASSWORD }}
247-
AZURECLIENTID: ${{ secrets.IDENTITY_CLIENT_ID }}
233+
MANAGEDIDENTITYID: ${{ secrets.WEB_UAMI_RESOURCE_ID }}
234+
AZURECLIENTID: ${{ secrets.WEB_UAMI_CLIENT_ID }}
248235
TRYDOTNET_ORIGIN: ${{ vars.PROD_TRYDOTNET_ORIGIN }}
249236
with:
250237
inlineScript: |
251-
az containerapp identity assign -n ${{ vars.CONTAINER_APP_NAME }} -g ${{ vars.RESOURCEGROUP }} --user-assigned ${{ vars.CONTAINER_APP_IDENTITY }}
252238
az containerapp secret set -n $CONTAINER_APP_NAME -g $RESOURCEGROUP --secrets github-clientid=keyvaultref:$KEYVAULTURI/secrets/authentication-github-clientid,identityref:$MANAGEDIDENTITYID \
253239
github-clientsecret=keyvaultref:$KEYVAULTURI/secrets/authentication-github-clientsecret,identityref:$MANAGEDIDENTITYID msft-clientid=keyvaultref:$KEYVAULTURI/secrets/authentication-microsoft-clientid,identityref:$MANAGEDIDENTITYID \
254240
msft-clientsecret=keyvaultref:$KEYVAULTURI/secrets/authentication-microsoft-clientsecret,identityref:$MANAGEDIDENTITYID emailsender-apikey=keyvaultref:$KEYVAULTURI/secrets/authmessagesender-apikey,identityref:$MANAGEDIDENTITYID \

0 commit comments

Comments
 (0)