Grrrr DevOps Pipeline... premier gros crash đŸ˜€

De wikili
Version datĂ©e du 5 juin 2025 Ă  14:11 par Lli (discussion | contributions) (Ce week-end, un gros crash est survenu dans nos pipelines DevOps suite Ă  la mise Ă  jour automatique du module Az.Accounts v5 dans Azure. Le cmdlet Get-AzAccessToken retourne dĂ©sormais un SecureString au lieu d’un String. Comme nos anciens scripts SQL ne savent pas le gĂ©rer, tout a plantĂ© en production. Le vrai souci : le warning existait, mais personne ne l’a vu car tout tourne dans un backend silencieux. 👉 Leçon : toujours surveiller les warnings de breaking change, mĂȘme en arriĂšre-plan.)
(diff) ← Version prĂ©cĂ©dente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller Ă  la navigation Aller Ă  la recherche

Je savais que Microsoft avait prĂ©venu
 mais comme souvent, personne n’a vu passer l’info sĂ©rieusement 😅

On bosse dans une équipe fullstack DevOps, avec des scripts qui appellent des procédures SQL dans des milliers de bases Azure SQL, que ce soit pour de la maintenance, des exports, du nettoyage
 bref, du classique.

Et pour ça, on utilise le token obtenu avec la fonction Get-AzAccessToken.

Le hic ? Microsoft met Ă  jour en continu leur backend. Donc le pool d’Azure Pipeline qui exĂ©cute nos scripts PowerShell est mis Ă  jour automatiquement, sans intervention de notre part.

Et ce dimanche
 patatras đŸ’„ : ils ont mis Ă  jour le module Az.Accounts de la version 4 vers la 5, avec un breaking change majeur :

Le token n’est plus retournĂ© en String, mais en SecureString !

RĂ©sultat ? Toutes les fonctions plus anciennes qui manipulent ces tokens n’arrivent plus Ă  les lire, et ça casse tout. En prod. đŸ˜©

Le pire ? Comme tout tourne dans un backend, on ne remonte pas les warnings, donc personne ne l’a vu venir. C’est seulement une fois que les exports sont tombĂ©s en erreur qu’on a compris.

🎓 Leçon apprise : ne jamais ignorer les warnings
 mĂȘme s’ils sont planquĂ©s dans les logs.

🔧 Fix : il faut ajouter le paramĂštre -AsPlainText dans certains cas ou revoir complĂštement la gestion du token selon le module utilisĂ©.

Voici le warning qu’on aurait dĂ» prendre au sĂ©rieux :

get-azaccesstoken
WARNING: Upcoming breaking changes in the cmdlet 'Get-AzAccessToken' :
The Token property of the output type will be changed from String to SecureString. Add the [-AsSecureString] switch to avoid the impact of this upcoming breaking change.
- The change is expected to take effect in Az version : '14.0.0'
- The change is expected to take effect in Az.Accounts version : '5.0.0'
Note : https://aka.ms/azps-changewarnings

WorkArround

$azAccountsVersion = (Get-Module -ListAvailable -Name Az.Accounts | Sort-Object Version -Descending | Select-Object -First 1).Version
$dexResourceUrl   = 'https://database.windows.net/'
if ($azAccountsVersion -ge [Version]'5.0.0') {
    write-host  "Az.Accounts 5.0.0 and above"
    $AccessTokenSecure = (Get-AzAccessToken -ResourceUrl $dexResourceUrl).Token
    $token  = ConvertFrom-SecureString -SecureString $AccessTokenSecure -AsPlainText
} else {
    write-host  "Az.Accounts below 5.0.0"
    $token = (Get-AzAccessToken -ResourceUrl $dexResourceUrl).Token
}