Grrrr DevOps Pipeline... first major crash đ€
I knew Microsoft had given a warning⊠but as usual, no one really took it seriously đ
We work in a fullstack DevOps team, with scripts that call SQL procedures in thousands of Azure SQL databases, whether for maintenance, exports, cleanup⊠you know, the usual stuff.
And for that, we use the token obtained with the Get-AzAccessToken functionGet-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.
RĂ©sultat ? Toutes les fonctions plus anciennes qui manipulent ces tokens nâarrivent plus Ă les lire, et ça casse tout. En prod. đ©Le token nâest plus retournĂ© en
String
, mais enSecureString
!
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
</div>
<div lang="fr" dir="ltr" class="mw-content-ltr">
$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
}